首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Kotin 极简教程》第8章 函数式编程(FP)(2)

Kotlin,支持函数作为一等公民。支持高阶函数、Lambda表达式等。我们不仅可以把函数当做普通变量一样传递、返回,还可以把分配给变量、放进数据结构或者进行一般性操作。...返回 Unit 函数 如果一个函数不返回任何有用值,返回类型是 Unit。Unit 是一种只有一个Unit 值类型。...>> sum(1)(1) 2 8.2.11 it:单个参数隐式名称 Kotlin一个有用约定是,如果函数字面值只有一个参数, 那么声明可以省略(连同 ->),其名称是 it。...} 我们使用 reified 修饰符来限定类型参数,现在可以在函数内部访问了, 几乎就像是一个普通类一样。由于函数是内联,不需要反射,正常操作符 !is 和 as 现在都能用了。...然后重点介绍了在Kotlin如何使用函数式风格编程,其中重点介绍了Kotlin函数相关知识,以及高阶函数、Lambda表达式、等核心语法,给出相应实例说明。

1.8K20

Kotlin安卓开发学习(1)

,与Java需要给变量明确定义变量类型不同,Kotlin只允许变量前声明两种关键字:val和var val: (value)用来声明一个不可变变量,这种变量在初始赋值之后就再也不能重新赋值,对应Java...if使用方法与Java几乎相同,但在一些地方进行了优化: Kotlinif语句相比于Java有一个额外功能,它是可以有返回值返回值就是if语句每一个条件中最后一行代码返回值。...由于checkNumber()函数接收一个Number类型参数,这是Kotlin内置一个抽象类,像Int、Long、Float、Double等与数字相关类都是子类,所以这里就可以使用类型匹配来判断传入参数到底属于什么类型...其中,..是创建两端区间关键字,在..两边指定区间左右端点就可以创建一个区间了。...Kotlin可以使用until关键字来创建一个右开区间,如下所示: val range = 0 until 10 上述代码表示创建一个0到10右开区间,数学表达方式是[0, 10)。

76230
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin Primer·第四章·Kotlin 类特性(下)

接受一个 String 类型参数返回一个 String 类型值。...首先声明了一个名为printMsg Lambda,接受一个 String 类型作为参数,然后在 main 函数调用它。如果还想省略,你还可以在调用时直接省略invoke,像函数一样使用。...Lambda 最后一条语句执行结果表示这个 Lambda 返回值。 需要注意是:是不能有变长参数 例如前面讲过变长参数函数,但是参数数量是必须固定。...fun printLog(vararg str: String) { } 5.3.2 高阶函数 Lambda 表达式最大特点是可以作为参数传递。当定义一个作为参数函数,称这个函数为高阶函数。...log 是一个接受一个 String 和一个以 String 为参数返回 Unit Lambda 表达式为参数 Lambda 表达式。

44920

函数声明与(Closure)

变量类型是某个声明类,函数类型就是规定了入参个数,类型返回值类型(不规定名字。函数名就和变量名一样,随便起)。...箭头右边表示返回值。 wiki 上定义是:引用了自由变量函数,这个被引用自由变量将和这个函数一同存在,即使已经离开了创造环境也不例外。从定义来说,对理解,是基于普通函数之上。...但和不一样是,匿名类无法修改捕获局部变量(final 不可修改)。 而匿名类能引用 final 局部变量,是因为在编译阶段,会把该局部变量作为匿名类构造参数传入。...总结 根据上面分析,我们可以了解到: 不是新东西,是把函数作为“一等公民”编程语言特性; 匿名类是 Java 世界里,但有局限性,即只能读 final 变量,不能写任何变量Kotlin...可以捕获上下文局部变量修改

1.1K20

Kotlin 轻量级Android开发

