Kotlin 入門(一)
阿新 • • 發佈:2018-12-21
目錄
-
基本資料型別
- 數字
- 字元
- 布林
- 陣列
- 字串
-
控制流(if/when/for/while)
- if
- when
- for
- while
-
函式與Lambda表示式
-
類與物件
- 繼承
- 屬性與欄位
- 介面
- 內聯類
-
註釋
-
編碼規範
基本資料型別
數字
Type | Bit Width |
---|---|
Double | 64 |
Float | 32 |
Long | 32 |
Int | 32 |
Short | 16 |
Byte | 8 |
字面常量
- 十進位制:123
- Long型別用大寫L 標記:123L
- 十六進位制:0x0F
- 二進位制:0b0001011
- 預設Double:123.5、123.5e10
- Float 用f或者F標記:123.5f
數字字面值中的下劃線(自1.1起)
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
複製程式碼
- 對於數字沒有隱式拓展轉換(如Java中的int可以隱式轉換為long)
- kotlin 不支援八進位制
- Kotlin 中字元不是數字
字元
布林
布林用 Boolean 型別表示,它有兩個值:true 與 false。
若需要可空引用布林會被裝箱。
內建的布林運算有:
- || – 短路邏輯或
- && – 短路邏輯與
- ! - 邏輯非
陣列
控制流
if表示式
在 Kotlin 中,if是一個表示式,即它會返回一個值。 因此就不需要三元運算子(條件 ? 然後 : 否則),因為普通的 if 就能勝任這個角色。
// 傳統用法
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// 作為表示式
val max = if (a > b) a else b
複製程式碼
if的分支可以是程式碼塊,最後的表示式作為該塊的值:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
複製程式碼
如果你使用 if 作為表示式而不是語句(例如:返回它的值或者把它賦給變數),該表示式需要有 else 分支。
when
when 取代了類 C 語言的 switch 操作符。其最簡單的形式如下
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 注意這個塊
print("x is neither 1 nor 2")
}
}
如果 when 作為一個表示式使用,則必須有 else 分支, 除非編譯器能夠檢測出所有的可能情況都已經覆蓋了。
複製程式碼
while 迴圈
while (x > 0) {
x--
}
do {
val y = retrieveData()
} while (y != null) // y 在此處可見
複製程式碼
函式
函式的宣告
Kotlin 中的函式使用 fun
關鍵字宣告:
fun double(x: Int): Int {
return 2 * x
}
複製程式碼
定義函式
- 帶有兩個 Int 引數、返回 Int 的函式:
fun sum(a: Int, b: Int): Int {
return a + b
}
複製程式碼
- 將表示式作為函式體、返回值型別自動推斷的函式:
fun sum(a: Int, b: Int) = a + b
複製程式碼
- 函式返回無意義的值,
Unit
是一種只有一個值——Unit
的型別。這個值不需要顯式返回:
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
複製程式碼
類與物件
類的成員
- 建構函式與初始化塊
- 函式
- 屬性
- 巢狀類與內部類
- 物件宣告
建構函式
Kotlin
中使用關鍵字 class
宣告類
class Invoice { ... }
複製程式碼
屬性與欄位
- 屬性可以用關鍵字var 宣告為可變的,否則使用只讀關鍵字val,1、只讀屬性的用 val開始代替var 2、只讀屬性不允許 setter。要使用一個屬性,只要用名稱引用它即可
- getter和setter
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
複製程式碼
繼承
在 Kotlin
中所有類都有一個共同的超類 Any
,這對於沒有超型別宣告的類是預設超類: