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

Kotlin函数

lamba两种方式,其他java可变参数一致。...这里等待后面具体来看什么时候非内联 在 Kotlin ,我们可以只使用一个正常、非限定 return 来退出一个命名或匿名函数。...这意味着 lambda 表达式 return 将从包含它函数返回,而匿名函数 return 将从匿名函数自身返回。...闭包 Lambda 表达式或者匿名函数(以及局部函数对象表达式) 可以访问其 闭包 ,即在外部作用域中声明变量。...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法属性。

2.3K40

Kotlin内联函数

Kotlin内联函数还是挺好玩 为什么需要内联函数? lambda 表达式会被正常地编译成匿名类。这表示每调用一次 lambda表达式,一个额外类就会被创建。...内联函数使用 inline 修饰符标记,内联函数在 被使用时候编译器并不会生成函数调用代码,而是使用函数实现真实代码替换每一次函数调用 内联函数如何运作?...当一个函数被声明为 inline 时,它函数体是内联一一换句话说,函数体会被直接替换到函数被调用地方,而不是被正常调用。...Int、Long、Double都继承自Number,但是,如果我们在调用上面的函数时,传入了Array,这样是会报错!!...因为 kotlin在调用函数时要求参数类名必须完全一致!! 对于上面的函数,如果我们想既可以接收 Array, 也可以接收Array, 那么就可以定义一个具体化类型参数内联函数.

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

浅谈Kotlin函数

本文简单谈下Kotlin函数,包括表达式函数体,命名参数,默认参数,顶层函数,扩展函数,局部函数,Lambda表达式,成员引用,with/apply函数等。...1.表达式函数体 通过下面这个简单例子看下函数声明相关概念,函数声明关键字是fun,嗯,比JSfunction还简单。 Kotlin参数类型是放在变量:后面,函数返回类型也是。...4.顶层函数 不同于Java函数只能定义在每个类里面,Kotlin采用了JavaScript 做法,可以在文件任意位置处定义函数,这种函数称为顶层函数。...,在Java可以抽取出独立函数,但这样有时候对整体结构并不太好,Kotlin提供了局部函数来解决这个问题。...Lambdathis引用指向是包围它类。 如果在Lambda要用到常规意义上this呢?这个就需要带接收者函数。看下比较常用两个函数withapply。

2.5K20

Kotlin内置函数用法区别总结

