スマートフォンアプリ作成

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

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)のインスタンスに変わる

定義する

定義する

2018年11月
    123
45678910
11121314151617
18192021222324
252627282930 
android
iOS
アプリの著作権
ブロックチェーン/暗号技術
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
スマートフォンアプリ作成