[解決済み] Kotlinで'by'キーワードは何をするのですか?
質問
アンドロイドの開発をしていると、時々このようなものに出くわすことがあります。
var someModel: someViewModel by notNullAndObservable { vm ->
...
}
の意味がよくわからない。
by
というキーワードがあります。
どのように解決するのですか?
で
Kotlin リファレンス
には、2つの使い方があります。
by
1つ目は
委譲されたプロパティ
ということで、上記のような使い方をしています。
一般的なプロパティには、必要なたびに手動で実装することもできますが、一度だけ実装してライブラリ化できれば非常に良いものがあります。例えば、lazyプロパティ:最初のアクセスの時だけ値が計算される。 observableプロパティ:このプロパティの変更についてリスナーに通知されます。 プロパティを個別のフィールドではなく、マップに格納する。
ここでは、ゲッター/セッターを、作業を行う別のクラスに委譲し、共通のコードを含むことができます。 他の例として、Kotlinの依存性注入器のいくつかは、依存性注入エンジンが管理するインスタンスのレジストリから値を受け取るためにゲッターを委譲することによって、このモデルをサポートしています。
そして インターフェース/クラスの委譲 がもう一つの使用法です。
Delegationパターンは実装継承の良い代替案であることが証明されており、Kotlinはそれをネイティブでサポートしているので、定型的なコードは一切必要ない。DerivedクラスはBaseインターフェイスを継承し、そのパブリックメソッドを全て指定したオブジェクトに委譲することができる。
ここでは、インターフェイスを別の実装に委譲することで、実装クラスは変更したい部分のみをオーバーライドすればよく、残りのメソッドはより完全な実装に委譲することができます。
実際の例としては Klutter Readonly/Immutable コレクション ここでは、特定のコレクションインターフェイスを別のクラスに委譲し、読み込み専用の実装で異なる必要があるものをオーバーライドするだけです。 他のすべてのメソッドを手動でデリゲートする必要がなく、多くの作業を節約できます。
この2つをカバーするのが Kotlin言語リファレンス 言語の基本的なトピックについては、そこから始めてください。
関連
-
[解決済み] 残念ながらMyAppは停止してしまいました。どうすればよいですか?
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] Kotlinのvarとvalの違いは何ですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】Kotlinのreifiedキーワードはどのように機能するのですか?
-
[解決済み】Kotlinでデータクラスを拡張する
-
[解決済み】Kotlin : パブリック get プライベート set var
-
[解決済み] Kotlinのfoldとreduceの違い、いつどちらを使うか?
-
[解決済み] の警告を表示します。クラスパスのKotlinランタイムJARファイルは同じバージョンでなければならない
-
[解決済み] MutableLiveData。コルーチンからバックグラウンドスレッドでsetValueを実行できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kotlinは「値渡し」なのか「参照渡し」なのか?
-
[解決済み] Kotlinの'let'キーワードの目的は何ですか [重複]。
-
[解決済み】Kotlinでコレクションを複数フィールドでソートする【重複あり
-
[解決済み】Kotlin : パブリック get プライベート set var
-
[解決済み] Kotlinでログを取るための慣用的な方法
-
[解決済み] Kotlinのトライウィズリソース
-
[解決済み] Kotlinで'by'キーワードは何をするのですか?
-
[解決済み] '変数'が変更可能なプロパティであるため、'型'へのスマートキャストは不可能である。
-
[解決済み] Kotlinでrun、let、apply、also、withを使うべき例
-
[解決済み] Kotlinでリソースからテキストファイルを読み込むには?