前言 在Kotlin源码标准库(Standard.kt)中提供了一些Kotlin扩展内置函数可以优化kotlin编码。Standard.kt是Kotlin一部分,它定义了一些基本函数。...本文主要记录kotlinlet、apply、run、also、with等函数用法区别,下面话不多说了,来一起看看详细介绍吧 0. let val a = "hello,kotlin".let{...= block(this) 解释:调用 “hello,kotlinlet函数,it在作用域中替代该对象(hello,kotlin),默认返回函数最后一行 1. apply val a = "hello...指定T作为闭包receiver,使用参数闭包返回结果。...以上,注意阅读Kotlin相关高阶函数源码时候,如果函数中最后一个参数为闭包,那么最后一个参可以不写在括号,而写在括号后面,如果只有一个参数,括号也可以去掉。

87320

Kotlin高阶函数常用高阶函数

10 ArrayList transform 函数,在 mapTo 方法,对集合进行迭代,然后将进行变换后数据添加到新集合,最后返回新集合。...map flatMap 主要区别就是在于传入函数返回值,一个是任意对象,一个是实现了 Iterable 接口对象 reduce 例子:打印集合元素之和 1fun main(args:...创建新集合 ArrayList ,将 ArrayList predicate 函数一并传递给 filterTo 函数。...疑惑点 函数定义 `T.() -> Unit` `() -> Unit` 区别 我们一般定义函数都会选择定义 1fun T.makeMoney2(block: () -> Unit)...里this代表是自身实例,而 ()->Unit 里,this代表是外部类实例 感谢 [Kotlin函数作为参数,T.()->Unit ()->Unit 区别][https://www.jianshu.com

1.7K10

Kotlin高阶函数深入讲解

前言 在Kotlin,高阶函数是指将一个函数作为另一个函数参数或者返回值。如果用f(x)、g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x))。...Kotlin为开发者提供了丰富高阶函数,比如Standard.ktlet、with、apply等,_Collectioins.ktforEach等。...Kotlin 使用类似 (Int) – String 一系列函数类型来处理函数声明,这些类型具有与函数签名相对应特殊表示法,即它们参数返回值: 所有函数类型都有一个圆括号括起来参数类型列表以及一个返回类型...常用高阶函数 Kotlin提供了很多高阶函数,这里根据这些高阶函数所在文件位置,分别进行介绍,先来看一下常用高阶函数,这些高阶函数在Standard.kt文件。...区别是T.run()是作为泛型T一个扩展函数,所以在传入lambda表达式可以使用this关键字来访问这个泛型T成员变量成员方法。

1.1K20

Kotlin函数作为参数,T.()->Unit ()->Unit 区别

在做kotlin开发,经常看到一些系统函数里,用函数作为参数,但是又和我们自己写不太一样 大概是这样子: public inline fun T.apply(block: T....我们这里来看一下文档是怎么说, ? 输入图片说明 我们这里看一下画原谅色线部分,原来这里作用就是可以this代表对象不同。...---- 我们首先定义两个函数: fun T.afterMersure(f: T.() -> Unit) { } fun T.afterMersure2...(f: () -> Unit) { } 这两个函数是用于,View测量完成之后回调。...,这两个函数唯一区别就是T.()-Unit与()->Unit区别,我们调用时,在代码块里面写this,时候,根据代码提示,我们可以看到,连个this代表含义不一样,T.()->Unit里this

2.1K30

kotlin Standard内联函数示例详解

let、with、run、apply、also、takeIf、takeUnless、repeat函数使用 kotlin Standard.kt文件,提供了一些内联函数,这些内联函数可以减少代码量,...观察函数定义可以发现,run函数为一个扩展函数,而其接受参数with函数第二个参数相同,run函数可以理解为let函数with函数结合体。...总结: 这里我们总结对比一下这五个函数,这五个函数特性非常简单,区别也无非是接受参数返回类型不同。...其中,对于with,run,apply接收者是this(可以省略),而letalso则使用it接受且不可s省略对于; 对于with,run,let返回值是返回值是函数里面最后一行,或者指定return...结语: Kotlin Standard.kt标准库函数已基本讲解完毕,其中涉及到了高阶函数lambda函数,相关知识可通过官方文档学习,同时建议读者将每个函数都实际敲一遍,并通过查看他们编译后

65810

Kotlinsam(函数式接口)详解

OnClickListener接口只有一个抽象方法,这种接口在kotlin中被当作函数式接口,或者SAM接口,SAM代表单抽象方法,类似的还有像RunnableCallable这样函数式接口....SAM构造方法:显式地把lambda转换成函数式接口. 在有的方法需要返回一个函数式接口,不能返回一个lambda, 可以用SAM构造方法把它包装起来....如下 fun createAllDoneRunable() : Runnable{ return Runnable{ println(“All done”) } } SAM函数名称底层函数式接口名称一样...SAM构造方法只接收一个参数-一个被用作函数式接口单抽象方法体lambda,并返回一个接口类实例....另外除了返回值通过lambda创建函数式接口外,也可以把lambda生成函数式接口放在一个变量,如下 val listener = OnClickListener{ view - val text

1.7K40

Kotlin内联函数作用是什么?

在以前,因为学过一段时间Kotlin(并没有实际开发中用过),很多东西都忘记了,但是kotlin代码看起来其实Java没什么区别,感觉都差不多。所以不要认为 Kotlin 很难学。...首先,什么是内联函数 inline? Kotlin内联函数属于Kotlin高级特性之一,使用起来也非常简单。...没加 inline 之前 加上 inline 之后 解释就不用多说了吧,kotlin 自动帮我们将方法在编译期就加在了相应调用处,免除了 java 入方法栈与退栈。...非局部返回标记 为了不让lamba表达式直接返回内联函数,所做标记 相关知识点:我们都知道,kotlin,如果一个函数,存在一个lambda表达式,在该lambda不支持直接通过return...reified java,不能直接使用泛型类型 kotlin可以直接使用泛型类型 inline fun startActivity() { startActivity(Intent(this

1.3K10

Kotlin扩展函数与属性示例详解

不管String类是用Java、Kotlin,或者像Groovy其他JVM语言编写,只要它会编译为Java类,就可以为这个类添加自己扩展。 在这个扩展函数,可以像其他成员函数一样用this。...Kotlin允许用导入类一样语法来导入单个函数: import strings.lastChar //星号导入 import strings.* 3.3.2在Java调用扩展函数 其实,扩展函数是静态函数...调用扩展函数,不会创建适配对象或者任何运行时额外消耗。 这使得从Java调用Kotlin扩展函数变得非常简单:调用这个静态函数,然后把接收对象作为第一个参数传进去即可。...假设它声明在一个叫做StringUtil.kt文件: char c = StringUtil.lastChar("Java"); Kotlin版本比较起来,可读性略差。...3.3.4不可重写扩展函数 扩展函数并不是类一部分,它是声明在类之外。扩展函数并不存在重写,因为Kotlin会把它们当做静态函数对待。

1.3K20

Kotlin高阶函数(一等公民)

下面我们来说说 Kotlin高阶函数 Kotlin 不是纯粹面向对象语言, Kotlin 函数也是一等公民,因此函数本身也具有自己 类型 。...函数类型就像前面介绍数据类型一样,既可用于定义变量,也可用作函数形参类 型,还可作为函数返回值类型 使用函数类型 Kotlin 每个函数都有特定类型,函数类型由函数形参列表、 ·>返回值类型组成...fun test() { .... } 该函数形参列表、 ·>返回值类型为() ->Unit 或(),这就是该函数类型 。...使用函数类型作为形参类型 Kotiin 支持像使用其他类型一样使用函数类型,因此完全可以在函数定义函数类型形 参 例子 //定义函数类型形参,其中 fn 是( Int )→ Int 类型形参 fun...着每次调用函数时都可动态传入一个函数,随着实际传入函数改变,就可以动态改变 map() 函数部分计算代码 。

66110

Android开发Kotlin扩展函数技巧!

Kotlin,扩展函数是一种非常有用功能,可以让我们向现有的类添加新功能,而无需修改类源代码。在本文中,我们将探讨Kotlin扩展函数原理运用,以及如何在Android开发中使用它们。...什么是扩展函数? 扩展函数Kotlin一种特殊函数,它允许我们向一个类添加新函数,而无需继承或修改这个类源代码。扩展函数语法非常简单,只需要在函数名前面加上类名,并用点号隔开即可。...例如,我们可以向KotlinString类添加一个新函数,用于反转字符串: fun String.reverse(): String { return this.reversed() }...在函数,我们调用了SharedPreferenceseditgetBoolean方法。...Kotlin一种非常有用功能,可以让我们向现有的类添加新功能,而无需修改类源代码。

28420

Kotlin 扩展函数扩展属性使用方法

Kotlin 能够扩展一个类新功能而无需继承该类或者使用像装饰者这样设计模式。 这通过叫做 扩展 特殊声明完成。 例如,你可以为一个你不能修改、来自第三方库类编写一个新函数。...在 Android Studio ,我们可以查看 kotlin 文件字节码,然后再 Decompile 为 Java 代码。上面我们为 Person 扩展函数转为Java代码后如下。...由此可见,所谓扩展函数并不是真正在类增加了一个方法,而是通过外部文件静态方法来实现,其实就是Utils类一个道理。...扩展函数一样,在其他文件声明如下。...总结 在 Java ,我们要扩展一个类时,常常是继承该类或者用装饰者模式类似的设计模式来实现,Kotlin 扩展函数扩展属性为这种需求提供了一种新思路,并且也可以作为 Utils 类另外一种选择

2.5K40

Kotlin关于内联函数一些理解分享

前言 看了很多博客,才明白了内联含义,其实最根本就是将写在别处代码拷贝到你现在执行方法,相当于在一个方法执行,java方法执行是需要压栈出栈对吧,如果是两三个方法那就是两三次压栈出栈,...为了节省这个操作,提高一定效率,kotlin就出了这么个函数。...lambda在函数调用点是不可,只有等到doSomething被内联后,该lambda才可以正常使用。...通过上面的例子,我们对lambda表达式何时被内联做一下简单总结: 当lambda表达式以参数形式直接传递给内联函数,那么lambda表达式代码会被直接替换到最终生成代码。...是的,编译器会抛出“Illegal usage of inline-parameter”错误,这是因为Kotlin规定内联函数lambda参数只能被直接调用或者传递给另外一个内联函数,除此之外不能作为他用

49810
领券