一起学Kotlin(2)

来吧,这节接着来学习Kotlin的匿名函数。要是对变量、函数定义、条件语句还不太清楚的可以看下前一篇:Kotlin基础(1)
1、匿名函数
定义时不取名字的函数,我们称之为匿名函数。匿名函数通常整体传递给其它函数或者从其它函数返回。

val total = "Nice To Meet You".count()
val toatlL = "Nice To Meet You".count({letter->
    letter == 'l'
})
println(total)
println(toatlL)

匿名函数也有类型,匿名函数可以当作变量赋值给函数类型变量,就像其它变量一样。匿名函数不需要return关键字来返回数据,匿名函数会隐士或自动返回函数体最后一行语句的结果。

val sayHello:()->String = {
        val name = "Jcak"
        "Nice to meet you,${name}"
    }
    println(sayHello())
//运行结果
//Nice to meet you,Jcak

匿名函数可以不带参数,也可以带一个或多个任何类型的参数。需要带参数时,参数的类型放在匿名函数的类型定义中,参数名则放在函数定义中。

//这里带一个String类型的参数
val sayHello:(String)->String = {name->
    "Nice to meet you,${name}"
}
println(sayHello("Jcak"))

定义只有一个参数的匿名函数时,可以使用it关键字来表示参数名。当你需要传入两个参数时,it关键字就不能用了

//只有一个参数,默认可以使用it关键字来代替参数名
val sayHello:(String)->String = {
    "Nice to meet you,${it}"
}
println(sayHello("Jcak"))
//当有2个及以上参数的时候,it关键字不能在使用,需要具体参数名
val sayHello:(String,Int)->String = {name,age->
        "Nice to meet you,${name}。Age is ${age}"
    }
    println(sayHello("Jcak",30))

类型推断:匿名函数也支持类型推断,但为了帮助编译器更准确的推断变量类型,匿名函数的参数名和参数类型必须有

val sayHello = {name:String,age:Int ->
        "Nice to meet you,${name}。Age is ${age}"
    }
    println(sayHello("Jcak",30))

这段代码与上面的代码效果是一样的,只是参数类型以及返回类型都是自动推断的。需要注意的是在写参数名的地方需要带上参数类型。这样编译器才知道你的参数类型是什么,该怎么用。
2、lanbda表达式
函数的参数是另外一个函数

fun getSayStr(name:String,say:(String,Int)->String){
    println(say(name,30))
}
val sayHello = {name:String,age:Int ->
    "Nice to meet you,${name}。Age is ${age}"
}
//在调用getSayStr的时候将匿名参数sayHello作为参数传递进去了
getSayStr("Jcak",sayHello)

如果一个函数的lambda参数排在最后或者是唯一的参数,那么括住lambda值参的一对圆括号可以省略。

getSayStr("Jcak"){name:String,age:Int ->
        "Nice to meet you,${name}。Age is ${age}"
    }

这段代码与上面的效果是一样的。但讲真,这个还真不好看,大括号内的很容易被理解为函数体而非匿名函数。现在知道为什么要学Kotlin的语法了吧,不然以后看到人家这样写,还真不知道怎么回事啊。
函数引用:要把函数作为参数传递给其它函数使用,除了传lambda表达式,kotlin还提供了其它方法,传递函数引用,函数引用可以把一个具名函数转换为一个值参,使用lambda表达式的地方,都可以使用函数引用。

fun getSayStr(name:String,say:(String,Int)->String){
    println(say(name,30))
}
fun say(name: String,age:Int):String{
    return "Nice to meet you,${name}。Age is ${age}"
}
//在调用的时候用::引用函数名
getSayStr("Jcak",::say)

函数类型也是有效的返回类型,可以定义一个能返回函数的函数

fun sayHello():(String)->String{
    return {
        "Nice to meet you,${it}"
    }
}
val sayHelloFunc = sayHello()
println(sayHelloFunc("Jcak"))

在Java8支持lambda表达式,但不支持将函数作为参数传递给另一个变量或者函数。在Java中的替代方案是匿名内部类(接口)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin是一种现代化的静态类型编程语言,它可以在Java虚拟机(JVM)上运行,并且与Java语言高度兼容。如果你想Kotlin,以下是一个习路线的建议: 1. 了解基础知识:开始Kotlin之前,建议先了解一些基本的编程概念和语法,比如变量、数据类型、条件语句、循环语句等。这将为你后续的习打下坚实的基础。 2. Kotlin语法:Kotlin与Java有很多相似之处,但也有一些不同之处。Kotlin的语法和特性,比如空安全、扩展函数、数据类等,可以通过官方文档、教程或在线课程来习。 3. 实践编程:通过编写一些简单的程序来巩固所的知识。可以尝试解决一些小问题或者完成一些小项目,这样可以更好地理解和应用Kotlin的语法和特性。 4. 深入习面向对象编程:Kotlin是一种面向对象的编程语言,深入习面向对象编程的概念和原则对于掌握Kotlin非常重要。习类、对象、继承、多态等概念,并尝试在Kotlin中应用这些概念。 5. Kotlin与Java的互操作性:由于Kotlin与Java高度兼容,习如何在Kotlin中使用Java类库和框架是非常重要的。了解如何调用Java代码、处理Java集合等,可以帮助你更好地使用Kotlin进行开发。 6. 深入Kotlin的高级特性:一旦掌握了Kotlin的基础知识,可以进一步习一些高级特性,比如协程、函数式编程、DSL等。这些特性可以提高你的代码质量和开发效率。 7. 参与实际项目:最好的习方式是通过实践。尝试参与一些实际的项目或者开源项目,与其他开发者合作,这样可以提升你的编程能力和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值