2017-11-04 8 views
1

最近私のAndroidプロジェクトのためにKotlinに移りましたが、Lambdaを理解するのに問題があります。 JavaファイルをKotlinファイルに変換すると、多くのラムダ式が見えます。Kotlin:ラムダ式を使用する時期と方法

ラムダ関数をいつどのように正確に使うべきですか?また、高次関数とラムダ関数/式の違いは何ですか?

特にAndroidとの関連での回答が参考になります。

+1

不要な入力を省くために便利です。 'someView.setOnClickListener(オブジェクト:View.OnClickListener { )のようなものを書く必要がなく、onClick(v:View?){ Log.v(" Foo "、" onclick ") } } 'someView.setOnClickListener {Log.v(" Foo "、" onclick ")}'あなたが気にするのは 'onClick'イベントだけです。 – Michael

+1

匿名の 'OnClickListener'オブジェクトはまだ作成されていますが、コンパイラがあなたのためにそれを行うことができるときに明示的にすべてを入力する必要はありません。 – Michael

答えて

4

ラムダ関数を正確に使用する時期と方法を教えてください。また、高次関数とラムダ 関数/式の違いは、 とは何ですか?

ラムダは無名関数です。名前を付けずに関数を書くことができます。

高次関数は結果として又は戻る一方(しばしばラムダとして渡された)引数として他の関数を取る関数です。

ラムダが実際にの場合はを使用する必要があります。既に見てきたように、高次関数がおそらく主な使用例です。 「何をすべきか」を別の関数に渡すための素晴らしい方法です。多くの標準関数がこれを使用しています。一つの簡単な例として、コレクションにforEachさ:Ankoライブラリは一つを含むようにもラムダを見つけるのに良い場所はDSLsある

listOf(1,2,3).forEach{ 
    //tell what to do with each element in this lambda 
} 

。これらのコンストラクトはまた、ラムダを大量に使用します。

+0

良い説明。 lamdasもパフォーマンスに影響しますか? –

+1

これはときどき可能ですが、ほとんどの場合は教えていただけません – s1m0nw1

+0

最後に、マイケルが言及したように、時間を節約し、不要なコードを書くことを避けるだけです。 –

関連する問題