kotlin 三元运算符_Kotlin运算符

kotlin 三元运算符

考虑两种类型XY ,以及定义为的函数f

classX
classY

valf={_:X->Y()} (1)
  1. 使用Kotlin 1.3,可以命名未使用的参数_ ,以明确告诉它被忽略

以下代码段声明了一个类似于f的函数。 然后,使用invoke()函数使用类型为X的参数执行该命令:

funf(x:X)=Y()

valy:Y=f.invoke(X())

Java等效项为Function.apply()

interfaceFunction<T,R>{
  Rapply(Tt);
}

在Kotlin中,也可以使用等效语法来调用该函数:

valy:Y=f(X())

这种替代语法是可能的,因为invoke()operator 。 运算符是提供特定替代语法的功能有限的一组。

诸如C和Scala之类的语言允许对函数进行命名, 例如 + !::=甚至是🤔。 使用此类语言的经验表明,这种自由的另一面是符号函数的繁荣,通常会导致(非常)难以阅读的代码。 相反,Java完全禁止在方法名称中使用特殊字符,以避免出现此问题。 尽管有时是开玩笑的目标,但长方法名使陌生的读者了解该方法的用途。 其他语言选择了一条中间路径,例如Groovy:

Groovy允许您重载各种运算符,以便它们可以与您自己的类一起使用。

所有(非比较器)Groovy运算符都有一个对应的方法,可以在自己的类中实现。

— Groovy文档
http://groovy-lang.org/operators.html#Operator-Overloading

Kotlin遵循相同的方法:提供有限语法的操作符函数数量有限。 invoke()就是其中之一。 这是此类可用替代品的列表:

表达 翻译成

a()

a.invoke()

a(i)

a.invoke(i)

a(i, j)

a.invoke(i, j)

a(i_1, ..., i_n)

a.invoke(i_1, ..., i_n)

这允许编写有趣的结构:

data classPoint(varx:Int,vary:Int)

classTranslate(valx:Int,valy:Int){
  operatorfuninvoke(point:Point)=Point(point.x+x,point.y+y) (1)
}

valpoint=Point(1,1)
valtranslate=Translate(5,10) (2)
valtranslated=translate(point) (3)
  1. 声明一个新的运算符函数invoke()
  2. 创建Translate的新实例
  3. 这等效于translate.invoke(point) ,尽管它看起来像一个顶级函数调用

操作员可以大大提高其代码的可读性。 或者,这绝对可以是炫耀的一种练习,但效果恰恰相反。 强大的力量带来巨大的责任!

翻译自: https://blog.frankel.ch/kotlin-operators/

kotlin 三元运算符

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值