スコープ関数 (Kotlin)

読み:すこーぷかすう
外語:scope functions 英語
品詞:名詞

Kotlinにおいて、引数にとる関数のスコープを変更するための関数。

目次

C/C++の場合、関数内で {} で囲めばそれがスコープになる。スコープ内で定義した変数は、スコープ外に波及しない。

Kotlinの場合、C/C++と違ってプログラム中で唐突に {} で囲ってスコープにすることはできない。同様のことをしたい場合は、たとえ返却値が不要な場合であってもその部分をスコープ関数にする必要がある。

目的

結果を変数に代入してそれを使い回すよりも、結果を例えばスコープ関数letを用いit等で参照する方が、{}で影響範囲が明確になるという利点がある。

影響範囲を明確化することは、意図しない箇所での誤った参照、代入や書き換えといったバグを避けることもなり、開発効率ならびに後からソースを見た時の見やすさ向上にも大きく寄与する。

種類

Kotlin 1.0で4種類、Kotlin 1.1からalsoが追加され5種類となっている。

使い方は自由であるが、その主たる目的で大きく2種類に分けられ、スコープ内で対象オブジェクトがどう設定されるかでも2種類に分けられる。

  • プロパティの設定
    • apply ‐ 元をthisで参照し、戻り値は呼び出し元のインスタンス
    • also ‐ 元をitで参照し、戻り値は呼び出し元のインスタンス。ラムダ式として記載でき、名前が付けられる
  • メソッドの実行
    • run ‐ 元をthisで参照し、戻り値は呼び出し元の任意の型
    • with ‐ 元をthisで参照し、戻り値は呼び出し元の任意の型
    • let ‐ 元をitで参照し、戻り値は呼び出し元の任意の型。ラムダ式として記載でき、名前が付けられる

使い分け

スコープ関数の戻り値を使う場合は、元のインスタンスか任意の型かで選択することになる。

また、元のオブジェクトをthisで参照するかitで参照するかも都合に合わせて選択できる。

元の参照がthisになるものを使う場合、thisは省略可能であるが、スコープの内外でthisの意味が変わってしまうことに注意が必要である。

元の参照がitになるものを使う場合、itは省略できないが、スコープの内外でthisの意味が変わらないという利点がある。

ラムダ式

元の参照がitになるタイプのスコープ関数(alsoおよびlet)は、{} 内にラムダ式を記述することで、itに別名を与えることができる。

たとえば obj?.let { hoge -> ...} のように書くことで、it の代わりの変数名を指定することができる(この例の場合はhoge)。

関連する用語
Kotlin

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club