疯狂kotlin讲义连载之运算符和表达式——与Java相同的运算符

Java支持的运算符包括算术运算符,赋值运算符、扩展后的赋值运算符、比较运算符、逻辑运算符, Kotlin 彻底支持这些运算符。

Kotlin 不支持 Java 的三目运算符—— Kotlin 使用 if 表达式代替了三目运算符。

Kotlin 的位运算符与 Java 的位运算符也略有区别。

但有一点须要说明: Kotlin 的运算符都是以方法形式来实现的,这些运算符都具备特定的符号(如 + * )和固定的优先级。

各类运算符对应的方法名都是固定的,咱们只要为某个类型提供了特定名称(好比双目+运算符对应的方法名为 plus )的方法,成员方法或扩展方法均可,接下来便可对该类型的对象使用 + 进行运算 ——所以 Kotlin 的全部运算符的功能都是广义的,它不只能做用于数值型、字符串,也可做用于任意自定义的 Kotlin 类。本章后面内容会介绍运算符重载的知识。

3.1.1一目前缀运算符

一目前缀运算符有+ - ! 这三个。它们对应的固定方法名依次如表3.1 所示。

3.1一目前缀运算符html


运算符
对应的方法
+a
a.unaryPlus()
-a
a.unaryMinus()
!a
a.not()

例如以下程序:

程序清单:缓存

codes\03\3.1\UnaryTest.kt
fun main(args: Array<String>) {
var a = 20;
//
用运算符
val b = -a;
//
调用方法
val c = a.unaryMinus();
println("b: ${b}, c: ${c}");
val flag = true
//
用运算符
val notFlag1 = !flag
//
调用方法
val notFlag2 = flag.not()
println("notFlag1: ${notFlag1}, notFlag2: ${notFlag2}");
}
从上面粗体字代码能够看出 -a与a.unaryMinus() 的效果是彻底同样的; !flag flag.not() 的效果也是彻底同样的,所以之后读者在查阅 API 时发现某个类有 unaryPlus() unaryMinus() not()方法,那就说明可对该类的实例使用单目前缀的+ - !进行运算。

3.1.2自加和自减

自加或自减对应的固定方法名依次如表 3.2 所示。

3.2 自加自减

运算符
对应的方法
a++
a.inc()
a--
a.dec()

因为++ -- 放在变量先后是有区别的,所以自加、自减的inc(),dec()两个方法还不彻底等同于a++ a--。
当++ -- 放在变量以前时,执行过程以下:

1)先对变量调用inc()dec()方法,并将方法返回值赋值给变量。post

2 )自加或自减表达式返回变量的新值。

当++--放在变量以后时,执行过程以下:spa

1 )先将一个临时变量缓存变量的值。

2 )对变量调用 inc() dec()方法,并将方法返回值赋值给变量。

3 )自加或自减表达式返回临时变量的值。

例如以下程序:
程序清单:
codes\03\3.1\SelfInc.kt
fun main(args: Array<String>) {
var a = 20
a++
println("a: ${a}") // 输出 21
//
如下代码大体至关于 a++
a = a.inc()
println("a: ${a}") //
输出 22
}
因而可知,之后读者在查阅 API 时发现某个类有 inc () dec()方法,那就说明可对该类的实例使用++、-- 进行运算。

3.1.3双目算术运算符

双目算术运算符对应的固定方法名依次如表 3.3所示。

3.3双目算术运算符code


运算符
对应的方法
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..b
a.rangeTo(b)

例如以下程序:

程序清单:
codes\03\3.1\Arthimetic.kt
fun main(args: Array<String>) {
//
加法运算
println(5 + 6)
println(5.plus(6))
//
乘法运算
println(2.3 * 3.4)
println(2.3.times(3.4))
//
求余运算
println(2.5 % 1.2)
println(2.5.rem(1.2))
}

因而可知,之后读者在查阅 API 时发现某个类有带一个参数的 plus()、minus() times() div() rem() rangeTo()方法,那就说明可对该类的实例使用以上算术运算符。

提示:此处暂时不介绍rangeTo..运算符,本章的区间运算符就是专门介绍它们。cdn

以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义


本书即将于2017年11月发售 敬请期待
往期连载

第二期:juejin.im/post/59c1d6…
htm

第三期:juejin.im/post/59e407…对象

第四期:juejin.im/post/59ed77…blog

第五期:juejin.im/post/59eec3…rem

第六期:juejin.im/post/59effb…

第七期:juejin.im/post/59f153…

第八期:juejin.im/post/59f283…

第九期:juejin.im/post/59f686…

第十期:juejin.im/post/59f7ea…

第十一期:juejin.im/post/59f953…

第十二期:juejin.im/post/59fa7e…

第十三期:juejin.im/post/59fc1e…

第十四期:juejin.im/post/59ffcb…

相关书籍《疯狂Android讲义》 item.jd.com/11689014.ht…
相关文章
相关标签/搜索