2022年10月30日日曜日

スコープ

 

関数呼び出し元の参照
(thisは省略可能)
戻り値用途
applythis呼び出し元のインスタンスプロパティ設定
alsoit呼び出し元のインスタンスプロパティ設定
letitラムダの結果メソッドの実行 nullチェック
runthisラムダの結果メソッドの実行
withthisラムダの結果メソッドの実行

[Kotlin]スコープ関数 apply,also,let,run,withの使い分け https://pouhon.net/kotlin-sfunction/1392/

2022年10月3日月曜日

プロパティーの初期化

初期化タイミングを変数を初めて使用する時に初期化する

lateinit、by lazy

プリミティブ型には使用できない。

varで宣言する必要がある。

必ずnon-nullとなる。

class MainActivity : AppCompatActivity() {

private lateinit var textView: TextView

override fun onCreate(saveInstanceState: Bundle?) {

super.onCreate(saveInstanceState)

textView = findViewById(R.id.text_view) // ここで初めて初期化される

}

// …

}

varで宣言するので、再代入には注意すること。

by lazy

型の制限はない。

valで宣言する必要がある。

nullable / nun-nullどちらでも可能

対象のプロパティが初めて呼び出されたときに初期化される。

初期化されたら必ず同じ値を返す。

class MainActivity : AppCompatActivity() {

private val userData: User? by lazy { fetchUserData() }

override fun onCreate(saveInstanceState: Bundle?) {

super.onCreate(saveInstanceState)

userData?.let { showUserData(it) } // ここで初めて初期化される

}

// …

}

ビューをlazyで初期化した場合、変更を加えても反映されない。

プロパティーにnullが入る可能性がある場合はlazyを使う必要がある。

by lazyは初期化処理を記述する必要があるので、記述上各メソッドの処理はスッキリさせることができる。


Qiita 【Android】lateinitとby lazyの使い分け【Kotlin】 https://qiita.com/u-dai/items/a31c5c2a7d5c7ed2cc47