当前位置:嗨网首页>书籍在线阅读

27-二元运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.7.2 二元运算符

二元运算符主要分为二元算数运算符、in操作符、索引访问操作符、调用操作符和比较操作符等。

1.二元算数运算符

表4-9所示是二元算数运算符与对应的转换方法。

表4-9 二元算数运算符重载

| 表达式 | 对应转换方法 | 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | :----- | :----- | | a + b | a.plus(b) | a / b | a.div(b) | | a - b | a.minus(b) | a%b | a.rem(b) | | a * b | a.times(b) | a..b | a.rangeTo(b) |

需要说明的是,从Kotlin 1.1版本开始,用于求余的mod操作符已被rem操作符替换。

data class Counter(val dayIndex: Int) {
     operator fun plus(increment: Int): Counter {
        return Counter(dayIndex + increment)
    }
}

上面是一个给定起始值的Counter类示例,它可以使用重载的+运算符来实现累加操作。

2.in操作符

在前端JS中,in操作符用来判断某个属性是否属于某个对象,是对象的直接属性。表4-10所示是in操作符与对应的转换方法。

表4-10 in操作符重载

| 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | | a in b | b.contains(a) | | a !in b | !b.contains(a) |

3.索引访问操作符

在Kotlin中,可以使用索引运算符来访问字符串中的某个字符,也可以使用for循环遍历字符串。表4-11所示是索引访问表达式与对应的转换方法。

表4-11 索引访问操作符重载

| 表达式 | 对应转换方法 | 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | :----- | :----- | | a[i] | a.get(i) | a[i]=b | a.set(i, b) | | a[i, j] | a.get(i, j) | a[i,j]=b | a.set(i, j, b) | | a[i_1, …, i_n] | a.get(i_1, … , i_n) | a[i_1, … , i_n]=b | a.set(i_1,… ,o_n,b) |

4.相等与不等运算符

在Kotlin中,== 操作符有些特殊,它被翻译成一个复杂的表达式,用于筛选空值。表4-12所示是相等与不等运算符对应的转换方法。

表4-12 相等与不等运算符重载

| 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | | a == b | a?.equals(b) ?: (b === null) | | a != b | !(a?.equals(b) ?: (b === null)) |

需要注意的是,在Kotlin中,\== 和 !==操作符是不可以重载的。

5.比较操作符

所有的比较操作符都会转换为对compareTo函数的调用。该转换函数返回一个int类型的值,如表4-13所示。

表4-13 比较操作符重载

| 表达式 | 对应转换方法 | 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | :----- | :----- | | a > b | a.compareTo(b) > 0 | a >= b | a.compareTo(b) >= 0 | | a < b | a.compareTo(b) < 0 | a <= b | a.compareTo(b) <= 0 |

6.函数调用

在Kotlin中,方法调用也被定义为二元操作运算符,而这些方法往往可以转化为invoke函数,如表4-14所示。

表4-14 函数调用

| 方  法 | 对应转换方法 | | :----- | :----- | :----- | :----- | | a(i) | a.invoke(i) | | a(i, j) | a.invoke(i, j) | | a(i_1, …, i_n) | a.invoke(i_1, …, i_n) |