Skip to content
Able Blog
Home
Others
  • Home
      • 学习笔记
          • Android
            • 简历_赵思琦_Android_5年经验
                • Kotlin
                    • HandFirstKotlin程序设计
                      • 01. 快速入门
                        • 02. 基本类型和变量:关于变量
                          • 03. 函数
                            • 04. 类和对象
                              • 05. 子类和父类
                                • 06. 抽象和接口
                                  • 07. 数据类
                                    • 08. 空值和异常
                                      • 09. 集合
                                        • 10. 泛型
                                          • 11. Lambda和高阶函数
                                            • 1. lambda
                                              • 1.1 java风格的匿名函数
                                                • 1.2 kotlin中 lambda的格式
                                                • 2. 高阶函数
                                                  • 2.1 将函数作为参数和返回值
                                                    • 2.2 为已存在的类型取别名
                                                  • 12. 内置高阶函数
                                                    • 12. 协程

                                              11. Lambda和高阶函数

                                              author iconAblecalendar icon2022年5月16日category icon
                                              • Kotlin
                                              tag icon
                                              • 学习笔记
                                              • Lambda
                                              word icon约 631 字

                                              此页内容
                                              • 1. lambda
                                                • 1.1 java风格的匿名函数
                                                • 1.2 kotlin中 lambda的格式
                                              • 2. 高阶函数
                                                • 2.1 将函数作为参数和返回值
                                                • 2.2 为已存在的类型取别名

                                              # 11. Lambda和高阶函数

                                              # 1. lambda

                                              本质上就是匿名函数

                                              # 1.1 java风格的匿名函数

                                              # java风格的

                                              public class Test {
                                                  interface Printer{
                                                      abstract public void show();
                                                  }
                                                  private static void printAll(Printer printer){
                                                      System.out.println("行首");
                                                      printer.show();
                                                      System.out.println("行尾");
                                                  }
                                                  public static void main(String[] args) {
                                                      printAll(() -> {
                                                          System.out.println("行中");
                                                      });
                                                  }
                                              }
                                              
                                              
                                              1
                                              2
                                              3
                                              4
                                              5
                                              6
                                              7
                                              8
                                              9
                                              10
                                              11
                                              12
                                              13
                                              14
                                              15
                                              16

                                              # kotlin中使用java风格的实现

                                              interface Pinter{
                                                 abstract fun show()
                                              }
                                              
                                              fun test(p:Pinter){
                                                  println("行首")
                                                  p.show()
                                                  println("行尾")
                                              }
                                              
                                              fun main() {
                                                 test(object :Pinter{
                                                     override fun show() {
                                                         println("行中")
                                                     }
                                                 })
                                              }
                                              
                                              1
                                              2
                                              3
                                              4
                                              5
                                              6
                                              7
                                              8
                                              9
                                              10
                                              11
                                              12
                                              13
                                              14
                                              15
                                              16
                                              17

                                              # 1.2 kotlin中 lambda的格式

                                              {x:Int->"返回值"}

                                              这是最基本的格式

                                              x表示入参,"返回值"表示函数主题,}前的最后一行默认为返回值

                                              lambda表达式是表达函数的方式,而一个匿名函数通常由参数,函数体,返回值组成。

                                              # 1.2.1 匿名函数的类型声明

                                              函数也是一种类型,就像普通的类,或是基本数据类

                                              # 声明入参,返回值的函数类型
                                                  val sum:(x:Int)->String
                                                  val sum:((Int)->Int)? //当然由于它是一个类型,我也可以认为他是可空的
                                              
                                              
                                              1
                                              2
                                              3

                                              返回值为空的函数

                                                 val show :(String)->Unit
                                              
                                              1
                                              # 实现该函数的函数体

                                              入参x:Int,y:Int,返回string的他们的和

                                                val sum:(x:Int,y:Int)->String = {x,y->
                                                      "${x+y}"
                                                  }
                                              
                                              1
                                              2
                                              3

                                              入参String,返回空,在函数体里打印

                                                 val show :(String)->Unit
                                                  show={it-> println(it) }
                                                  show("苏伟苏伟苏伟")
                                              
                                              1
                                              2
                                              3
                                              # 示例
                                              fun main() {
                                                  val onDay: (bug: Boolean, eat: Boolean, sleep: Boolean) -> Unit
                                                  val bug: (isFinash: Boolean) -> Boolean = { it ->
                                                      if (it) {
                                                          println("终于修复完了")
                                                          true
                                                      } else {
                                                          println("没修复完,客户痛苦,领导要崔")
                                                          false
                                                      }
                                                  }
                                                  val eat: (isDelicious: Boolean) -> Boolean = { it ->
                                                          if (it) {
                                                              println("今天的快餐很美味")
                                                              true
                                                          } else {
                                                              println("可能厨子今天心情不好")
                                                              false
                                                          }
                                                  }
                                                  val sleep: (isQuiet: Boolean?) -> Boolean = {
                                                      it->
                                                      if(it!=null){
                                                          if(it){
                                                              println("窗外很安静,睡了个好觉")
                                                              true
                                                          }else{
                                                              println("楼下敲锣打鼓办起了丧事或是喜事,我只觉得他们吵闹")
                                                              false
                                                          }
                                                      }else{
                                                          println("还没睡呢")
                                                          false
                                                      }
                                              
                                                  }
                                                  onDay= {bug,eat,sleep->
                                                      println("事情的成功与否仿佛并不重要")
                                                      println("一天便如此过去,我开始怀疑自己的存在的意义")
                                                  }
                                                  onDay(bug(false),eat(true),sleep(null))
                                              }
                                              
                                              1
                                              2
                                              3
                                              4
                                              5
                                              6
                                              7
                                              8
                                              9
                                              10
                                              11
                                              12
                                              13
                                              14
                                              15
                                              16
                                              17
                                              18
                                              19
                                              20
                                              21
                                              22
                                              23
                                              24
                                              25
                                              26
                                              27
                                              28
                                              29
                                              30
                                              31
                                              32
                                              33
                                              34
                                              35
                                              36
                                              37
                                              38
                                              39
                                              40
                                              41
                                              42

                                              # 2. 高阶函数

                                              将函数作为参数或返回值的函数被称为高阶函数。

                                              # 2.1 将函数作为参数和返回值

                                              fun show(lambda:()->String,lambda1: () -> String) : (Int)->String {
                                                  println(lambda())
                                                  println(lambda1())
                                                  return {it->"$it"}
                                              }
                                              
                                              fun main() {
                                                  val a = {"赵思琪"}
                                                  val b = {"赵娓雪"}
                                                   println(show(a,b)(1))
                                              }
                                              
                                              1
                                              2
                                              3
                                              4
                                              5
                                              6
                                              7
                                              8
                                              9
                                              10
                                              11

                                              # 2.2 为已存在的类型取别名

                                              类型别名,可以为任意类型取一个别名, 只能是顶级的(Top-Level Only)

                                              不能存在于类,接口,函数等中。

                                                  typealias type = (Int) -> Int
                                                  typealias onTypeString=String
                                              
                                              1
                                              2
                                              edit icon编辑此页open in new window
                                              上次编辑于: 2022/5/17 23:57:35
                                              贡献者: zsqan
                                              上一页
                                              10. 泛型
                                              下一页
                                              12. 内置高阶函数
                                              默认页脚
                                              Copyright © 2022 Able