Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
let
オブジェクトをラムダのスコープに渡し、ラムダの実行結果を戻り値として返すスコープ関数です。null安全な処理と組み合わせてよく使われます。
構文
// ラムダ内でオブジェクトを it として参照します。戻り値はラムダの最後の式です。
オブジェクト.let { it ->
// it を使った処理
戻り値
}
// null でない場合だけ処理を実行します(安全呼び出しと組み合わせ)。
nullableオブジェクト?.let { it ->
// null でない場合だけここが実行されます。
}
概要
| 項目 | 内容 |
|---|---|
| コンテキストオブジェクトの参照 | ラムダ引数の『it』として参照します。 |
| 戻り値 | ラムダの実行結果(最後の式の値)を返します。 |
| 主な用途 | null チェック、変換処理、一時変数の不要化です。 |
サンプルコード
fun main() {
// 基本的な使い方:変換して結果を受け取ります。
val length = "Hello, Kotlin".let { it.length }
println(length) // 13
// null の場合は実行されません。
val name: String? = "太郎"
val greeting = name?.let { "こんにちは、${it}さん!" }
println(greeting) // こんにちは、太郎さん!
// null の場合は let が実行されず null が返ります。
val nullName: String? = null
val result = nullName?.let { "こんにちは、${it}さん!" }
println(result) // null
// 連続した変換処理をチェーンで書けます。
val score = " 85 "
.let { it.trim() }
.let { it.toInt() }
.let { it * 2 }
println(score) // 170
// 一時変数を使わずにブロック内で処理を完結させます。
val message = listOf("Kotlin", "Java", "Swift")
.let { languages ->
// it の代わりに名前を付けることもできます。
languages.joinToString(separator = " / ")
}
println(message) // Kotlin / Java / Swift
}
概要(詳細)
『let』はコンテキストオブジェクトをラムダの引数として渡し、ラムダの最後の式を戻り値として返します。ラムダ内ではオブジェクトを『it』で参照しますが、引数名を明示的に付けることもできます。
最も頻繁に使われる用途は、『?.let { }』によるnull安全な処理です。ネストした『?.let { }』は可読性が下がるため、2段階以上のネストは避け、別の方法(チェーンや関数分割)を検討してください。スコープ関数の使い分けは『run / with』『apply』『also』も参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。