Kotlin高阶函数Lambda

55 阅读2分钟

Unit类型,让函数调用皆为表达式

1:java中void表示没有返回值类型的函数

//没有返回值的函数
void foo(){
//do ***
}

2:如何理解Kotlin中的Unit
Unit是一个类型,他不代表任何信息,他是一个单例,他的实例只有一个,可写为()
此类型可用来做函数做为参数,传递 或者当返回值

符合表达式

相比于语句 表达式更倾向于自成一块,避免与上下文共享状态,相互依赖,因此我们说他具备更好的[隔离性],所以更加安全
表达式还有一定表达能力,也可以组合使用

var  res:Int?=try {
  if(result.success){
    jsonDecode(result.response)
  }else{
    null 
   }
}catch(e: JsonDecodeException){
  null
}

?: ELvis

和java的三元运算符很像

val mabyInt:Int?=null
--->> mabyInt?:1
输出:1

中缀表达式

in,step,downTo,until,可以不通过点号,而是通过中缀表达式来调用,从而让语法更加简洁和直观
A 中缀方法 B
结论:
1:该中缀方法必须是这个类型的扩展函数
2:该中缀方法只能有一个参数,,参数也不可能是可变参数
3:kotlin支持默认值,中缀方法不允许有默认值,会对中缀表达式造成破坏

可变参数

kotlin使用vararga定义函数中的可变参数,类似java的...;java的可变参数必须是最后一位,kotlin没有这个限制

fun  Test(vararaga str:String,count:Int){

}

infix 定义一个中缀表达式

class  Test{
  infix  fun call(name:String){
    print("my  name is ${name}")
  }
}
fun   main (args:Array<String>){
val p =Person()
p call "Shaw"
//结果
--> my  name  is  Shaw
}

isBlank

val str1 = "    "
val str2 = "Hello World"
val str3 = ""
 
println(str1.isBlank()) // 输出 true,因为字符串只包含空白
println(str2.isBlank()) // 输出 false,因为字符串不是空且包含非空白字符
println(str3.isBlank()) // 输出 true,因为字符串是空的

👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