常见符号
- $
直接引用变量,多用于输出日志中
fun person(age: Int,name: String){
println("age: $age name:$name")
}
- ? 表示这个对象可能为空
var name: String? = null
表示name可能为空,一般赋值null的时候,会强制加上,当然也可以使用延迟加载
name?.toString()
如果 name非空,就返回 name.toString ,否则返回 null。
- !! 与?不同的是,如果一个对象为空,使用?的话,会直接返回null,而如果使用!!的话,怎会报空指针异常,所以!!还是少用比较好
var test: String? = null
fun test(){
println(test?.toString())
println("test ${test!!.toString()}")
}
输出为:
3820-3820/com.chuan.jun I/System.out: null
Unable to start activity ComponentInfo{com.chuan.jun/com.chuan.jun.MainActivity}: kotlin.KotlinNullPointerException
- .. 表示区间
if (i in 1..10) { // 等同于 1 <= i && i <= 10
println(i)
}
for (i in 1..4) print(i) // 输出“1234”
- :: 意为将当前的某个函数/表达式以变量的形式传递给另一个函数
//调用函数
fun test(){
test1(this::person)
}
//需要被传递的函数
fun person(age: Int,name: String){
println(age.toString() + name)
}
//接收函数/表达式的函数
fun test1(str:(Int,String) -> Unit){
str(10,"chuan")
}
调用函数test,并将成员函数person以变量的形式传递给test1,test1负责接收一个入参为Int,String返回值类型为空的表达式/函数,并为此表达式/函数进行赋值操作,然后person函数接收到赋值,并打印日志,可以看出真正调用person的地方是test1里面,而在test里面则是将person函数当做一个变量传递给test1.
输出为:4593-4593/? I/System.out: 10chuan
::
用的多的场景就是在获取某个类的java类对象时 startActivity(Intent(this, MainActivity::class.java))
条件表达式
- if/else 略
- when 相当于switch/case,相比于switch,when的判断分支可以是任何类型,或具体的值,或条件表达式等等.
fun person(age: Int,name: String){
when(age){
1 -> println("age == 1")
2,3 -> println("age 等于2 或等于3")
in 5..10 -> println("age 位于区间5-10之间")
else -> println("所有判断分支都不对")
}
}
上面的判断很类似于switch/case 不过判断分支却是比switch/case要灵活很多
fun test(age: Int){
var result = when{
age > 10 -> age
age == 10 -> 10
else -> {
0
}
}
}
上面则是将when当做一个表达式,并将返回赋予result
- for 与java中的for循环不同,
for(a in 1..10){
// for循环的初始化 更依赖于区间
}
因为:
在kotlin中有其他的含义,所以在for循环中就取消了:
的含义
for(item in items){
}
通过in来替换掉原先冒号所起的作用