- 包
定義和引入Java一樣咏闪,在文件開頭曙搬, 行結(jié)束不需要” ; “
package com.test.hello
import android.os.Bundle
- 變量
只讀變量,val 開頭,初始化后不能再賦值纵装,相當(dāng)于Java的 final 變量
val a: Int = 1
val b = 1 //類型自動推斷為Int
val c: Int //沒有初始化時必須指定類型
c = 1 //初始化
可變變量, var 關(guān)鍵字開頭
var x = 10
x = 3
- 函數(shù)
函數(shù)定義 fun 開頭征讲, 完整的定義如下:
fun sum(a: Int, b: Int): Int {
return a + b
}
可以簡化成表達(dá)式,返回值自動推斷
fun sum(a: Int, b: Int) = a + b
函數(shù)沒有返回值時橡娄,可以不寫或者返回 Unit
fun test(arg: String) {
println(arg)
}
或者
fun test(arg: String): Unit {
println(arg)
}
- 注釋
和Java一樣诗箍,支持行注釋 " // " 和 塊注釋 "/* */"。
不同之處挽唉,Kotlin支持塊注釋嵌套滤祖,建議不用。
- if else
使用條件語句, 和Java一樣
fun min(a: Int, b: Int): Int {
if (a > b) {
return b
} else {
return a
}
}
Kotlin支持if 表達(dá)式瓶籽,以上代碼可以寫成: fun min(a: Int, b: Int) = if (a > b) b else a
- for
fun main(args: Array<String>) {
for (arg in args) {
println(arg)
}
}
或者
for (i in args.indices) {
println(args[i])
}
- while
和Java類似
fun main(args: Array<String>) {
var i = 0
while (i < args.size) {
println(args[i++])
}
}
- when
when匠童,支持豐富的功能, 比Java的 switch 自由
fun case(a: Int) {
when (a) {
1 -> println("1")
2 -> println("2")
else -> println("else")
}
}
- 范圍, 集合
使用 in 檢查一個數(shù)值是否在某個范圍之內(nèi)
if (x in 1..10) {
// do
}
檢查一個數(shù)值是否在某個范圍之外
if (x !in 0..10) {
//
}
在一個值范圍內(nèi)進(jìn)行遍歷迭代
for (x in 0..10) {
//
}
使用 in 檢查一個集合是否包含某個對象
if (name in names) { //names.contains()
//
}
在一個集合上進(jìn)行遍歷迭代
for (name in names) {
println(name)
}
- null檢查
當(dāng)一個引用可能為 null 值時, 對應(yīng)的類型聲明必須明確地標(biāo)記為可為 null塑顺。
fun parseInt(str: String): Int? {
// todo
}
fun main(args: Array<String>) {
var name: String?
val x = parseInt(args[0])
if (x != null) { // check null
// todo
}
}
- is 類型
is 檢查一個表達(dá)式的值是不是某個類型的實例汤求, 如果對一個不可變的局部變量或?qū)傩赃M(jìn)行過類
型檢查, 那么之后的代碼就不必再對它進(jìn)行顯式地類型轉(zhuǎn)換。
fun getStringLength(obj: Any): Int? {
if (obj is String && obj.length > 0) {
return obj.length // obj as String after is
}
return null
}
參考
《Programming Kotlin》Stephen Samuel 严拒,Stefan Bocutiu
《Kotlin in Action》Dmitry Jemerov扬绪,Svetlana Isakova