欢迎光临seo外链资源网站,我们为你英文友情链接的信息及服务

seo外链资源

一个资源好的推广优化外链发布网站,为你解决外链获客难题

Kotlin 语法基础大全,从例子着手的 从0到1的学习 -- 函数

作者:jcmp      发布时间:2021-04-26      浏览量:0
一、高阶函数高阶函数 是以另一个函

一、高阶函数

高阶函数 是以另一个函数为参数或者返回值的函数。

二、以另一个函数为参数

fun calculate(x: Int, y: Int, operation: (Int, Int) -> Int): Int { // 1 return operation(x, y) // 2}fun sum(x: Int, y: Int) = x + y // 3fun main() { val sumResult = calculate(4, 5, ::sum) // 4 val mulResult = calculate(4, 5) { a, b -> a * b } // 5 println("sumResult $sumResult, mulResult $mulResult")}

三、以一个函数作为返回值

fun operation(): (Int) -> Int { // 1 return ::square}fun square(x: Int) = x * x // 2fun main() { val func = operation() // 3 println(func(2)) // 4}

四、lambda 表达式

Lambda表达式 是一种为了方便创建函数对等式(就是 相当于一种函数)。lambda 可以很简洁地表明函数,通过使用默认参数it。

// All examples create a function object that performs upper-casing.// So it's a function from String to Stringval upperCase1: (String) -> String = { str: String -> str.toUpperCase() } // 1val upperCase2: (String) -> String = { str -> str.toUpperCase() } // 2val upperCase3 = { str: String -> str.toUpperCase() } // 3// val upperCase4 = { str -> str.toUpperCase() } // 4val upperCase5: (String) -> String = { it.toUpperCase() } // 5val upperCase6: (String) -> String = String::toUpperCase // 6println(upperCase1("hello"))println(upperCase2("hello"))println(upperCase3("hello"))println(upperCase5("hello"))println(upperCase6("hello"))。

Extension Functions 扩展函数 和 Properties 属性。

kotlin 可以通过 扩展机制 让你扩展任何的class 。顾名思义,有两种扩展方式:扩展方法和扩展属性。他们看起来像是普通的方法和属性,除了一点,你必须明确的说明你是要扩展那个类。

data class Item(val name: String, val price: Float) // 1 data class Order(val items: Collection) fun Order.maxPricedItemValue(): Float = this.items.maxBy { it.price }?.price ?: 0F // 2 fun Order.maxPricedItemName() = this.items.maxBy { it.price }?.name ?: "NO_PRODUCTS"val Order.commaDelimitedItemNames: String // 3 get() = items.map { it.name }.joinToString()fun main() { val order = Order(listOf(Item("Bread", 25.0F), Item("Wine", 29.0F), Item("Water", 12.0F))) println("Max priced item name: ${order.maxPricedItemName()}") // 4 println("Max priced item value: ${order.maxPricedItemValue()}") println("Items: ${order.commaDelimitedItemNames}") // 5}/*Max priced item name: WineMax priced item value: 29.0Items: Bread, Wine, Water*/

甚至你可以为null 扩展方法。在扩展方法中,你可以对this 进行检查是否为null,并根据检查结果做出你的逻辑。

fun T?.nullSafeToString() = this?.toString() ?: "NULL" // 1fun main() { println(null.nullSafeToString()) println("Kotlin".nullSafeToString())}