鱼C论坛

 找回密码
 立即注册
查看: 2834|回复: 1

[技术交流] kotlin基础之函数与lambda表达式

[复制链接]
发表于 2017-11-16 09:21:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        在kotlin里函数跟lambda是重中之重,而且也非常难学,不过像我这种笨人学点皮毛还是可以的,希望大家能见一叶而知秋,像佛祖一样拈花一笑,就可以了解大千世界。我只作为一个介绍者。
       
  1. fun main(args: Array<String>) {

  2.     println(readBook("《Kotlin 实战》"))

  3. }
  4. fun readBook(str:String):String{
  5.     return "我读了 $str 这本书"
  6. }
复制代码

        这就是kotlin的函数写法以fun关键字开头,然后是函数名,圆括号里是参数,在冒号后面是返回值类型,如果没有返回值可以不写。调用时候跟其他语言一样。

        函数也可以有动态类型加载,如下:
  1. fun main(args: Array<String>) {

  2.     println(readBook("《Kotlin 实战》"))
  3.     println(readBook(1))

  4. }
  5. fun <T>readBook(str:T):String{
  6.     return "我读了 $str 这本书"
  7. }
复制代码

        这就会让你编程时非常方便,想传什么类型就传什么类型。输出结果为:
我读了 《Kotlin 实战》 这本书
我读了 1 这本书

        参数还可以设置一个数组类型,如:
  1. fun main(args: Array<String>) {

  2.     println(readBook("《Kotlin 实战》","《java大全》","《C++大全》"))

  3. }
  4. fun readBook(vararg str:String):String{
  5.     return "我读了 ${str.joinToString ()} 这些本书"
  6. }
复制代码

        在变量前加个vararg关键字就可以把类型变成个数组,在返回时我又把这个数组转换成了字符串。输出结果为:
我读了 《Kotlin 实战》, 《java大全》, 《C++大全》 这些本书


        然后说说lambda表达式,其实就是函数的一个简写方法,例如:
  1. fun main(args: Array<String>) {

  2.     var readBook={str:String->"我读了${str}这本书"}

  3.     println(readBook("《零基础入门学习Python》小甲鱼 著"))

  4. }
复制代码

        效果跟函数一样,但只用了一行代码,而且运行速度要比函数快,非常的好用。以后我们尽量用这种方式,不要用函数。

        还可以用lambda表达式作为函数参数,如下:
  1. inline fun modifyString(str:String,operation:(String)->String):String{
  2.     return operation(str)
  3. }

  4. fun main(args: Array<String>) {

  5.     println(modifyString("hello",{it.toUpperCase()}))

  6. }
复制代码

输出结果为:
HELLO

前面的inline关键字是为了让函数运行起来更效率,没有也可以。这里传进去的it就代表str。

        还有这种方法:
  1. fun main(args: Array<String>) {
  2.    
  3.     fun permit(vararg ages:Int):Boolean{
  4.         return ages.any{age->age>10}
  5.     }
  6.     println(permit(1,11,2))
  7. }
复制代码

输出结果为:
  1. true
复制代码

        any方法是判断ages数组里的所有值,如果有一个大于10的话就返回真,否则返回假。lambda在列表跟hashmap里应用比较广泛,我们以后再说。先简单介绍个字符串过滤的方法:
  1. fun main(args: Array<String>) {

  2.     var str1="I love FishC 3"

  3.     var fil=str1.filter { it.isDigit() }
  4.     print(fil)
  5. }
复制代码

输出结果:
3

就是把字符串里是数字的部分都过滤出来,很方便吧?

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
chun888 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-16 16:04:21 | 显示全部楼层
我要把你这27篇看完他
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 11:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表