【问题标题】:Kotlin coding conventions, infix functions, and bitwise operationsKotlin 编码约定、中缀函数和按位运算
【发布时间】:2019-05-03 17:07:39
【问题描述】:

Kotlin coding conventions使用中缀函数一节中说:

仅当一个函数作用于两个扮演相似角色的对象时,才将其声明为中缀。很好的例子:andtozip。不好的例子:add

如果方法改变了接收者对象,则不要将其声明为中缀。

我的第一个问题是:add 是一个坏例子吗?

然后在basic types 的讨论中,它解释了按位运算符是“可以以中缀形式调用的命名函数”,并给出了这个例子(作为更大表达式的一部分):

(1 shl 2)

在我看来,三个 Kotlin 移位操作(shlshrushr)似乎违反了编码约定。左右操作数根本不扮演类似的角色。左操作数是原始位模式,右操作数是位模式应该移动多远。

我错过了什么吗?

【问题讨论】:

    标签: kotlin coding-style infix-notation


    【解决方案1】:

    add(让我们选择MutableList接口的add)是一个不好的例子,因为它违反了规则:

    如果方法改变了接收者对象,不要将其声明为中缀。

    add 改变原始列表并返回Boolean


    在 Kotlin 中,没有用于按位运算的专用运算符。因此,为了方便调用它们,它们创建为中缀函数。

    另一方面,整数加法有一个专用运算符+。这就是为什么没有必要将plusInt)设为中缀函数,即使它是一个合适的候选者。

    【讨论】:

    • 啊。我在想addplus 一样,但当然它通常是一个变异的方法名称。我仍然很好奇为什么 Kotlin 的设计者选择为移位运算符使用方法名称,并且违反了他们自己的编码约定,选择让它们作为中缀函数工作。他们本可以简单地采用 Java 的 <<>>>>> 运算符符号。
    猜你喜欢
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2021-01-06
    相关资源
    最近更新 更多