Kotlin Academy · レッスン

適切な関数の選び方

それぞれの使いどきを学びます

レッスン 4/413 ステップ

「適切な関数の選び方」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

スコープ関数の選び方

5つのスコープ関数から適切なものを選ぶときは、次の2つの質問に答えます。

  • オブジェクトをどのように参照するか:thisかitか
  • 何を返すか:ラムダの結果かオブジェクトか

判断表

全体像は次のとおりです。

  • letはitを使い、ラムダの結果を返します。
  • runはthisを使い、ラムダの結果を返します。
  • withはthis(引数)を使い、ラムダの結果を返します。
  • applyはthisを使い、オブジェクトを返します。
  • alsoはitを使い、オブジェクトを返します。

null安全性にはletを使う

null許容値があり、値が存在する場合にのみ処理したいときは、セーフコールとletを使います。

fun main() {
    val name: String? = "Ada"
    name?.let { println("Hello $it") }
}

thisと結果にはrunを使う

thisでメンバーにアクセスしながら結果を計算したい場合は、runを使います。

fun main() {
    val text = "scope"
    val info = text.run { "$this has length $length" }
    println(info)
}

グループ化にはwithを使う

nullでないオブジェクトに対して複数の操作を行いたい場合は、withを使うと自然に記述できます。

fun main() {
    val list = listOf(1, 2, 3)
    with(list) {
        println(sum())
        println(size)
    }
}

設定にはapplyを使う

オブジェクトを作成して複数のプロパティを設定する必要がある場合は、applyによってコードをすっきり記述し、オブジェクトを返せます。

data class Server(var host: String = "", var port: Int = 0)

fun main() {
    val server = Server().apply {
        host = "0.0.0.0"
        port = 80
    }
    println(server)
}

副作用にはalsoを使う

オブジェクトを変更せずにログ出力、デバッグ、検証を行いたい場合は、itを使うalsoを選びます。

fun main() {
    val nums = listOf(1, 2, 3)
        .also { println("Got ${it.size} items") }
    println(nums.sum())
}

スコープ関数を組み合わせる

実際のコードでは、スコープ関数をチェーンすることがよくあります。applyで設定し、alsoでログを出力し、letで変換します。

data class User(var name: String = "", var score: Int = 0)

fun main() {
    val label = User()
        .apply { name = "Max"; score = 90 }
        .also { println("Created $it") }
        .let { "${it.name}: ${it.score}" }
    println(label)
}

使いすぎを避ける

スコープ関数をネストしたり使いすぎたりすると、読みやすさが損なわれることがあります。通常の変数と明示的なコードのほうが分かりやすい場合は、そちらを使います。スコープ関数は、賢さを演出するためではなく、本当に重複をなくせる場合に使いましょう。

ネストによる落とし穴

スコープ関数をネストすると、itとthisが曖昧になります。ネストが必要な場合は、パラメーターの名前を変更して分かりやすくします。

fun main() {
    val outer = "A"
    outer.let { o ->
        "B".let { i ->
            println("$o then $i")
        }
    }
}

簡単なメンタルモデル

次のように覚えておきましょう。オブジェクトを返す関数(apply、also)はパイプラインを構築し、結果を返す関数(let、run、with)は値を変換します。読みやすさに応じて、itとthisを使い分けます。

確認問題

新しく作成したオブジェクトを設定し、そのオブジェクトを返すには、どのスコープ関数を使うべきですか。

復習

これで、参照方法(thisとit)と戻り値(オブジェクトと結果)に基づいて選ぶ判断基準が身につきました。letとrunは変換、withはグループ化、applyは設定、alsoは副作用の追加に使います。コードのノイズを減らすために使い、増やさないようにしましょう。

無料で開始

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. letとrun
  2. applyとalso
  3. with
  4. 適切な関数の選び方
← Kotlin Academyに戻る