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

Kotlin函数

这里等待后面具体来看什么时候非内联 在 Kotlin 中,我们可以只使用一个正常、非限定 return 来退出一个命名或匿名函数。...如果一个函数只有一个表达式,则可以直接写"=" fun double(x:Int):Int=x*2 局部函数 Kotlin 支持局部函数,即一个函数在另一个函数内部。...在 Kotlin 中有一个约定,如果函数最后一个参数是一个函数,并且你传递一个 lambda 表达式作为相应参数,你可以在圆括号之外指定它: lock (lock) { sharedResource.operation...如果 Kotlin 可以自己计算出签名,它允许我们不声明唯一参数,并且将隐含地为我们声明其名称为 it: ints.filter { it > 0 } // 这个字面值是“(it: Int) ->...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法和属性。

2.3K40

Kotlin拓展函数真身

kotlin也写了很长一段时间了,香是真的很香这个东西。但是很多东西也是不求甚解,都是直接开始用,但是为什么我也不关心。举个栗子,就拿拓展函数来说。...返本归元 先介绍个工具,Android Studio工具栏有个tools/Kotlin/Show Kotlin ByteCode。...然后在你kotlin类上就可以直接看到kotlin类生成字节码。 先抛问题在来分析。 java能不能调用到kotlin到拓展函数? 当然可以了。下面的代码块内就是18F.dp()java写法。...也就是说我们写拓展函数其实也就是个静态方法,只是把我们拓展类当作一个静态参数传递给了静态方法内。 深入探索 上面介绍工具还是要用下,看看到底字节码上拓展函数是怎么样。...IRETURN 返回上面栈操作结果。 简单分析完字节码操作之后,得出来结论基本就是生成了一个dp静态函数,以当前拓展类作为第一个入参。

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

浅谈Kotlin函数

本文简单谈下Kotlin函数,包括表达式函数体,命名参数,默认参数,顶层函数,扩展函数,局部函数,Lambda表达式,成员引用,with/apply函数等。...从例子入手,从一般写法到使用特性进行简化,再到原理解析。 1.表达式函数体 通过下面这个简单例子看下函数声明相关概念,函数声明关键字是fun,嗯,比JSfunction还简单。...4.顶层函数 不同于Java中函数只能定义在每个类里面,Kotlin采用了JavaScript 中做法,可以在文件任意位置处定义函数,这种函数称为顶层函数。...5.扩展函数 扩展函数是类一个成员函数,不过定义在类外面 扩展函数不能访问私有的或者受保护成员 扩展函数也是编译成静态函数 所以可以在Java库基础上通过扩展函数进行封装,假装好像都是在调用Kotlin...,在Java中可以抽取出独立函数,但这样有时候对整体结构并不太好,Kotlin提供了局部函数来解决这个问题。

2.5K20

Kotlin内联函数

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

1.5K20

Kotlin 简单优雅高阶函数Kotlin 简单优雅高阶函数Kotlin极简教程》正式上架:1 . Kotlin 函数式编程: 函数组合。一切皆是函数。2. 简单好用 Kotlin 类型别名

Kotlin 简单优雅高阶函数 非常感谢您亲爱读者,大家请多支持!!!有任何问题,欢迎随时与我交流~ ---- 函数代表一种关系 f 蕴涵逻辑流。...整个图G就是一幅美妙抽象逻辑之塔 映射图 。 ? image.png 1 . Kotlin 函数式编程: 函数组合。一切皆是函数。...// 简单直接函数定义 fun f(x: Int) = x % 2 !...简单优雅高阶函数定义(复合函数): compose(f, g) = f(g(*)) 组合函数返回传递给它两个函数组合: (f、g) = f (g (*))。...API filter,flat,map 等等 val mstrList = strList.filter(h) 同样逻辑,我们在 Java 8中实现代码是: package com.easy.kotlin

94730

说说kotlin内联函数-inline

内联函数 定义:用关键字inline修饰函数,叫做内联函数 作用:它们函数体在编译器被嵌入每一个被调用地方,减少额外生成匿名类和执行函数开销 举个具体例子:比如下面这个kotlin代码 fun...,通过inline,消除了匿名类开销 另外,可以看kotlin官方api源码,很多都是定义成了inline函数 public inline fun Iterable.map(transform...1、普通函数,不需要使用inline,jvm会自动判断是否做内联优化,inline都是针对高阶函数 2、大量函数行数,应该避免,这样会产生过多字节码数量(每次调用地方,都会重复生产该函数字节码...Kotlin在引入inline同时,也新增了noinline关键字,我们可以把它加在不想要内联参数开头,该参数便不会具有内联效果。...总结 内联函数是一种更高效写法,很多kotlin官方方法也都采用 内联应该尽量用在轻量方法中,避免生成过多字节码 行数:206 字数:1151 主题:默认主题

91220

构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数原因 ?

浏览量 3 1、构造函数不能声明为虚函数 1)因为创建一个对象时需要确定对象类型,而虚函数是在运行时确定其类型。...而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象实际类型,是类本身还是类派生类等等 2)虚函数调用需要虚函数表指针,而该指针存放在对象内存空间中;若构造函数声明为虚函数,那么由于对象还未创建...,还没有内存空间,更没有虚函数表地址用来调用虚函数即构造函数了 2、析构函数最好声明为虚函数,首先析构函数可以为虚函数,当析构一个指向派生类基类指针时,最好将基类析构函数声明为虚函数,否则可以存在内存泄露问题...如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生类基类指针时,只会调用基类析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。子类析构时,要调用父类析构函数吗?...析构函数调用次序时先派生类后基类。和构造函数执行顺序相反。并且析构函数要是virtual,否则如果用父类指针指向子类对象时候,析构函数静态绑定,不会调用子类析构。

59610

Kotlin函数 ③ ( 匿名函数 | 匿名函数函数类型 | 匿名函数隐式返回 )

文章目录 一、匿名函数 二、匿名函数函数类型 三、匿名函数隐式返回 一、匿名函数 ---- 声明函数时 , 没有 函数函数 是 匿名函数 ; 匿名函数 可以作为 函数参数 , 也可以作为 函数返回值...; 匿名函数 可以 定制修改 已有的 函数 , 如 : 标准库中函数 ; Kotlin 中对 CharSequence 类进行了扩展 , 定义了 count(predicate: (Char) ->...Boolean) 扩展函数 , 接收一个 (Char) -> Boolean 类型函数 , 用于 返回匹配给定 匿名函数 字符数 ; /** * 返回匹配给定[谓词 predicate 匿名函数...---- 匿名函数 可以作为 变量 赋值给 函数类型变量 , 可以作为 函数参数 传递给函数 , 因此 , 匿名函数 与 变量 一样 , 也存在 对应 函数类型 ; 函数类型 由 参数 和 返回值...决定 ; 有 相同 参数顺序 , 参数个数 和 返回值类型 函数 , 其 函数类型相同 ; 如上个章节 , 扩展函数 CharSequence.count 接收匿名函数参数 predicate ,

3K20

Kotlin扩展函数知识点

Kotlin扩展函数很显然能够优雅解决这种问题。...通俗来说扩展函数体里面的this就是receivers类型 扩展函数怎么用 根据上面定义扩展函数栗子,来看下这个扩展函数用法: val list = mutableListOf(1,3,5)...静态扩展函数 首先来回顾下普通静态函数/变量如何定义,在Kotlin中使用伴生对象类将函数/变量定义在其中,那么该函数/变量就是静态函数/变量了。...这样似乎看起来没有什么问题,但是当我们需要扩展三方类静态函数时,如果其没有用Kotlin伴生对象指定静态方法/变量,那么该方案将无法使用,只能用实例去调用。...答案是:之前类中定义方法、 因此:成员方法优先级高于扩展函数 this指向 当我们在类中使用扩展函数时,在扩展函数体内想要获取当前类this,而不是默认扩展函数receivers类型时候

28930

Kotlin入门(9)函数基本用法

上一篇文章介绍了Kotlin新增空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数基本用法。...那么Kotlin函数使用跟Java相比,有哪些区别呢?...; 2、Java使用“public”表示该函数是公共方法,而Kotlin默认函数就是公开,所以省略了关键字“public”; 3、Java使用“void”表示该函数没有返回参数,而Kotlin不存在关键字...现在有了定义好函数,若要在Kotlin代码中调用它们,那可一点都没变化,原来在Java中怎么调用,在Kotlin中一样采取“函数名称(参数列表)”形式进行调用。...对于习惯了Java开发者而言,Kotlin这种写法着实别扭,为了方便记忆,我们姑且把函数当作一种特殊变量,定义函数跟定义变量是同一种写法。

47920

Kotlin学习之路(4)函数运用

函数基本用法】 Kotlin声明方式 先跟Java声明方式对比一下,从onCreate方法入手看看他们不同 //Java 声明方式 @Override protected void...通过两者对比,咱们可以发现 ① Java使用@Override表示该函数重载父类方法,而Kotlin使用小写override 在同一行表达重载操作 ② Java 使用 protected /...public 表示该函数为公共方法,而Kotlin默认就表示函数是公开,所以省略了关键字 ③ Java使用 void表示该函数没有返回值,而Kotlin中没有关键字void ,若没有返回值不用特别声明...以可变字符串为例 Java写法“String…args”,而Kotlin写法“vararg args:Sting?”,函数内部解析时候,Kotlin会把可变参数当成一个数组。...【几种特殊函数】 泛型函数 按照之前例子,函数输入参数类型必须定义函数时候需要指定 例如:var int_array:Array = arrayOf(1,2,3) 定义泛型函数时候

72510

Kotlin高阶函数深入讲解

前言 在Kotlin中,高阶函数是指将一个函数作为另一个函数参数或者返回值。如果用f(x)、g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x))。...Kotlin为开发者提供了丰富高阶函数,比如Standard.kt中let、with、apply等,_Collectioins.kt中forEach等。...Kotlin 使用类似 (Int) – String 一系列函数类型来处理函数声明,这些类型具有与函数签名相对应特殊表示法,即它们参数和返回值: 所有函数类型都有一个圆括号括起来参数类型列表以及一个返回类型...常用高阶函数 Kotlin提供了很多高阶函数,这里根据这些高阶函数所在文件位置,分别进行介绍,先来看一下常用高阶函数,这些高阶函数在Standard.kt文件中。...2.run 先给出run函数源码: /** * Calls the specified function [block] and returns its result. */ @kotlin.internal.InlineOnly

1.1K20

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

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

97610

Auto.js中一般全局函数

常用全局函数 1. 暂停运行n毫秒时间; sleep(n) n为毫秒数,1秒等于1000毫秒。 2. ...获取最近一次监测到正在运行应用包名,一般可以认为就是当前正在运行应用包名; currentPackage() 2....获取最近一次监测到正在运行Activity名称,一般可以认为就是当前正在运行Activity名称;  currentActivity() 3. 等待包名和Activity出现 1. ...判断该函数运行脚本设备系统版本号,如果没有达到要求则抛出异常; requiresApi(api) 表示此脚本需要Android API版本达到指定版本才能运行。...判断该函数运行脚本Auto.js版本号,如果没有达到要求则抛出异常; requiresAutojsVersion(version) 表示此脚本需要Auto.js版本达到指定版本才能运行。

2.3K30

利用 kotlin 方式自定义回调事件(kotlin函数参数)

利用 kotlin 函数作为参数(强烈推荐) 来看一下系统点击事件在 kotlin 中是什么样: ? 是不是简直简洁到不像话?...再看看你自己定义点击事件回调,感觉跟还在用 java 开发一样… 下面就来看个新写法: 创建一个函数对象,在需要回调地方调起这个函数: ? 用法: ? 是不是比用对象表达式看起来还要简洁?...2018.12.12 更新: 上边截图里 kotlin 点击事件回调,还有更简洁定义方法: ? 之前写法是声明不可为 null 函数变量,然后判断是否初始化再去 invoke 函数。...现在声明可为 null 函数变量,在 invoke 函数时候用 ?. 表示函数变量可空,如果没有给这个点击事件函数赋值的话,这行代码也不会引起 crash。现在连判断条件都不需要了,更精简了。...这里再说点个人经验,如果你回调方法不止一个的话,推荐还是声明 interface 来做,这样的话都在一个 interface 里边好管理一些 以上这篇利用 kotlin 方式自定义回调事件(kotlin

1.8K21
领券