[解決済み] Kotlinの'let'キーワードの目的は何ですか [重複]。
質問
の有無にかかわらず、コードを書くことができます。
let
を以下のように設定します。
var str = "Hello World"
str.let { println("$it!!") }
または
var str = "Hello World"
println("$str!!")
の実際の使い方は?
let
?その方がメモリ効率が良いのか、可読性が高いのか?
どのように解決するのですか?
let
はKotlinの
スコープ
この関数を使うと、あるオブジェクトのコンテキスト内でコードブロックを実行することができます。この場合、コンテキストオブジェクトは
str
. その数は5つ。
let
,
run
,
with
,
apply
および
also
. これらの用途は、初期化、マッピングなど多岐にわたりますが、それだけにとどまりません。
これらはすべて非常によく似ていますが、コンテキストオブジェクトの参照方法と返される値が異なります。の場合は
let
コンテキストオブジェクトは
it
キーワードとは対照的に
this
キーワードを使用します。戻り値は、ラムダコードブロックから返されたものである。他のスコープ関数である
apply
は代わりにコンテキストオブジェクトを返します。
なぜなら
let
はラムダブロックが評価されたものを返すので、何らかのマッピングを行うのに適しています。
var upperStr = str.let { it.toUpperCase()}
適用 の方が、より適切な機能です。
どちらのコードがより好ましいかという質問に対しては、スコープ関数を何のために使うのかによります。上の例では
let
. IntelliJ を使用している場合、この呼び出しを行うと警告が表示されます。
let
は冗長です。ここでの読みやすさは好みの問題であり、好ましいかもしれません。
は
let
関数は、Object に対して null セーフな操作を行いたい場合に便利です。
safe call
演算子
?.
これを行う場合
let
のコードブロックは、オブジェクトがヌルでない場合にのみ実行されます。let を使うもう一つの理由は、操作のために新しい変数を導入する必要があるけれども、それを let ブロックのスコープ内に限定したい場合です。これはすべてのスコープ関数に言えることなので、繰り返し言いますが
let
は、マッピング操作に使うのが最適です。
編集
let
関数は追加コストを発生させないはずです。通常、我々はラムダ/コードブロックがコンパイルされる際に
Function
オブジェクトの場合ですが、これは
inline
関数の場合、コンパイラはあなたが示した2番目のコード例と同じようなコードを出力します。例えば
ドキュメント
をご覧ください。
関連
-
[解決済み] 残念ながらMyAppは停止してしまいました。どうすればよいですか?
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] Kotlinのvarとvalの違いは何ですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】Kotlinのreifiedキーワードはどのように機能するのですか?
-
[解決済み】Kotlinのダブルバング(!)演算子とは?
-
[解決済み] KotlinでBuilderパターンを実装するには?
-
[解決済み] Kotlinの複数変数let
-
[解決済み] Kotlinのトライウィズリソース
-
[解決済み] Kotlinのfoldとreduceの違い、いつどちらを使うか?
最新
-
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は「値渡し」なのか「参照渡し」なのか?
-
[解決済み] lateinit "変数が初期化されたかどうかを確認する方法は?
-
[解決済み】Kotlinでコレクションを複数フィールドでソートする【重複あり
-
[解決済み】「不適切なブロッキングメソッドの呼び出し」を適切にする方法は?
-
[解決済み] Kotlinのfoldとreduceの違い、いつどちらを使うか?
-
[解決済み] Kotlinでrun、let、apply、also、withを使うべき例
-
[解決済み] の警告を表示します。クラスパスのKotlinランタイムJARファイルは同じバージョンでなければならない
-
[解決済み] Kotlinでリソースからテキストファイルを読み込むには?
-
[解決済み] MutableLiveData。コルーチンからバックグラウンドスレッドでsetValueを実行できない
-
[解決済み] KotlinのArrayList<String>()とmutableListOf<String>()の相違点