1.函数无返回类型 为Unit. 返回值有Noting类型。 2.可以设置参数默认值。
private fun doSomething(flag:Boolean,age:Int =2):String{
return "result"+age+flag
}
3.传入参数位置是可以变化的:
fun main(){
doSomething(true)
doSomething(true,1)
doSomething(age = 1,flag = true)
}
private fun doSomething(flag:Boolean,age:Int =2):String{
return "result"+age+flag
}
4.特殊函数。反引号
fun main(){
`fun`()
}
fun `fun` (){
println("我是特殊函数")
}
5.匿名函数,无需retrun 返回最后一行代码结果
println({a: Int, b: String ->
"Welcome to SimVillage, $a!(copyright $b)"
}(2019, "Benny"))
6.匿名函数类型推断。下面是匿名函数,返回值为String.参数类型也可以省略。
val bessingFunction={a:String,b:Int ->
"我是匿名函数"
}
print(bessingFunction("ss",1))
7.函数以匿名函数为参数。
fun main(){
val bessingFunction ={a:Int,b:Int ->
a+b
}
A("小明",bessingFunction)
}
fun A(name:String,B:(Int,Int)->Int){
print("$name 1+1的答案:"+B(1,1))
}
//输出结果为:
//小明 1+1的答案:2
8.函数以函数为参数,两个冒号。
fun main(){
A("小明",::B)
}
fun B(a:Int,b:Int):Int{
return a+b
}
fun A(name:String,B:(Int,Int)->Int){
print("$name 1+1的答案:"+B(1,1))
}
8.infine 内联函数,没什么用。不会新建对象,对内存好。
9.函数返回类型为函数
fun main(){
val getDiscountWords:(String)->String =configDisountWords()
println(getDiscountWords("牙膏"))
}
fun configDisountWords():(String)->String{
return {name:String ->
"他的名字$name"
}
}
9.闭包(写一个函数和一个变量容易重名)fun 里面定义匿名fun1 fun1可以使用fun里面的变量。
10.匿名函数其实就是相当预匿名内部类。
11.let 函数参数为调用者本身。
var str: String? = null
str?.let{
if(it.isNotBlank()){
it.capitalize()//大写
}else{
"i'm str"
}
}