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)のインスタンスに変わる |
定義する |
定義する |
2022年9月 | ||||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
  |   |   |   | 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 |   |
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち