Overview
本節(jié)介紹四種語言的最基本的語法形式泪电,包含注釋,操作符府树,相等性等讨阻。
共通篇
注釋
四種語言都支持以下三種注釋
// 單行注釋
/*
多行注釋
*/
/**
* JavaDoc
*/
Java 篇
操作符
Java 中的操作符支持四則運(yùn)算,賦值(=)聚蝶,運(yùn)算后賦值(+=)杰妓,遞增遞減(++, --),三元操作符(?true:false)碘勉,邏輯操作符巷挥,關(guān)系操作符等。
調(diào)用方法
語法
方法名(參數(shù)列表)
例
add(1, 2)
相等性
Java 使用 ==
表示基本數(shù)據(jù)類型的值相等和引用數(shù)據(jù)類型的地址相等验靡;用方法 equals()
表示引用類型的內(nèi)容相同倍宾。Java 的內(nèi)置類都實(shí)現(xiàn)了自己的 equals()
方法,如果是自己建立的類則要重寫 equals()
方法胜嗓。
Date x = new Date(100);
Date y = new Date(100);
System.out.println("x==y: " + (x == y)); // false
System.out.println("x.equals(y): " + x.equals(y)); // true
Groovy 篇
操作符
包含 Java 的所有操作符之外高职,Groovy 還多了一個(gè)貓王操作符 ?:
,該操作符是三元操作符的語法糖辞州。
例
String agentStatus = "Active"
// 三元操作符
String statusTernary = (agentStatus !=null && !"".equals(agentStatus)) ? "Active" : "Inactive"
// 貓王操作符
String statusElvis = agentStatus ?: "Inactive"
在使用貓王操作符時(shí) Groovy 會(huì)自動(dòng)將左邊的表達(dá)式向布爾值進(jìn)行轉(zhuǎn)換怔锌。轉(zhuǎn)換規(guī)則為:所有邏輯上的空值都會(huì)被認(rèn)為是
false
,比如null
变过,空字符串埃元,空數(shù)組等,除此之外的都是true
牵啦。
調(diào)用方法
語法基本同 Java亚情,但是在 Groovy 中如果方法的參數(shù)個(gè)數(shù)只有一個(gè)時(shí),可以省略包裹在參數(shù)列表上的小括號(hào)哈雏,方法名和參數(shù)間留一個(gè)空格
例
println("Hello World")
// 省略小括號(hào)
println "Hello World"
相等性
Groovy 認(rèn)為比較內(nèi)容的使用場(chǎng)合要遠(yuǎn)遠(yuǎn)大于比較引用楞件,所以 Groovy 中的 ==
默認(rèn)就是調(diào)用 equals()
方法。
例
println("x==y: " + (x == y)) // true
println("x.equals(y): " + x.equals(y)) // true
另外 Groovy 在比較時(shí)對(duì)空指針做了判斷裳瘪,所以等號(hào)左邊即使是空值也不會(huì)引發(fā)空指針異常土浸。
例
println(null == 10) // false
如果你希望調(diào)用 Java 版本的 ==
進(jìn)行引用的比較,可以調(diào)用 is()
方法彭羹。
例
println("x.is(y): " + x.is(y)) // false
Scala 篇
操作符
Scala 中一切皆對(duì)象黄伊,所有的操作符都是對(duì)應(yīng)方法的語法糖。即 1 + 2
實(shí)際上就是 調(diào)用 1.+(2)
的語法糖派殷,其中 +
既是操作符也是方法名还最。像這種位于兩個(gè)操作數(shù)之間的操作符被稱為中綴操作符墓阀,Scala 中中綴操作符在使用時(shí)可以被省略,所以 1.+(2)
可以簡(jiǎn)寫成 1 + 2
拓轻。
Scala 支持 Java 中除了遞增斯撮,遞減之外的所有操作符,所以在 Scala 中不能使用 i++
這樣的語句扶叉,而需要使用 i += 1
來實(shí)現(xiàn)同樣的功能勿锅。
調(diào)用方法
同 Groovy,只有一個(gè)參數(shù)時(shí)可以省略括號(hào)枣氧,在方法名和參數(shù)間加一個(gè)空格
相等性
同 Groovy 一樣溢十,==
調(diào)用的是 equals()
方法。 不同的是 Groovy 比較引用用的是 is()
达吞,而 Scala 則是 eq()
张弛,也就是說只是方法名不一致。
println("x.eq(y): " + x.eq(y)) // false
Kotlin 篇
操作符
基本上同 Groovy宗挥,也擁有貓王操作符
調(diào)用方法
同 Java 一樣乌庶,很久以前的版本也支持去掉小括號(hào)种蝶,不過這一特性早已被移除契耿。
相等性
和 Groovy,Scala 一樣螃征,==
也是調(diào)用 equals()
搪桂,而比較引用使用的是 ===
(類似 Javascript),這三種語言同一個(gè)功能不同方法名也真是夠了盯滚。
例
println("x===y : " + (x === y)) // false
Summary
- 除了 Scala 之外踢械,其它語言都支持一元操作符
++
,--
- Groovy 和 Kotlin 都支持貓王操作符
- 除了 Java 之外魄藕,其它語言中
==
調(diào)用的都是equals()
内列,比較引用則使用其它的方法,且三種語言的方法名都不一致
文章源碼見 https://github.com/SidneyXu/JGSK 倉庫的 _08_grammar
小節(jié)