[Kotlin]高次関数とRamda式について
! 3週間のアプリケーション面白さが終わった後、低級アプリケーションを実現しましたが、コードが乱れすぎて可読性も悪く、修正が必要な部分が多かったです.コードを再包装してきれいにするためには、コトリンをさらに理解する必要があると思い、勉強しました.
高次関数とRamda式を理解するには1次関数を理解する必要がある.そこで筆者は複数のブログやサイトを調べ,CodeCharというところで詳しく説明し,参考として学習した.codechacha
一級関数とは,オブジェクトとして扱う関数であり,3つの特徴を持つ.
一級関数は、関数のオブジェクトとして使用できます.
一級関数は、関数オブジェクトをパラメータとして渡すことができます.
一級関数は、関数の戻り値であってもよい.
この3つの特性をコードで理解しましょう.
上記でまとめた1次関数の特徴を熟知している場合は、高次関数の内容を簡単に理解できます.
1次関数の3つの特徴のうち、上記の2つの特徴のいずれかを満たす場合、高次関数と呼ぶ.
ここで、パラメータとして関数を渡す場合は、()->String、パラメータとして2つの関数を渡す場合は()->Stringなどの関数のタイプを名前の後に明記する必要があります.
(Int,Int)->String.他に戻り値がない場合は、->の後にUnitで表すことができます.
高次関数は、コールバックインタフェースを使用する場合と同様に、コンポーネント間の通信に役立ちます.この車でファンデーションを直すときに使ったほうがいい(?)
「cottlindocument」を参照
このramda式により匿名クラスと匿名関数を簡潔に表すことができ,非常に有用である.ただし,デバッグが困難でコードを乱発すると,かえってコードの毒性が低下するため,注意して使用する.
ここで、{a,b−>a.length
ラムダ式はいつも括弧で囲まれている.
->記号の後は関数のbody部分です.
->関数に渡すパラメータを前に入力します.
コトリンの規則によれば,関数の最後のパラメータが関数である場合,そのパラメータに伝達されるRamda式を括弧の外に置くことができる.上のコード
まずここまで勉強しなさい.
1.第1クラスの関数
高次関数とRamda式を理解するには1次関数を理解する必要がある.そこで筆者は複数のブログやサイトを調べ,CodeCharというところで詳しく説明し,参考として学習した.codechacha
一級関数とは,オブジェクトとして扱う関数であり,3つの特徴を持つ.
一級関数は、関数のオブジェクトとして使用できます.
一級関数は、関数オブジェクトをパラメータとして渡すことができます.
一級関数は、関数の戻り値であってもよい.
①一級関数は、関数の対象とすることができる。
val hi: () -> String = {"hi my friend"}
上記のコードでは、変数hiに関数を割り当て、「hi myfried」を返します.②一級関数は、関数オブジェクトをパラメータとして渡すことができます。
val hi: () -> String = {"hi my friend"}
fun printHi(func: () -> String){
print("${func()}")
}
fun main(){
printHi(hi)
}
ここでprintHiの場合、文字列をパラメータに返す関数を受け取り、実際にStringを返すhiをprintHiのパラメータに渡すと、「hi myfriend」が出力されます.③一級関数は、関数の戻り値とすることができる。
val hi: () -> String = {"hi my friend"}
fun printHi() : () -> String {
return hi
}
fun main(){
val returned : () -> String = printHi()
print("${returned()}")
}
printHi関数の場合、hiという関数が返され、文字列が返されます.この関数を受信し、返される関数オブジェクトを作成して呼び出すと、hi myfriendが出力されます.2.高次関数
上記でまとめた1次関数の特徴を熟知している場合は、高次関数の内容を簡単に理解できます.
-1次関数は、関数オブジェクトをパラメータとして渡すことができます。
-一級関数は、関数の戻り値とすることができます。
1次関数の3つの特徴のうち、上記の2つの特徴のいずれかを満たす場合、高次関数と呼ぶ.
val hi: () -> String = {"hi my friend"}
fun printHi(func: () -> String) : () -> String {
return hi
}
fun main(){
val returned = printHi(hi)
print("${returned()}")
}
上記のコードでは、printHiという名前の関数がパラメータとして受け入れられ、結果として関数が返されます.ここで、パラメータとして関数を渡す場合は、()->String、パラメータとして2つの関数を渡す場合は()->Stringなどの関数のタイプを名前の後に明記する必要があります.
(Int,Int)->String.他に戻り値がない場合は、->の後にUnitで表すことができます.
高次関数は、コールバックインタフェースを使用する場合と同様に、コンポーネント間の通信に役立ちます.この車でファンデーションを直すときに使ったほうがいい(?)
3.ランダ式
「cottlindocument」を参照
Ramda式は,無名関数を定義するための関数表現である.
このramda式により匿名クラスと匿名関数を簡潔に表すことができ,非常に有用である.ただし,デバッグが困難でコードを乱発すると,かえってコードの毒性が低下するため,注意して使用する.
max(strings, {a, b -> a.length < b.length})
上のコードは高次関数です.関数が2番目のパラメータに渡されるからです.ここで、{a,b−>a.length
fun compare(a: String, b: String) : Boolean {
return a.length < b.length
}
この2つのコードにより、compareという関数をカッコ内のコードに置き換え、名前のない関数として表すことができます.ラムダ式文法
val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }
ラムダ式はいつも括弧で囲まれている.
->記号の後は関数のbody部分です.
->関数に渡すパラメータを前に入力します.
後続ランダ転送
コトリンの規則によれば,関数の最後のパラメータが関数である場合,そのパラメータに伝達されるRamda式を括弧の外に置くことができる.上のコード
max(Strings, {a,b -> a.length < b.length})
次のように表示できます.max(strings) {a,b -> a.length < b.length}
また、ラムダ式にパラメータがある場合は、パラメータ->パラメータをスキップしてitとマークする必要はありません.まずここまで勉強しなさい.
Reference
この問題について([Kotlin]高次関数とRamda式について), 我々は、より多くの情報をここで見つけました https://velog.io/@ho-taek/Kotlin-고차함수와-람다-표현식에-대해서テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol