美文网首页
kotlin中定义方法

kotlin中定义方法

作者: mihope | 来源:发表于2019-01-04 23:15 被阅读5次

Kotlin 方法

扩展方法

fun StringBuilder.addLine(value: CharSequence?): StringBuilder = append(value).append(System.lineSeparator())
fun StringBuilder.addLine(value: CharSequence?): StringBuilder {
    return this.append(value).append(System.lineSeparator())
}

方法内扩展有效

fun stringFunction() {
    fun String.someOtherFunction() {
        println(this + " world")
    }
    "hello".someOtherFunction()
}

Lamda方法

var myMethod1: () -> Unit = {
    println("hello kotlin")
}

var myMethod2 = {
    println("hello kotlin")
}
var myMethod3 = fun(x: Int): Int {
    return x * x
}
var myMethod4: (arg: String) -> String = { arg ->
    //to do handle
    "hello $arg"
}
fun main(args: Array<String>) {
    myMethod1()
    myMethod2()
    println(myMethod4("world"))
    
    listOf(1, 2, 4).map { it ->
        mutiNum(it)
    }
    listOf(1, 2, 4).map(mutiNum)
}

最后一个表达式就是 lambda 的结果

val total = { x: Int, y: Int ->
        println("start count")
        x + y
}
println(total(1, 4))

方法作为参数

var doubleUp1 = { va: Int ->
    println("do a thing")
    va * 2
}

fun doubleUp2(va: Int): Int {
    println("do a thing")
    return va * 2
}

fun applyAndPrint(values: Array<Int>, modifier: (value: Int) -> Int) {
    for (i in values)
        println(modifier(i))
}

fun main(args: Array<String>) {
    applyAndPrint(arrayOf(1, 2, 3), doubleUp1)
    //如果方法的最后一个参数是lamda表达式,则可以这样调用
    applyAndPrint(arrayOf(1, 2, 3)) {
        doubleUp2(it)
    }
}
public inline fun measureTimeMillis(block: () -> Unit): Long {
    val start = System.currentTimeMillis()
    block()
    return System.currentTimeMillis() - start
}

高阶函数

fun <T> T.takeIf(predicate: (T) -> Boolean): T? {
    return if (predicate(this)) this else null
}

inline fun <T> T.apply(block: T.() -> Unit): T {
    block()
    return this
}
class Builder(val multiplier: Int) {

    fun invokeStuff(action: Builder.() -> Unit) {
        this.action()
    }

    fun multiply(value: Int): Int {
        return value * multiplier
    }

    infix fun Int.doStuff(value: Int): Int {
        return value * multiplier
    }

}

fun main(args: Array<String>) {
    val builder = Builder(10)
    builder.invokeStuff {
        val result1 = multiply(1)
        println(result1)
//        val result2 = 1.doStuff(50)
        //中缀调用
        val result2 = 1 doStuff 50
        println(result2)
    }
}

定义中缀调用的方法只有一个参数,需要使用 infix 修饰符来标记

higher-order-functions

looking-at-kotlin---fun-with-functions

相关文章

  • Kotlin学习之定义函数

    Kotlin学习之定义函数 @(Kotlin学习) 一、定义函数 Kotlin中的函数比Java中的方法更灵活,用...

  • kotlin 之 类、对象和接口

    定义类继承结构 Kotlin中的接口 Kotlin的接口与Java 8 中的相似:它们可以包含抽象方法(方法=函数...

  • kotlin中定义方法

    Kotlin 方法 扩展方法 方法内扩展有效 Lamda方法 最后一个表达式就是 lambda 的结果 方法作为参...

  • Kotlin开发入门

    Kotlin基本语法 在Kotlin 中,定义变量时有如下几个方面与 Java 不同 演示: 方法声明 Kotli...

  • Kotlin-面向对象-基础

    方法 Kotlin 中方法和函数其实是统一的,但是我们这么理解区别:函数:直接定义在文件中的 fun。方法:定义在...

  • kotlin语言学习06 ——kotlin类与对象

    本节主要介绍kotlin类与对象的定义。 1、kotlin中类的定义 在kotlin中类的定义默认为,public...

  • 重拾Kotlin(7)-接口

    一、接口 1.1、抽象方法与默认方法 Kotlin 中的接口与 Java 8 中的类似,可以包含抽象方法的定义以及...

  • Kotlin基础之定义类及构造方法

    Kotlin中定义类的关键字依然是class 如果类中还需要方法或者属性的话,就需要加上大括弧了 Kotlin中默...

  • 入门示例

    在包 com.cjt.kotlin2定义了方法 multiply(. ..), 在另一类中引用该方法, 如下示例

  • Kevin Learn Kotlin:函数

    Kotlin 的方法 变量 Kotlin 中定义一个变量,只允许在变量前声明两种关键字:val 和 var。 va...

网友评论

      本文标题:kotlin中定义方法

      本文链接:https://www.haomeiwen.com/subject/vbylrqtx.html