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

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

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

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

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

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

3.1.1一目前缀运算符

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

表3.1一目前缀运算符


运算符
对应的方法
+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()方法,并将方法返回值赋值给变量。

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

当++、--放在变量之后时,执行过程如下:

( 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双目算术运算符


运算符
对应的方法
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和..运算符,本章的区间运算符就是专门介绍它们。

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


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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值