kotlin定义方法的实例--扩展方法--Lamda---高阶函数

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)
    }
}

高阶函数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值