letとrun:変換とスコープ
null安全な変換にはletを、ローカルな計算にはrunを使用します。
「letとrun:変換とスコープ」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
letとrun
letはitをレシーバーとして使用し、runはthisを使用します。どちらもラムダの最後の式を返します。明示的な参照を好むかどうかで使い分けてください。
letの基本
letはレシーバーをitとしてラムダに渡します。値の変換や変数のスコープの限定に便利です。
fun main() {
val length = "Kotlin".let { it.length }
println(length) // 6
}nullable値でのlet
よく使われるイディオムです。obj?.let { ... }は、objがnullでない場合にだけブロックを実行します。
fun main() {
val name: String? = "Ada"
val upper = name?.let { it.uppercase() } ?: "(unknown)"
println(upper) // ADA
}変換にletを使う
チェーンの読みやすさを保ちながら値を変換するには、letを使用します。
fun main() {
val numStr = "42"
val doubled = numStr.let { it.toInt() }.let { it * 2 }
println(doubled) // 84
}スコープの限定にletを使う
変数の可視性を小さなブロック内に限定できます。名前空間の汚染を避ける、すっきりした方法です。
fun main() {
val username = readUserConfig().let { config ->
config.uppercase()
}
println(username)
}
fun readUserConfig() = "ada"runの基本
runはletと似ていますが、itではなくthisを使用します。レシーバーの複数のメンバーを呼び出したい場合に便利です。
class Rect(val w: Int, val h: Int) {
fun area() = w * h
fun perimeter() = 2 * (w + h)
}
fun main() {
val description = Rect(3, 4).run {
"area=${area()}, perimeter=${perimeter()}"
}
println(description)
}独立したブロックとしてのrun
レシーバーなしのrun { ... }はブロックを実行し、その結果を返します。計算をまとめる場合に便利です。
fun main() {
val result = run {
val a = 10
val b = 20
a + b
}
println(result) // 30
}レシーバーの参照方法でletとrunを使い分ける
ラムダ本体でレシーバーの多くのメンバーにアクセスする場合は、runを使うとit.を省略できます。レシーバーを1〜2回だけ使う場合は、letのほうが読みやすいでしょう。
class User(val name: String, val email: String, val age: Int)
fun main() {
val user = User("Ada", "ada@x.io", 35)
// run: this-style
val s1 = user.run { "$name <$email> age $age" }
// let: it-style
val s2 = user.let { "${it.name} <${it.email}> age ${it.age}" }
println(s1); println(s2)
}letとElvis演算子の組み合わせ
?.let { ... }と?:の組み合わせは、強力なnull安全パイプラインのパターンです。
fun main() {
val raw: String? = " hello "
val cleaned = raw?.let { it.trim().uppercase() } ?: "(empty)"
println(cleaned) // HELLO
}設定と結果を扱うrun
thisによる設定と返り値を、1つのブロックにまとめられます。
class Connection {
var host: String = ""
fun connect() = "connected to $host"
}
fun main() {
val status = Connection().run {
host = "localhost"
connect()
}
println(status)
}アンチパターン:letの使いすぎ
ifのほうが明快な単純なnullチェックを、letで包まないでください。スコープ関数は、本当に役立つ場合に使用しましょう。
fun main() {
val name: String? = "Ada"
// OK
name?.let { println(it.length) }
// Equivalent and clearer for trivial cases:
if (name != null) println(name.length)
}クイックチェック
レシーバーをitとしてラムダに渡し、かつラムダの結果を返すスコープ関数はどれですか?
振り返り
letはitを使用し、ラムダの結果を返します。null安全な変換やスコープの限定に適しています。runはthisを使用し、ラムダの結果を返します。レシーバーの多くのメンバーを呼び出す場合に適しています。どちらも式形式のコードに向いています。
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「letとrun:変換とスコープ」レッスンは無料ですか?
はい。「letとrun:変換とスコープ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「letとrun:変換とスコープ」で何を学びますか?
null安全な変換にはletを、ローカルな計算にはrunを使用します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「letとrun:変換とスコープ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- applyとwith:設定して返す
- letとrun:変換とスコープ
- also:レシーバーを変更せず副作用を実行する
- 適切なスコープ関数の選び方:判断ガイド