版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36252044/article/details/86664867
本篇主要介绍一些在 Kotlin中广泛使用的语法习惯.
1.数据类
Android中经常创建一些保存数据的Model类,比如UserBean类.在Kotlin中,这叫做数据类,并标记为 data.
eg:
data class Customer(val name:String,val email:String)
Kotlin会为Customer 类提供以下功能:
- 所有属性的getters (对于var 定义的还有setters)
- equals()
- hashCode()
- toString()
- copy()
- 所有属性的component1(),component2()等
解释
在这里解释下 componentN()函数
- componentN()函数是指按声明顺序对应于所有属性
eg:
val(name,age) = person (解构声明,就是把一个对象解构成很多变量)
val name = person.component1()
val age = person.component2()
- 这里的component1()和component2()函数是在Kotlin中广泛使用的约定原则.
2.函数的默认参数
函数的入参可以有默认参数,这里和Java中还是有区别的
eg:
fun foo(a:Int = 0,b:String=""){
…
}
解释
如果调用foo()函数不传入参,函数自己会对入参有个默认值,a = 0,b =""
3.过滤list
这里先介绍 filter的用法,就是过滤掉满足条件的数据,
eg:
val list = listOf(1,2,3,4,5)
fun main(){
val eg1 = list.fliter{it > 3}
val eg2 = list.filter{x -> x>2}
println(eg1)
println(eg2)
}
- 结果
[4,5]
[3,4,5]
4.字符串内插
其实我的理解就是占位符
eg:
val name = "lxx"
fun main(){
print("Name is $name")
}
- 输出 Name is lxx
5.只读list,map
只读list
val list = listOf("a","b","c")
val map = mapOf("a" to 1,"b" to 2,"c" to 3)
6.延迟属性
这里仅仅介绍 by lazy的用法
在上一篇我们了解了,Kotlin中属性在声明时候必须要初始化,不然就会编译不通过.
但是有时候不想声明一个为空的属性,也没有办法在声明变量的时候赋值. 这时就用到了延迟属性
var p: String by lazy{
"ppp"
}
解释
by lazy 是在声明属性的同时,也指定了延迟初始化是的行为,在属性第一次被使用的时候能自动初始化.
7.非空判断
if not null 缩写
eg:
val files = File(“Test”).listFiles()
println(files?.size)
if not null and else 缩写
eg:
val files = File(“Test”).listFiles
println(files?.size?:“empty”)
如果文件的大小为空的化,输出"empty"字符串
在可能为空的集合中取第一个元素
val emails = .... //集合可能为空
val item = emails.firstOrNull()?:""
8.try/catch 表达式
fun test(){
val result = try{
count()
}catch(e: AirthmeticException){
throw IllegaStateExcepyion(e)
}
//得到result,然后做对应的逻辑处理
}
9. if表达式
fun foo(params:Int){
val result = if(param == 0){
"zero"
}else if(param == 1){
"one"
}else{
"other"
}
//对result做操作
}
10.单表达式函数
fun getInt() = 20
- 也可以这样写
fun getInt():Int{
return 20
}
11.对一个对象实例调用多个方法 (with)
eg:
class StringDemo{
fun one():String{
return "First fun "
}
fun second(): Int{
return 2
}
}
fun main(){
val myDemo = StringDemo()
with(myDemo){
println( one())
println( second())
}
- 输出
First fun
2
12.使用可空布尔
val b :Boolean? = null
fun main(){
if(b == true){
println("true")
}else{
println("false 或者是 null")
}
}
- 输出是 false 或者是 null