Kotlin藝術探索之流程控制和運算子

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

if的使用

if-else表示式的使用,最普通的寫法如下


fun ifExpression(): Int{
    //1.最普通的寫法
    var max: Int
    if (a < b) {
        max = b
    }
    else{
        max = a
    }
    return max
}
複製程式碼

在Kotlin可以將上面的栗子寫成if表示式的形式

val max = if(a > b) a else b
複製程式碼

注意:表示式一定要完整,不能省略else部分

如果if表示式某個條件下有多個語句,那麼最後一行是其返回結果


    val max2 = if(a > b){
        println("a > b")
        a
    }else{
        println("a < b")
        b
    }
複製程式碼

when表示式

when和java中的switch功能是一樣的,switch能實現的,when都可以實現,並且寫起來更簡潔

when表示式的普通的寫法,舉個栗子

fun whenExpression(x: Int) {
    when(x){
      1 -> println("x == 1")
      2 -> println("x == 2")
        else -> {
            print("x is neither 1 nor 2")
        }
    }
}
複製程式碼

when下的語句,如果其中一條符合條件,就會直接跳出並返回結果

如果多個case有同一種處理方式的話,可以通過逗號連線,譬如這樣:

  when(x){
        1, 2 -> println("x == 1 or x == 2")
        else ->  println("x is neither 1 nor 2")
    }
複製程式碼

那如果case在一定的範圍內有相同的處理方式呢?可以這樣寫:

 when(x){
        in 1..10 -> println("x在1到10的範圍內")
        !in 10..20 -> println("x不在10到20的範圍內")
        else -> println("none of the above")
    }
複製程式碼

那如果case是一個表示式,就可以這麼寫:

 when(x){
        parseInt(s) -> println("s encodes x")
        else -> println("s does not encode x")
    }
複製程式碼

for迴圈語句

for迴圈遍歷範圍內的數

    for(i in 1..10) println(i)
複製程式碼

downTo 從6降到0 step 步長為2

    for(i in 6 downTo 0 step 2) println(i)
複製程式碼

for迴圈遍歷一個陣列

   var array: Array<String> = arrayOf("I","am","jason","king")
    //迭代一個陣列
    for(i in array.indices){
        print(array[i])
    }
複製程式碼

遍歷陣列,輸出對應下標的值

    for((index,value) in array.withIndex()){
        println("該陣列下標$index 的元素是這個$value")
    }
複製程式碼

while迴圈

while迴圈的使用有while 和 do-while兩種方式

fun whileLoop() {
    var x = 5
    //while
    while (x > 0){
        x--
        print("$x-->")
    }

    x = 5
    println()
    do {
        x--
        print("$x-->")
    } while (x >= 0) // y is visible here!
    
}
複製程式碼

跳出迴圈break和跳過迴圈continue和其他語言語法完全一樣,這裡就不贅述了。

流程控制部分的詳細內容傳送到這裡

Control Flow 流程控制部分的詳細內容可以傳送到官方文件 Control Flow

運算子過載

Kotlin中任何類可以定義或過載父類的基本運算子,需要用operator關鍵字

舉個栗子,對Complex類過載 + 運算子

class Complex(var real: Double,var imaginary: Double){
    //過載加法運算子
    operator fun plus(other: Complex): Complex {
        return Complex(real + other.real,imaginary + other.imaginary)
    }
    
    //重寫toString輸出
    override fun toString(): String {
        return "$real + $imaginary"
    }
}
複製程式碼

在main函式使用過載的 + 運算子

var c1 = Complex(1.0,2.0)
var c2 = Complex(2.0,3.0)
println(c1 + c2)
複製程式碼

輸出結果

3.0 + 5.0

運算子部分的詳細內容可以傳送到官方文件

Operator overloading

相關文章