Kotlin从头开始(一):lambda表达式和高阶函数 一,Android开发还会吃香吗
tip:上述代码中,把鼠标悬停在getString的调用上,按下Shift+Ctrl+P,就成看到getString的参数和返回值。下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。在kotlin中,大部分都是表达式,比如if,when,表达式可以返回,而在java中,if等都是语句,不能返回。大概就上面这几个步骤,这样学习不仅高效,
var getString : () -> Unit = {
println(“hello kotlin”)
}
此处有没有一点疑惑,为什么类型推导得出的类型是 () -> Unit ?
此时只要回头看一下Kotlin中函数是如何声明的,就知道为什么了。
为什么这里的函数不是fun开头的
-
其实这里的函数是匿名函数,上述的写法就是把这个匿名函数赋值给了变量。
-
可以直接使用变量名进行调用或者使用invoke,方式如下:
fun main() {
val getString : () -> Unit = {
println(“hello kotlin”)
}
getString()
getString.invoke()
}
- 两种方式都可以成功调用,这里的()其实是invoke操作符的重载。
var getString = {“this is kotlin”} 是什么意思
跑一下上面的代码,看看运行结果是啥
fun main() {
val getString = {
“hello kotlin”
}
print(getString.invoke())
}
-
结果打印了hello kotlin。
-
在括号中,最后一行将会作为返回值。如果把代码修改为下面的样子
fun main() {
val getString = {
“hello kotlin”
666
}
print(getString.invoke())
}
返回值就成了666。 如果最后一行是函数,则就成了函数中的函数,也就是高阶函数。
稍微复杂一点
val testPlus = {number1: Int, number2: Int -> number1 + number2}
- 这个函数中,number1和number2分别作为两个参数,函数的功能是number1+number2,则返回值的类型就是Int。相当于Java中的
public int testPlus(int number1, int number2) {
return number1 + number2;
}
再复杂一点
刚刚提到了,函数分为声明和实现两个部分。那么自然就可以先声明再实现。
先声明:
val getString : (Int) -> String
再实现:
getString = fun(number) = number.toString()
- 声明的时候,参数类型为Int,返回值为String。实现的时候,number会被自动推导为int,函数实现要返回String类型,如果toString换成toShort,编译器就会报错。
如果把成整体就是下面的样子:
fun main() {
val getString : (Int) -> String = fun(number) = number.toString()
getString
}
tip:上述代码中,把鼠标悬停在getString的调用上,按下Shift+Ctrl+P,就成看到getString的参数和返回值。

那么,这么写有什么好处呢?
除了装b,大概是没有其他用处的。
茴字的最后一种写法
声明和实现一起写,应该怎么写呢
val getString : (Int, String) -> String = {values, str -> “value is $values str is $str”}
- values是Int类型,str是String类型,返回值是String类型
还能再简化一点吗
能,但是只能有一个参数
val getString : (String) -> Unit = {
println(“string is $it”)
}
- 按照上面的说法, 大括号后面应该出现一个str->,但是因为只有一个参数,所以可以用it代替。
在kotlin中,大部分都是表达式,比如if,when,表达式可以返回,而在java中,if等都是语句,不能返回
那两个甚至多个参数的时候,可以简写吗
fun main() {
val getString : (String, String) -> Unit = {_,str2 ->
println(“str is $str2”)
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。





既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
总结
可以看出,笔者的工作学习模式便是由以下 「六个要点」 组成:
❝ 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法❞
希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。
下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。
**如:我需要学习 **Flutter的知识。(大家可以参考我的学习方法)
- Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)

- Flutter进阶学习全套手册

- Flutter进阶学习全套视频

大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
(img-PXYLZ9s0-1712777030853)]
- Flutter进阶学习全套手册
[外链图片转存中…(img-G96oTCby-1712777030854)]
- Flutter进阶学习全套视频
[外链图片转存中…(img-Ug2iBSYM-1712777030854)]
大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐
所有评论(0)