kotlin基礎語法

葉少磐發表於2019-05-09

kotlin基礎語法

kotlin基本資料型別

數值型別

型別 位寬度
Int 32
Long 64
Float 32
Double 64
Short 16
Byte 8

字元 在kotlin中,char不能直接和數值進行操作。

fun switch(c: Char) {
    if (c == 1) { // 錯誤:型別不相容
        // todo
    }
}
複製程式碼

布林

布林型別包含true和false

陣列

kotlin中的陣列使用類Array實現,與java不同的是,kotlin可以使用[]來替代java中的get和set操作。 陣列有兩種建立方式:

var arr1 = arrayOf(1, 2, 3)
var arr2 = Array(3) { item -> (item + 1) } //[1,2,3]
複製程式碼

字串

kotlin中的String同樣也是不可變的,同時kotlin中的string也支援使用[]來訪問每一個字元。

kotlin支援使用"""來顯示多行字串

var str = """
    abcdefg
    hijklmn
    opqrst
    uvwxyz
""".trimIndent()
複製程式碼

變數宣告

在kotlin中宣告變數只提供了兩個關鍵字,var和val。其中var用以宣告可變變數,val用以宣告不可變變數

//可變變數
var a = 1 //型別自動推斷
var b: Boolean = false
//不可變變數,它們的值不可被修改
val c = 2
val d: Boolean = true
複製程式碼

函式宣告

在kotlin中函式的宣告使用fun關鍵字,同java不同的是,kotlin變數的型別放在變數之後,返回值也同樣放在方法名之後。

有返回值的函式

fun add(a: Int, b: Int): Int {
    return a + b
}
複製程式碼

無返回值的函式(note:kotlin中無返回值的函式其實是返回Unit型別,預設可以省略)

fun printHello() {
    print("hello")
}
複製程式碼

可變長引數函式 函式的變長引數需要使用vararg關鍵字

fun printVararg(vararg list: String) {
    for (item in list) {
        println(item)
    }
}
複製程式碼

lambda匿名函式

val add2: (a: Int, b: Int) -> Int = { a, b -> a + b }
複製程式碼

迴圈

for迴圈

在kotlin中,for迴圈可以對所有支援迭代器的物件進行遍歷。

    //直接列印
    for (item in arr1) {
        println(item)
    }

    //通過索引列印
    for (i in arr1.indices) {
        println(arr1[i])
    }

    //同時列印索引和數值
    for ((index, value) in arr1.withIndex()) {
        println("$index : $value")
    }
複製程式碼

while 和 do...while迴圈

這兩種迴圈基本可以看做是一樣的,不同的是do...while至少會執行一次。

fun testWhile() {
    var n = 1;
    do {
        println("do...while loop")
    } while (n > 1)

    while (n > 1) {
        println("while loop")
    }
}
複製程式碼

執行上面的函式會列印

do...while loop
複製程式碼

跳轉和返回

kotlin同java一樣,也提供了break、continue和return,作用也同java一樣。

類和物件

kotlin中類可以包含:建構函式和初始化程式碼塊、函式、屬性、內部類、物件宣告。 kotlin使用class來宣告類。

class Car {
    //裡面包含類的構成
    var arg1 : Int = 1 //屬性
    fun function1(){} //成員函式
}

//可以存在空類
class Empty
複製程式碼

如果想使用類不需要new關鍵字

var car=Car()
    car.arg1 = 2 //使用.來呼叫屬性
    car.function1() //使用.來呼叫函式
複製程式碼
class Cat(name: String) {
    constructor(name: String, age: Int) : this(name) //次建構函式
}
複製程式碼