Kotlin是一個(gè)基于 JVM 的編程語(yǔ)言,由 JetBrains 開(kāi)發(fā)莫换。Kotlin可以編譯成Java字節(jié)碼霞玄,也可以編譯成JavaScript骤铃,方便在沒(méi)有JVM的設(shè)備上運(yùn)行。
在 Google I/O 2017 大會(huì)上坷剧,Google 宣布 Android Studio 3.0 完全支持 Kotlin劲厌,稱其“簡(jiǎn)潔、表現(xiàn)力強(qiáng)听隐,具有類型安全和空值安全的特點(diǎn),也可以與java進(jìn)行完整的互操作”哄啄。
下面簡(jiǎn)單介紹kotlin語(yǔ)法并與java對(duì)比語(yǔ)法差異雅任。
1.賦值表示
變量:var varNumber=1(隱式類型推斷)
常量:val constantNumber=1(隱式類型推斷)
var str:String?="abc"(顯示類型表示)
var other:String?
other=null
2.流控制
if表達(dá)式:
// 傳統(tǒng)用法
var max=a
if (a<b) max=b
//表達(dá)式用法
val max = if (a>b) a else b
//如果分支是塊,那么最后一個(gè)表達(dá)式是塊的值
val max = if ( a > b ) {
? ? ? print("choose a")
? ? ? a
} else ?{
? ? ? print("choose b")
? ? ? b
}
when表達(dá)式:
when代替了c風(fēng)格的switch語(yǔ)句:
when (x) {?
? ? ? ? ?1 -> print("x == 1")?
? ? ? ? ?2 -> print("x == 2")?
? ? ? ? ?else -> { // Note the block?
? ? ? ? ? ? ? ? print("x is neither 1 nor 2")?
? ? ? ? ? }
}
如果許多情況需要以同樣的方式處理咨跌,分支情況可以用逗號(hào)結(jié)合起來(lái):
when (x) {?
? ? ? ? ?0, 1 -> print("x == 0 or x == 1")?
? ? ? ? ?else -> print("otherwise")?
}
可以用任意表達(dá)式當(dāng)做分支語(yǔ)句:
when (x) {?
? ? ? ? parseInt(s) -> print("s encodes x")?
? ? ? ? else -> print("s does not encode x")?
}
我們也可以檢測(cè)一個(gè)值是不是在一個(gè)范圍或集合中:
when (x) {
? ? ? ? ?in 1..10 -> print("x is in the range")?
? ? ? ? ?in validNumbers -> print("x is valid")?
? ? ? ? ?!in 10..20 -> print("x is outside the range")?
? ? ? ? ?else -> print("none of the above")?
}
for循環(huán):
語(yǔ)法表示:
for (item in collection) print(item)
迭代數(shù)組或集合下標(biāo):
for (i in array.indices) {
? ? ? print(array[i])
?}
遍歷下標(biāo)沪么,值元組:
for ((index, value) in array.withIndex()) {?
? ? ? println("the element at $index is $value")
?}
while循環(huán):
while (x > 0) {
? ? ?x--
}
do {
? ? val y = retrieveData()?
} while (y != null) ?//注意此處y可見(jiàn)
3.函數(shù)
用fun關(guān)鍵字聲明函數(shù),函數(shù)聲明采用Pascal命名法锌半,即name:value形式:
fun double(x: Int): Int { }
參數(shù)可以有默認(rèn)值:
fun read(b: Array, off: Int = 0, len: Int = b.size()) {?
...
}
Unit代表無(wú)返回值函數(shù):
fun printHello(name: String?): Unit {?
? ? ?if (name != null) println("Hello ${name}")?
? ? else println("Hi there!")?
}
4.Lambda表達(dá)式與匿名函數(shù)
lambda語(yǔ)法:
val sum = { x: Int, y: Int -> x + y }
ints.filter { it > 0 }
匿名函數(shù):
fun(x: Int, y: Int): Int = x + y
5.Java與kotlin對(duì)比
打忧莩怠:
//Java
System.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");
//kotlin
print("Amit Shekhar")
println("Amit Shekhar")
空值檢查:
//Java
if(text!=null){
? ? int length=text.length();
}
//kotlin
text?.let {
? ? val length=text.length
}
實(shí)例判斷與轉(zhuǎn)換:
//Java
if (object instanceof Car){
? ? Car ?car=(Car) object;
}
//kotlin
if (objectisCar) {
? ? var car=object //smartcasting
}
參考鏈接:
1.http://kotlinlang.org/docs/kotlin-docs.pdf
2.https://github.com/MindorksOpenSource/from-java-to-kotlin/blob/master/README.md