Devsway

日々の記録とか記憶とか。


わからん。。


聞き慣れない言葉ばかりだもの・・・


高階関数とは?


難しくありません。

要はふつーの関数じゃなくて

変数に入れ込んだりして関数オブジェクトとして定義すること、及び使うことです。

無名関数とかもそう。

これに対応しているプログラミング言語のみこういう書き方ができます。

もちろんJavaScriptは対応しています。


const 高階関数=function(){
    console.log('高階関数だよ!');
}

console.log(高階関数());

英語だとHigher-Orderなので

すごい要求にも答える関数と勝手に訳します。


ラムダ式とは?


無名関数の記述方法の一つ・・・らしい。

要は関数リテラル。。。?

わかった。

すぐ使う関数として記述する場合、省略できる・・・記述方法です。

無名関数みたいなもんです。


無名関数との違いは?


ラムダ式のほうが無名関数よりもさらに少ない記述で書くことができます。

しかし戻り型を定義することができません。

(ラムダは必ず型推論により戻り値が定義される。)

戻り値を明示的に定義したい場合は無名関数を利用します。


// ラムダ
// ラムダ式
    val sum = { x: Int, y: Int -> x + y }
    println(sum(1, 3))

//無名関数
    val sums = fun(y: Int, x: Int): Int {
        return x + y;
    }
    println(sum(1, 3))

SAMとは?


正式にはSAM Conversions(SAM変換)です。


SAMはなんの略?


single abstract methodの略です。

単一の抽象メソッド。


あーわかった。


インスタンス時、

もし同じインターフェイス(型)の関数リテラルがあった場合、明示的に「コレ(抽象インターフェイス)をoverrideして実装」としなくても、

コレを自動的に判別してくれる、、、っていうシュガーシンタックスみたいなもんなんだ。


…たぶん。


違う


SAMはJavaのクラスを扱うときのみ変換を良しなにする・・・機能です。

なのでシュガーシンタックスではないね・・・。


Kotlinで作成したクラス・それのインスタンス時にはSAM変換は使えません!!

ご注意ください!


まとめ


「ラムダ式わかる?」

って言われたら

「ああ〜あの無名関数的なやつですよね?」

って言えばよさそう(個人の感想です。)



参考


ここわかりやすかったです。

https://code.tutsplus.com/tutorials/quick-tip-write-cleaner-code-with-kotlin-sam-conversions–cms-29304


参考


https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/lambdas.html




カテゴリー

オレオレIT用語辞典