DX・デジタルトランスフォーメーション

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版

ブロックチェーン・暗号技術 | android | iOS | Web | アプリの著作権 | 日本のなりたち | 禅・大乗仏教 | 新しい社会

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で操作する際に用いる関数

recieverVar?.let { it != nil } ?: run { receiver == nil }

変わらない (Activity)

recieverVar

lambdaの最後の式の評価結果

<即時関数>

run

lambdaを即時実行するための関数

recieverVar ?: run { this == this@Activity }

変わらない (Activity)

なし

lambdaの最後の式の評価結果

<委任関数>

by lazy

Activity生成後の初回アクセス時に実行タイミングをずらして、lambdaでproperty変数を初期化するための関数

val recieverVar by lazy { }

変わらない (Activity)

なし

lambdaの最後の式の評価結果

<レシーバインスタンスのpropertyを設定>

apply

スコープ(コンテクスト)をレシーバインスタンスに変えて、lambdaでレシーバインスタンスのSetterを実行しやすく、また見やすくするための関数

val recieverVar = RecieverClass().apply { this == recieverVar }

レシーバインスタンス(RecieverClass())に変わる

なし

レシーバインスタンス

also

レシーバ(クラスインスタンス)の生成直後にpropertyを設定するような手続きを実行する

recieverVar.also { }

変わらない (Activity)

recieverVar

lambdaの最後の式の評価結果

with

レシーバ(クラスインスタンス)の生成直後にpropertyを設定するような手続きを実行する

with(recieverVar) { }

変わらない (Activity)

なし

lambdaの最後の式の評価結果

<拡張関数>

拡張関数(extension)

JavaのUtilityクラスメソッドで定義していたメソッドはKotlin拡張関数として定義する


fun Context.popUp(message:String, duration:Int = Toast.LENGTH_SHORT) = Toast.makeText(this, message, duration).show()
// this == Context

fun Context.popUp(resourceId:Int, duration:Int = Toast.LENGTH_SHORT) {
   // this == Context
   Toast.makeText(this, resourceId, duration).show()
}

*Javaからはクラスメソッドとして、 {FileName}Kt.methodName(receiver, args...) でアクセスする。

レシーバクラス(Context)のインスタンスに変わる

定義する

定義する

2023年12月
     12
3456789
10111213141516
17181920212223
24252627282930
31      
android
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
デジタルトランスフォーメーションで新しい生活を提案!