Kotlin藝術探索之引數和異常

樹獺非懶發表於2019-06-03

引數傳遞

預設引數的使用

可以在方法的引數中設定值作為它的預設引數值

fun reformat(str: String = "11",isTrue: Boolean = false){
    println(str)
    println(isTrue)
}
複製程式碼

使用預設引數在呼叫的時候就可以不傳遞引數

//使用預設引數
reformat()
複製程式碼

具名引數的使用

具名引數就是指定引數名對其賦值,這樣的好處就是在傳引數的時候不需要考慮一一對應,另外因為Kotlin的引數傳遞的靈活性,在傳遞引數時很容易出現歧義,這時候可以通過具名引數來消除歧義。

//使用具名引數,可以指定具體的引數
reformat(isTrue = false,str = "a")
複製程式碼

變長引數的使用

變長引數可以對一個引數賦多個值,需要用到vararg關鍵字

fun becomeLong(vararg args: Int,str: String){
    args.forEach { println("$str $it")
    }
}
複製程式碼

傳遞多個值給變長引數

becomeLong(1,2,3,4,str = "jwt")
複製程式碼

因為變長引數多個值的原因,str這個引數需要用具名引數來消除歧義

傳遞一個陣列的值給變長引數,可以使用 * 運算子來實現

var array = intArrayOf(1,2,3)
becomeLong(*array,str = "jason")
複製程式碼

使用 * 它會把陣列元素分開依次傳給變長引數

異常捕獲

Kotlin的異常的捕獲也是通過try-catch塊來捕獲的

舉個栗子,一目瞭然:

fun main() {
    var args: Array<String> = Array(3){"0"} //初始化陣列,構造方法的引數(size: Int, init: (Int) -> T)
    args.set(0,"2")
    args.set(1,"1")
    try {
        var x = args[0].toInt()
        var y = args[1].toInt()
        println("$x + $y = ${sum(x,y)}")
    }catch (e: NumberFormatException){
        println("需要輸入的資料型別是整數")
    }catch (e: ArrayIndexOutOfBoundsException){
        println("需要輸入兩個整數")
    }catch (e: Exception){
        println("捕捉到程式異常")
    }finally {
        println("求和計算完成")
    }
}


fun sum(x: Int,y: Int): Int{
    return x + y
}
複製程式碼

對求和過程的出現的具體異常進行捕獲處理,無論結果如何最終都會執行finally方法塊。

相關文章