使用var声明可变参数,val声明不可变参数 var:var是一个可变变量,这是一个可以通过重新分配来更改为另一个变量。这种声明变量方式和Java声明变量方式一样。...val: val是一个只读变量,这种声明变量方式相当于javafinal变量一个val创建时候必须初始化,因为以后不能被改变。...} 这展示了Kotlin一个出色特性:智能类型转换。如果检查了变量类型,那就无需在检查作用域中对其进行类型转换。这样,我们现在就可以在if中将artist作为Artist类型变量了。...比如说,我们可以像下面这样定义一个变量: val listener: (View) -> Boolean 该变量可以声明一个函数,接收一个view返回这个函数。...this)         doTask(item) } ​ /** * 返回一个 lambda 表达式(), : 日志输出工具 logger */ fun getLogger(): (String

91010

Swift基础 嵌套

这些优化包括: 从上下文推断参数返回值类型 来自单表达式隐式回报 速记参数名称 尾随语法 嵌套表达式 Nested Functions引入嵌套函数是命名和定义自包含代码块作为更大函数一部分便捷手段...一对括号仍然包裹着方法整个参数。然而,这个论点现在是一个内联。 从上下文推断类型 因为排序作为参数传递给方法,所以Swift可以推断出其参数类型以及返回值类型。’...使用剩余运算符(number%10)计算number最后一个数字,使用此数字在digitNames字典查找适当字符串。可用于创建任何大于零整数字符串表示形式。...嵌套函数可以捕获其外部函数任何参数,也可以捕获外部函数定义任何常量和变量。 这里有一个名为makeIncrementer函数示例,包含一个名为incrementer嵌套函数。...当您声明一个作为参数之一函数时,您可以在参数类型之前编写@escaping,以指示允许转义。 可以转义一种方法是存储在函数之外定义变量

11400

Swift(Closures)

实际上任何情况下,通过内联表达式构造作为参数传递给函数时,都可以推断出参数返回值类型,这意味着您几乎不需要利用完整格式构造任何内联。...Swift String类型定义了关于大于号 (>) 字符串实现,其作为一个函数接受两个String类型参数返回Bool类型值。...举例来说,Swift Array类型一个map方法,其获取一个表达式作为其唯一参数。 数组一个元素调用一次该函数,返回该元素所映射值(也可以是不同类型值)。...表达式制定了返回类型为String,以表明存储映射值新数组类型为String。 表达式在每次被调用时候创建一个字符串返回。...这意味着其返回一个函数,而不是一个简单类型值。 该函数在每次调用时不接受参数只返回一个Int类型值。 关于函数返回其他函数内容,请查看函数类型作为返回类型

1.9K30

Scala专题系列(九) : Scala函数式编程

总而言之,一个函数在程序执行过程除了根据输入参数给出运算结果之外没有其他影响,就可以说是没有副作用....比如: def sum(x : Int,y : Int) : Int = { x + y } 上述例子,sum函数,接受两个Int类型参数,最后将两个参数值相加,那么sum函数就是一个纯函数...所以,编译器创建一个,用于包含(或“覆盖”)multiplier 与它引用外部变量上下文信息,从而也就绑定了外部变量本身。...m2 返回函数事实上是一个包含了对 factor 引用。 函数 一种具有名或匿名操作。其代码直到被调用时才执行。在函数定义,可能有也可 能没有引用外部未绑定变量。...在定义,可能有也可能没有引用外部未绑定变量一个函数,可能匿名或具有名称,在定义包含了自由变量,函数包含了环境信 息,以绑定其引用自由变量

37610

Gradle之Groovy

Groovy 基本语法 类型转换:当需要时,类型之间会自动发生类型转换: 字符串(String)、基本类型( int) 和类型包装类 ( Integer) 类说明:如果在一个 groovy 文件没有任何类定义... :Groovy 一个开放、匿名代码块,它可以接受参数、也可以有返回值可以引用其周围作用 域中声明变量。...参考 //体完成变量自增操作 { item++ } //使用 空参数列表 明确规定这是无参 { -> item++ } //中有一个默认参数[it],写不写无所谓 { println...it } { it -> println it } //如果不想使用默认参数it,那需要显示自定义参数名称 { name -> println name } //也可以接受多个参数...它可以像任何其他变量一样分配给一个变量或字段。 对象(参数) 对象.call(参数) def isOdd = { int i -> i%2 !

1.3K10

Gradle Kotlin DSL指南

获取对名为assemble现有(非类型化)任务引用配置—您只能使用此语法配置task上可用属性和方法 注册一个名为myTask2新非类型化任务配置——在这种情况下,您只能配置task上可用属性和方法...by extra Copy 在当前上下文中(在本例是项目)创建一个额外属性myNewProperty,并用“initial value”值初始化,这也决定了属性类型 创建一个额外属性...来自KotlinGroovy 有时候,您可能不得不从Kotlin代码调用接受Closure参数Groovy方法。例如,一些用Groovy编写第三方插件需要参数。...任何语言编写Gradle插件都应该使用Action类型来代替。GroovyKotlin lambda会自动映射到该类型参数。...调用另一个接受命名参数方法,映射到一个Groovy命名参数Map<String, ?

10K20

Kotlin】函数 ⑨ ( Kotlin 语言中概念 | Java 语言中函数作为参数替代方案 )

文章目录 一、概念 二、Java 函数作为参数替代方案 ( 匿名内部类 ) 一、概念 ---- 匿名函数 就是 Lambda 表达式 , 同时也是 , 三者是相同概念 ; 意义...在一个 脚本文件 , Kotlin 脚本 , 就需要 使用 函数 进行作用域区分 , 将一个作用域内相关代码 , 都写在一个函数 , 这样就可以将作用域分区分开 ; 匿名函数 作用域 :...参数返回值 函数 ; 使用 匿名函数 / Lambda 表达式 / 作为 参数 / 返回值 函数 是 高级函数 ; Kotlin 中经常使用 链式调用 , 就是 函数式编程 风格...; 二、Java 函数作为参数替代方案 ( 匿名内部类 ) ---- Kotlin 引入 函数类型 , 将 匿名函数 / Lambda 表达式 / 作为 函数参数返回值 , 可以写出...匿名内部类 作为函数参数 ; 代码示例 : Java 代码 , 接收 OnClickListener listener 类型接口类型参数 , 在实际使用时 , 可以传入一个匿名内部类作为参数 ,

1K10

kotlin基础--匿名函数、

上篇介绍了kotlin基本类型变量定义、函数定义等,接下来来学习如何使用匿名函数、lambda、,这将大大提高我们使用kotlin编写代码效率,相对于Java繁琐代码,你会爱上这种简洁 一....匿名函数 Java也有匿名函数,但是kotlin比Java简洁很多 1.函数变量 如果我们要在Java方法传入一个回调函数,需要定义一个接口,使用new关键字实例化匿名类实现该方法: public...)内表示入参参数类型 //->前代表入参,赋予了变量名 val funcp: (String) -> String = { name -> "我是一个函数类型变量...val a = 3 val b = 4 a + b } } 三.kotlin匿名函数可以修改和引用在自己作用域外变量,而Java要做到这一点,只能用final...关键字修饰一个引用型变量,匿名函数引用着定义自己函数变量kotlinlambda就是接受函数或返回函数函数叫作高级函数,它们广泛运用于函数式编程 fun main() {

