Kotlin操作符

版权声明:不为无益之事,何以遣有涯之生。 https://blog.csdn.net/lj402159806/article/details/81355027

kotlin操作符

kotlin操作符优先级

优先级 说明 符号
最高 后缀(Postfix ) ++, --, ., ?., ?
前缀(Prefix) -, +, ++, --, !, labelDefinition@
右手类型运算(Type RHS,right-hand side class type (RHS) ) :, as, as?
乘除取余(Multiplicative) *, /, %
加减(Additive ) +, -
区间范围(Range) ..
Infix函数 例如,给Int定义扩展 infix fun Int.shl(x: Int): Int {...},这样调用 1 shl 2,等同于1.shl(2)
Elvis操作符 ?:
命名检查符(Named checks) in, !in, is, !is
比较大小(Comparison) <, >, <=, >=
相等性判断(Equality) ==, !=
与 (Conjunction) &&
或 (Disjunction) ||
最低 赋值(Assignment) =, +=, -=, *=, /=, %=

重载运算符

3.7.5 一元操作符(unary operation)

前缀操作符

表达式 翻译为
+a a.unaryPlus()
-a a.unaryMinus()
!a a.not()

递增和递减

表达式 翻译为
a++ a.inc() 返回值是a
a-- a.dec() 返回值是a
++a a.inc() 返回值是a+1
--a a.dec() 返回值是a-1

3.7.6 二元操作符

算术运算符

表达式 翻译为
a + b a.plus(b)
a - b a.minus(b)
a * b a.times(b)
a / b a.div(b)
a % b a.rem(b)a.mod(b)
a..b a.rangeTo(b)

in操作符

表达式 翻译为
a in b b.contains(a)
a !in b !b.contains(a)

索引访问操作符

表达式 翻译为
a[i] a.get(i)
a[i] = b a.set(i, b)

方括号转换为调用带有适当数量参数的 getset

调用操作符

表达式 翻译为
a() a.invoke()
a(i) a.invoke(i)

圆括号转换为调用带有适当数量参数的 invoke

计算并赋值

表达式 翻译为
a += b a.plusAssign(b)
a -= b a.minusAssign(b)
a *= b a.timesAssign(b)
a /= b a.divAssign(b)
a %= b a.modAssign(b)

对于赋值操作,例如 a += b,编译器会试着生成 a = a + b 的代码(这里包含类型检查:a + b 的类型必须是 a 的子类型)。

相等与不等操作符

Kotlin 中有两种类型的相等性:

  • 引用相等 === !==(两个引用指向同一对象)
  • 结构相等 == !=( 使用equals() 判断)
表达式 翻译为
a == b a?.equals(b) ?: (b === null)
a != b !(a?.equals(b) ?: (b === null))

Elvis 操作符 ?:

在Kotin中,Elvis操作符特定是跟null比较。也就是说

y = x?:0

等价于

val y = if(x!==null) x else 0

主要用来作null安全性检查。

比较操作符

表达式 翻译为
a > b a.compareTo(b) > 0
a < b a.compareTo(b) < 0
a >= b a.compareTo(b) >= 0
a <= b a.compareTo(b) <= 0

用infix函数自定义中缀操作符

可以通过自定义infix函数来实现中缀操作符。

参考:https://github.com/EasyKotlin/chapter3_kotlin_basics#374-%E6%93%8D%E4%BD%9C%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7precedence

猜你喜欢

转载自blog.csdn.net/lj402159806/article/details/81355027