瘋狂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…
相關文章
相關標籤/搜索