Kotlinにプリ定義されているスコープ関数(let run apply by lazy also with 拡張関数)はいったい何が異なるのか
Kotlinのスコープ関数は、let、run、by lazy、applyの4つを理解しておく必要がある。
・let
nullable変数をlambdaで操作する際に用いる関数
・run
lambdaを即時実行するための関数
・by lazy
Activity生成後に実行タイミングをずらして、lambdaでproperty変数を初期化するための関数
・apply
スコープ(コンテクスト)をレシーバインスタンスに変えて、lambdaでレシーバインスタンスのSetterを実行しやすく、また見やすくするための関数
Kotlinスコープ関数一覧
スコープ関数名 | 何に使うか | 使用例 | this (コンテクスト) | it(lambda引数) | 戻り値 |
---|---|---|---|---|---|
<レシーバpropertyを設定したり変更したりすること以外の手続きを実行する> | |||||
let | nullable変数をlambdaで操作する際に用いる関数 |
| 変わらない (Activity) | recieverVar | lambdaの最後の式の評価結果 |
<即時関数> | |||||
run | lambdaを即時実行するための関数 |
| 変わらない (Activity) | なし | lambdaの最後の式の評価結果 |
<委任関数> | |||||
by lazy | Activity生成後の初回アクセス時に実行タイミングをずらして、lambdaでproperty変数を初期化するための関数 |
| 変わらない (Activity) | なし | lambdaの最後の式の評価結果 |
<レシーバインスタンスのpropertyを設定> | |||||
apply | スコープ(コンテクスト)をレシーバインスタンスに変えて、lambdaでレシーバインスタンスのSetterを実行しやすく、また見やすくするための関数 |
| レシーバインスタンス(RecieverClass())に変わる | なし | レシーバインスタンス |
also | レシーバ(クラスインスタンス)の生成直後にpropertyを設定するような手続きを実行する | recieverVar.also { } | 変わらない (Activity) | recieverVar | lambdaの最後の式の評価結果 |
with | レシーバ(クラスインスタンス)の生成直後にpropertyを設定するような手続きを実行する | with(recieverVar) { } | 変わらない (Activity) | なし | lambdaの最後の式の評価結果 |
<拡張関数> | |||||
拡張関数(extension) | JavaのUtilityクラスメソッドで定義していたメソッドはKotlin拡張関数として定義する |
*Javaからはクラスメソッドとして、 {FileName}Kt.methodName(receiver, args...) でアクセスする。 | レシーバクラス(Context)のインスタンスに変わる | 定義する | 定義する |
2023年12月 | ||||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
  |   |   |   |   | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |   |   |   |   |   |   |
iOS
web
?スA?スv?ス?ス?スフ抵ソス?ス??
?スu?ス?ス?スb?スN?ス`?スF?ス[?ス?ス?ス^?ステ搾ソス?スZ?スp
?スV?ス?ス?ス?ス?スミ会ソス
?スT?スE?ス?ス謨ァ?ス?ス
?ス?ス?ス{?スフなりた?ス?ス