適切なスコープ関数の選び方:判断ガイド
レシーバー、戻り値の型、意図に基づいて適切なスコープ関数を選択します。
「適切なスコープ関数の選び方:判断ガイド」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
5つの関数と2つの軸
Kotlinのスコープ関数は、2つの軸で異なります。レシーバーの参照方法(thisまたはit)と、返り値(レシーバーまたはラムダの結果)です。意図に応じて選択してください。
選択マトリクス
apply:this / レシーバー。also:it / レシーバー。run:this / ラムダ。let:it / ラムダ。with:this / ラムダ(ドットによるレシーバー指定なし)。
apply:設定して返す
ビルダースタイルのチェーンでオブジェクトを設定するには、applyを使用します。
class Config {
var host: String = ""
var port: Int = 0
}
fun main() {
val cfg = Config().apply {
host = "localhost"
port = 8080
}
println("${cfg.host}:${cfg.port}")
}also:副作用
レシーバーを次へ渡しながら、ログ出力、検証、または副作用の実行を行うには、alsoを使用します。
fun main() {
val items = listOf(1, 2, 3, 4)
.also { println("got ${it.size} items") }
.filter { it % 2 == 0 }
println(items)
}let:変換、スコープ、null安全性
null安全な変換や変数のスコープの限定には、letを使用します。
fun main() {
val name: String? = "Ada"
val length = name?.let { it.length } ?: 0
println(length)
}run:複数メンバーへのアクセスと結果の取得
レシーバーの複数のメンバーから結果を計算する場合は、runを使用します。it.の接頭辞を省略できます。
class User(val name: String, val age: Int)
fun main() {
val description = User("Ada", 35).run {
"Name: $name, Age: $age"
}
println(description)
}with:既存オブジェクトに対する操作のグループ化
呼び出し箇所を変更できず(ドットチェーンを使えず)、thisを使って操作をまとめたい場合は、with(obj) { ... }を使用します。
class Builder {
val parts = mutableListOf<String>()
fun add(s: String) { parts.add(s) }
fun build(): String = parts.joinToString("-")
}
fun main() {
val b = Builder()
val result = with(b) {
add("hello")
add("kotlin")
build()
}
println(result) // hello-kotlin
}意図に基づいて選択する
次の点を確認してください。(1)レシーバー自体が必要ですか、それとも派生した結果が必要ですか?(2)thisとitのどちらを使いたいですか?答えによって使用する関数が決まります。
class Box { var w = 0; var h = 0; fun area() = w * h }
fun main() {
// Configure and return Box -> apply
val box = Box().apply { w = 3; h = 4 }
// Compute area from box -> let or run
val area = box.let { it.area() }
// Side effect, keep box -> also
val sameBox = box.also { println("area=${it.area()}") }
println("$box / $area / $sameBox")
}比較:applyとalso
どちらもレシーバーを返します。applyはthisを使用します(フィールドの設定に適しています)。alsoはitを使用します(レシーバーを明示的に参照する場合、特に副作用での利用に適しています)。
class Item { var name = "" }
fun main() {
val a = Item().apply { name = "apply" } // implicit this
val b = Item().also { it.name = "also" } // explicit it
println("${a.name} / ${b.name}")
}比較:letとrun
どちらもラムダの結果を返します。letはitを使用します(単純な変換やnull安全性に適しています)。runはthisを使用します(多くのメンバーを呼び出す場合に適しています)。
class Calculator(val a: Int, val b: Int) {
fun sum() = a + b
fun product() = a * b
}
fun main() {
val calc = Calculator(3, 4)
val s = calc.let { it.sum() } // simple
val combo = calc.run { "sum=${sum()} product=${product()}" } // multi-member
println("$s / $combo")
}実践的なパイプライン
実際のチェーンでは、複数のスコープ関数を組み合わせることがよくあります。
class Request(var url: String = "", var headers: Map<String, String> = emptyMap())
fun main() {
val response = Request()
.apply {
url = "https://api.example.com"
headers = mapOf("Accept" to "json")
}
.also { println("request: ${it.url}") }
.let { req -> "GET ${req.url}" }
println(response)
}チートシート
適切なツールを選ぶためのクイックリファレンスです。
// apply: this, returns receiver — configure object
// also: it, returns receiver — side effects in chain
// let: it, returns lambda result — transform / null-safety
// run: this, returns lambda result — multi-member compute
// with: this, returns lambda result — group operations on existing obj
fun main() { println("Scope functions: pick by receiver style + return value") }クイックチェック
thisをレシーバーとして受け取り、かつレシーバー自体を返すスコープ関数はどれですか?
振り返り
意図に応じてスコープ関数を選択します。apply(設定+自身を返す)、also(副作用+自身を返す)、let(itを使った変換)、run(thisを使った変換)、with(既存オブジェクトに対する操作のグループ化)です。レシーバーの参照方法と返り値という2つの軸によって、適切な選択が決まります。
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「適切なスコープ関数の選び方:判断ガイド」レッスンは無料ですか?
はい。「適切なスコープ関数の選び方:判断ガイド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「適切なスコープ関数の選び方:判断ガイド」で何を学びますか?
レシーバー、戻り値の型、意図に基づいて適切なスコープ関数を選択します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「適切なスコープ関数の選び方:判断ガイド」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- applyとwith:設定して返す
- letとrun:変換とスコープ
- also:レシーバーを変更せず副作用を実行する
- 適切なスコープ関数の選び方:判断ガイド