65610

《Kotin 编程思想·实战》

返回值:Unit 扩展函数 直接定义在文件,而不需要依赖于任何函数 成员函数 写在class或object函数 5.3.3 级函数 5.3.4 Lambda表达式 // lambda写法1...例如: { x: Int, y: Int -> println("${x + y}") }(1, 3) 节制自由 使用写代码相当灵活自由,省略了很多临时变量参数声明。...首先声明了一个名为 printMsg Lambda,接受一个 String 类型作为参数,然后在 main 函数调用它。...log 是一个接受一个 String 和一个以 String 为参数返回 Unit Lambda 表达式为参数 Lambda 表达式。...8.2.6 内联函数(inline) 使用 高阶函数 在运行时会带来一些不利: 每个函数都是一个对象, 而且它还要捕获一个, 也就是, 在函 数体内部访问那些外层变量.

1.4K30

【Go 基础篇】Go语言函数详解:模块化编程与代码复用

一个函数值,引用了其函数体之外变量。在Go语言中,函数可以形成,使其可以访问其外部函数变量。...我们定义了一个返回函数 increment,可以访问外部函数 count 变量,实现了一个简单计数器。...我们定义了一个 operate 函数,接受两个整数和一个操作函数作为参数返回操作函数结果。...函数可以访问 makeCounter 变量 count,保持状态,每次调用会递增计数。 函数错误处理 在函数,可能会出现各种错误情况,文件不存在、网络连接问题等。...函数,接受两个浮点数作为参数,返回商和可能错误。

23920

swift (表达式、尾随、逃逸、自动)

