首页
学习
活动
专区
圈层
工具
发布

Kotlin中的函数

这里等待后面具体来看什么时候非内联 在 Kotlin 中,我们可以只使用一个正常的、非限定的 return 来退出一个命名或匿名函数。...表达式中,但退出包含它的函数)称为非局部返回。...如果一个函数只有一个表达式,则可以直接写"=" fun double(x:Int):Int=x*2 局部函数 Kotlin 支持局部函数,即一个函数在另一个函数内部。...这意味着 lambda 表达式中的 return 将从包含它的函数返回,而匿名函数中的 return 将从匿名函数自身返回。...可以实现dsl风格的代码全靠它 Kotlin 提供了使用指定的 接收者对象 调用函数字面值的功能。 可以调用该接收者对象上的方法而无需任何额外的限定符,可以任意调用接受者的方法和属性。

3.1K40

浅谈Kotlin中的函数

本文简单谈下Kotlin中的函数,包括表达式函数体,命名参数,默认参数,顶层函数,扩展函数,局部函数,Lambda表达式,成员引用,with/apply函数等。...1.表达式函数体 通过下面这个简单的例子看下函数声明相关的概念,函数声明的关键字是fun,嗯,比JS的function还简单。 Kotlin中参数类型是放在变量:后面,函数返回类型也是。...,相比Java, Kotlin中可以类似于JavaScript中带命名参数进行调用,而且可以不用按函数声明中的顺序进行调用,可以打乱顺序,比如下面: joinToString(separator = "...4.顶层函数 不同于Java中函数只能定义在每个类里面,Kotlin采用了JavaScript 中的做法,可以在文件任意位置处定义函数,这种函数称为顶层函数。...,在Java中可以抽取出独立的函数,但这样有时候对整体结构并不太好,Kotlin提供了局部函数来解决这个问题。

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

    Kotlin中的内联函数

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

    2.1K20

    Kotlin中尾递归函数

    Kotlin尾递归函数理解 kotlin中,如果某个函数的末尾又调用了函数自身,这种就称为尾递归函数。 尾递归函数需要在 fun 前面添加 tailrec。...尾递归函数会使用循环的方式替代递归,从而避免栈溢出。 尾递归不能在异常处理的try、 catch 、 finally 块中使用 。...findFixPoint(x: Double = 1.0): Double = if (x == Math.cos(x)) x else findFixPoint(Math.cos(x)) 再例如: 计算阶乘的函数...//定义计算阶乘的函数 fun fact (n : Int) : Int{ if (n == 1) { return l } else { return n * fact(n - 1) } } 上面函数将调用自身作为其执行体的最后一行代码...此时,上面函数可改为如下形式 //使用尾递归函数的语法 tailrec fun factRec(n: Int, total : Int= 1): Int = if (n == 1) total else

    1.2K10

    Kotlin实战【五】Kotlin中的异常

    一、kotlin如何抛异常 Kotlin中的异常处理与Java或者其他语言中的处理方式相似。一个函数可以以正常方式结束,或者当错误发生的时候抛出异常。...Kotlin中的异常处理语句的基本形式和Java是相似的: java中: if(0 <= percentage <= 100){ throw new IllegalArgumentException...( "A percentage value must be between 0 and 100: $percentage") ; } kotlin中:(和java的区别,不必使用new来创建实例) if...在java中,这种异常必须显示的处理,必须声明你的函数可能抛出的所有受检异常。 如果调用另一个函数,需要处理这个函数的受检异常,或者声明你的函数可能抛出的这些异常。...四、总结 1、kotlin中的异常处理和java处理相似,除了Kotlin不要求你声明函数可以抛出的异常。 2、如果一个try代码块执行一切正常,代码块中最后一个表达式就是结果。

    2.6K40

    kotlin函数汇总

    这篇主要讲讲kotlin里面的各种函数 简化函数 所谓的简化函数是假如执行代码提就只是一行代码或者是单行表达式,一行就可以搞得的,就可以进行简化 fun myMethod()= print("jack...Kotlin 允许在文件内直接定义函数,这个方法可以被称为顶层函数。...b.contains(a) Kotlin中的 && 、 || 、 ?: 、 === 、 !...== 是不能被重载的 内联函数 inline 用inline 修饰的方法,当又地方调用它时,把这个函数方法体中的所以代码移动到调用的地方,而不是通过方法间压栈进栈的方式,可以提高代码效率,当时也会照常编译的时候代码臃肿...{ func1() //编译器报错 } } 小结: kotlin只允许内联函数的函数参数内部有return,普通函数的函数参数内部不能有return crossinline让编译器帮我们检查函数参数内部是不是带有

    53250

    【Kotlin】Kotlin 与 Java 互操作 ③ ( Kotlin 中处理 Java 异常 | Java 中处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )

    Java 中处理 Kotlin 异常 1、Kotlin 方法中抛出异常处理 2、Java 中调用 Kotlin 异常方法 3、使用 @Throws 注解注明异常 三、Kotlin 与 Java 之间的函数类型互操作...1、Java 调用 Kotlin 中的 匿名函数解决方案 2、Kotlin 中 匿名函数代码示例 3、Java 中 调用 Kotlin 匿名函数代码示例 一、Kotlin 中处理 Java 异常 -...Kotlin 异常 ---- 1、Kotlin 方法中抛出异常处理 在 Kotlin 的 函数 中 , 抛出异常 ; 如果 在 Kotlin 中 调用 抛出异常 的 Kotlin 函数 , 直接使用...与 Java 之间的函数类型互操作 ---- 1、Java 调用 Kotlin 中的 匿名函数解决方案 Kotlin 中 普通函数 , 函数类型变量 , 匿名函数 都可以互相调用 , 这是 Kotlin...匿名函数代码示例 在 Java 中 , 从 获取的是 kotlin.jvm.functions.Function1 类型的变量 , 调用其 invoke 函数 , 即可 执行该 Kotlin 的函数类型变量对应的函数

    1.5K10

    About Kotlin-Kotlin中的类1About Kotlin(1)

    About Kotlin(1) 因为是从Java的角度来学习Kotlin,在Java中,类作为第一等公民。故学习Kotlin,也先从其的类开始。...Kotlin中的类 普通的类 class Kotlin中没有添加修饰符直接以class开头的都是final类。final类的意义在于JVM可能存在的优化(常量和方法内联)和防止继承的滥用。...构建这样的对象需要写很多代码。 对应的Open类 对应上面的类,kotlin中的open类就是能够被继承的了。必须在类声明的时候使用open关键字。...在Kotlin中,override不是可选的注解而是强制关键字。所以由此引发的bug就不会再有了,编译器会提前警告你。Kotlin把这些事清楚的展现出来。...//在Kotlin中,可以使用data关键字 data class User(val name:String,val age:Int) 自动生成的函数 编译器会自动的从主构造函数中根据所有声明的属性提取以下函数

    1.7K30

    【Kotlin】Kotlin 与 Java 互操作 ① ( 变量可空性 | Kotlin 类型映射 | Kotlin 访问私有属性 | Java 调用 Kotlin 函数 )

    和 @Nullable 注解 二、Kotlin 的 Java 类型映射 三、Kotlin 访问 Java 私有属性 四、Java 调用 Kotlin 函数 1、函数调用 2、分析 Kotlin 代码生成的字节码数据...函数调用 Java 函数 在 Kotlin 中 调用上述类中的两个函数 , 是不会报错的 ; 但是 , 如果调用 空值 的 成员 , 则直接报 空指针异常 ; 代码示例 : fun main() {...的 Java 类型映射 ---- 在 Kotlin 代码运行时 , 所有的 数据类型都会映射为 Java 类型 ; 代码示例 : 在代码中 , 定义了 Kotlin 中的 Int 类型变量 , 在运行时...函数 ---- 1、函数调用 在 Java 中调用 Kotlin 脚本中的函数 , 可以直接使用 " Kotlin 文件名 + Kt # 函数名 " 进行调用 , 定义在 Kotlin 文件中的函数相当于...静态函数 , 然后通过静态形式调用 ; 在 Hello.kt 中定义如下函数 : 该函数相当于定义在 HelloKt 类 中的 sayHello 静态函数 ; fun sayHello() {

    2K20

    Kotlin拓展函数的真身

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

    55241

    Kotlin课堂,高阶函数

    将函数类型定义在StringBuilder中的好处为当我们代用buil函数时传入的Lambda表达式将会自动拥有StringBuilder的上下文,同时这也是apply函数的实现方式。...为了解决这个问题,Kotlin提供了内联函数,他可以将Lambda表达式带来的运行时开销完全消除 内联函数用法 只需要在定义高阶函数时加上inline关键字的声明即可: inline fun num1AndNum2...: Kotlin编译器会将内联函数中的代码在编译时候自动替换到调用它的地方,这样就不存在运行时开销了。...,但是我们是在匿名类中调用的函数类型参数,此时是不可能进行外层调用函数进行返回的,最多只能对匿名类中的函数调用进行返回。...也就是说,如果我们在高阶函数中创建了另外的Lambda或者匿名类的实现,并且在这些实现中调用了函数类型参数,此时在将高阶函数声明成内联函数就会报错。

    51810

    【Kotlin】Kotlin 高阶函数 ( 高阶函数当做参数 | 高阶函数定义 | 高阶函数调用 )

    Kotlin 高阶函数概念 ---- Kotlin 高阶函数 : Kotlin 的高阶函数 , 就是方法的参数 或 返回值 是函数类型的 函数 ; 如 : List 集合的 forEach( ) 循环..., 该方法就是接收一个高阶函数类型变量作为参数 , 有点类似于 C/C++ 中的 函数指针 ( 指向函数的指针 ) ; II ....函数变量需求 : 在上面的 forEach ( ) 函数中 , 需要传入一个 (String) -> Unit 函数类型的变量 , 该函数类型的函数 参数是 String 类型 , 返回值是 Unit..., 该函数的类型是指定的 , 是 (T) -> Unit 类型 执行时 , 将集合中的元素传入 (T) -> Unit 类型函数作为参数 , 执行 (T) -> Unit 类型函数内容...函数参数 : 其函数类型的参数是 String 字符串类型 函数返回值 : 其函数类型的返回值类型是 Unit 类型 , 这是空返回值 相当于 Java 中的 void

    1.2K10

    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

    1.1K30

    Kotlin函数式编程

    Lambda语法 在Kotlin中,Lambda表达式语法格式如下 // 1.无参数 val 函数名 = { 函数体 } // 2.有参数 val 函数名: (参数1类型, 参数2类型, ...) -...} // 3.匿名函数 val 函数名 = fun(参数1: 类型1, 参数2: 类型2, ...): 返回值类型 { 函数体 } 注:Lambda的函数体是可以多行的,返回的是函数体最后一行的返回值...这是因为Kotlin是表达式语法,而不同于Java的声明式语法,Java的表达式是没有返回值的,在Kotlin中任何一句表达式都有返回值。...接着直接将Lambda定义在函数调用的参数列表中 fun main() { val res = calc(5, 3, {a: Int, b: Int -> a + b}) println...中调用高阶函数时,如果最后一个参数为Lambda表达式时,可以将函数调用的括号前移 val res = calc(5, 3, {a: Int, b: Int -> a + b}) // 等价于 val

    43220

    Kotlin中的扩展

    Kotlin 中的 扩展 到底是什么?...简单使用: 扩展函数 //要扩展哪个类中的方法,被扩展的类名就是哪个 fun 被扩展的类名.扩展函数名(..参数..){ 函数体 } 例如: 在Array中扩展一个元素交换的方法 fun ArrayKotlin 的扩展是一个很独特的功能, Java 本身并不支持扩展, Kotlin 为了让扩展能在JVM平台上运行,必须做一些独特的处理 Kotiin 支持扩展方法和扩展属性 扩展的实现机制 Java...但现在 Kotlin 的扩展却好像可以动态地为一个类增加新的方法,而且不需要重新修改该 类的源代码,那 Kotlin 扩展的实际情况是怎样的呢?难道 Kotlin 可以突破 NM 的限制?...Kotiin 扩展的本质就是定义了 一个函数,当程序用对象调用扩展方法时, Kotlin 在编 译时会执行静态解析一一就是根据调用对象、方法名找到扩展函数,转换为函数调用 扩展的作用主要有两个方面

    1.8K30
    领券