頭の中でSwiftとの対応表を作りたい。

開発環境

Kotlin Playground

fun main() {
	println(KotlinVersion.CURRENT)  // 1.5.31
}

Swift の if-let

let hoge: Int? = 1

if let hoge = hoge {
  print(hoge)  // 1
}

Optional な値に対して実体がある場合に処理を行う時に書く。

Kotlin

fun main() {
    val hoge: Int? = 1
    
    hoge?.let {
        print(hoge) // 1
    }
}

 

if-let の else は Kotlin では以下のように書くっぽい。

fun main() {
    val hoge: Int? = null
    
    hoge?.let {
        print(hoge)
    } ?: run {
        print("null!")  // null!
    }
}

run

run - Kotlin Programming Language

「指定された関数ブロックを呼び出し、その結果を返す」

スコープ関数の一種。let もスコープ関数だったので使ってみる。

let

Scope functions | Kotlin

とりあえず書く。

fun main() {
    val hoge = 10
    
    
    val fuga = hoge.let {
        100*100
    }
    
    println(fuga)  // 10000
}

 

fun main() {
    val hoge = 10
    
    
    val fuga = hoge.let {
        it*100
    }
    
    println(fuga) // 1000
}

式として利用できる。

run

fun main() {
    val hoge = 10
    
    
    val fuga = hoge.run{
        100*100
    }
    
    println(fuga)  // 10000
}

 

fun main() {
    val hoge = 10
    
    
    val fuga = hoge.run {
        this*100
    }
    
    println(fuga) // 1000
}

let と run では Object reference が it と this で分かれている。
次回以降スコープ関数についてもう少し見る。

脱線したが、Kotlin で Swift の if-let をやりたい時は、以下のように書く。

fun main() {
    val hoge: Int? = null
    
    hoge?.let {
        print(hoge)
    } ?: run {
        print("null!")  // null!
    }
}

参考