是自含函数代码块,可以在代码中被传递和使用 和swift对比 Swift 与OC block 比较相似 Swift一个特殊函数,OCblock是一个匿名函数 和block...每一次迭代都用更简洁方式描述了相同功能 通过函数处理 sorted(by:) 方法接受一个,该函数需要传入与数组元素类型相同两个值,返回一个布尔值来进行排序 排序函数类型需为:(Int...4, 6, 7, 8, 9] 运算符方法 Swift Int类型定义了关于大于号(>)实现,其作为一个函数接受两个 Int 类型参数返回 Bool 类型值。...(result()) //30 同一个方法变量, 会被绑定到属于自己变量 //如果你创建了另一个result1,它会有属于自己引用,指向一个全新、独立value变量 let result1...//我是逃逸 逃逸是在函数执行之后再执行,于是这段代码最后输出“我是逃逸” 自动 自动:自动创建一个用来包裹一个表达式,这种接受任何参数,当包被调用时,返回包裹在表达式

53510

Kotlin入门教程,快使用Kotlin

KotlinChar类型不能作为数字使用,如果需要的话需要使用toInt方法转换。...,而次构造函数参数不能; 主构造函数可以直接申明初始化属性,而次构造函数不能直接申明属性; 如果申明了主构造函数,那么所有的次构造函数都必需直接或间接地委托给主构造函数; 非抽象类如果没有声明任何构造函数...,会生成一个不带参数主构造函数,而不会生成任何次构造函数。...let函数是有返回值返回值为函数块最后一行或指定return表达式。 使用场景:需要去明确一个变量所处特定作用域范围内可以使用。...,run函数只接收一个lambda函数为参数,以形式返回,返回值为最后一行值或者指定return表达式。

98110

KotlinKotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | | 内联函数 | 函数引用 )

概念 二十二、Java 函数作为参数替代方案 ( 匿名内部类 ) 一、函数头声明 ---- 函数头声明 格式如下 : 可见性修饰符 函数声明关键字 函数名 (函数参数) : 函数返回值类型 函数头示例...匿名函数 可以作为 函数参数 , 也可以作为 函数返回值 ; 匿名函数 可以 定制修改 已有的 函数 , : 标准库函数 ; Kotlin 对 CharSequence 类进行了扩展 , 定义了...: 在 匿名函数 / Lambda 表达式 / , 可以 引用 作用域 之外变量 , : 在 函数 A 定义了 匿名函数 B , 则 在 匿名函数 B , 可以引用 函数 A 变量...参数返回值 函数 ; 使用 匿名函数 / Lambda 表达式 / 作为 参数 / 返回值 函数 是 高级函数 ; Kotlin 中经常使用 链式调用 , 就是 函数式编程 风格...; 二十二、Java 函数作为参数替代方案 ( 匿名内部类 ) ---- Kotlin 引入 函数类型 , 将 匿名函数 / Lambda 表达式 / 作为 函数参数返回值 , 可以写出

1.7K20

Groovy -语法与参数学习-第一篇

相关知识为Groovy使用。Groovy一个开放、匿名代码块,它可以接受参数返回值被分配给变量可以引用在其周围作用域中声明变量。...2.1 作为对象使用 是groovy.lang.Closure类一个实例,使得它可以像任何其他变量一样被赋值给变量或字段,尽管它是一个代码块: //创建一个对象,赋值给了listener...作为匿名代码块,可以像调用任何其他方法一样调用。...如果想声明一个,它不接受参数,并且必须被限制为不带参数调用,那么你必须用一个显式参数列表来声明: //创建一个对象,不允许传参 def magicNumber = { -> 1024 }...如果最后一个形参是可变长度(或数组),就可以接受可变数量实参,就像下面的例子: //创建一个可变String 参数对象。并将该数组所有元素放入一个字符串中进行返回。

80320

Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )

内联扩展函数 apply ---- 1 . apply 函数原型 : 泛型 T 类型对象 , 调用 apply 方法 , 后面定义了一个代码块 ; 调用 apply 方法对象类型是泛型 , 说明任何对象都可以调用该方法...this 可以访问该对象 , 不是 it ; ③ 特点 : 在 apply 后内 , 可以调用该 T 对象所有成员方法 和 成员变量 ; ④ 返回值 : appay 方法返回泛型类型 T 对象本身...T 对象操作方法 , 等同于为泛型 T 对象定义了一个方法 特点 : 在 apply 后内 , 可以调用该 T 对象所有成员方法 和 成员变量...返回值 : appay 方法返回泛型类型 T 对象本身 , 即在内执行针对 T 对象内容是保存下来 调用 T 对象本身 : 使用 this 可以访问该对象 , 不是 it...apply 接收一个函数类型参数 block: T.() -> Unit 函数类型变量名 : block 是函数类型实例名称 T.(

2.6K20
领券