今更ラムダ式について雑に説明してみる


はじめに

初めて記事書くので間違ってたり誤字ってたら教えてください。

今回は、今更ラムダ式について解説してみようと思います。タイトルまんまですね。

そもそもラムダ式って?

ラムダ式というのは超絶ざっくりいうと、簡単にメソッドを記述できるすげー奴です。

なんかよくわからんがとりあえず使おう

なんかこれだけじゃよくわかりませんね。まぁとりあえず使ってみます。

LamdaTest.cs
using System;
using UnityEngine;

public class LamdaTest : MonoBehaviour {
    // デリゲート型を定義
    delegate void Hoge(string x);

    private void Start() { 
        // デリゲート型の変数を宣言して匿名関数を代入
        Hoge hoge = (x => Debug.Log(x));
        //hogeに代入された関数を実行
        hoge("Hello World!!");
    }
}

はい、またしても意味がわかりませんがここからは細かく解説してきます。

delegate void Hoge(string x);
まずこの部分がわからない方は、今回は知ってる程で行くのでこことか見るなりして調べてくみてださい。

気を取り直して解説します。
デリゲートの登録は

private void Start() {
    Hoge hoge = Piyo;
}

void Piyo(string x) {
    Debug.Log(x);
}

のように関数を登録しますが、
毎回これだけのために関数定義するの面倒くさいです。すごく

なので、名前とか付けないでそこでしか使わない関数書きたいです。
そんな時に

private void Start() {
    Hoge hoge = (引数 => 処理);
}

的な感じで名前とか付けないで引数と処理だけ書けるようにしたのがラムダ式です。
(引数 => 処理)のところはかっこ無くても構いません。


((引数) => {
    処理
    処理
})

みたいにも書けます。割と自由



このラムダ式の凄いところ、それは引数を

Action<int> action = (x => //処理);

のように型を省略できるところです。
varってありますよねあれみたいに引数を推測してくれます。なかなか慣れないかもしれませんが、慣れるとストレスフリーに気持ちよく書けるようになります。

なんかもうざっくり言うと

using System;
using UnityEngine;

public class LamdaTest : MonoBehaviour {
    delegate void Hoge(string x); //デリゲートHogeは引数にstringを持つ、これ絶対
    private void Start() {

        Hoge hoge = x => Debug.Log(x);//これがラムダ式
                  //引数 => 処理の流れがあれば基本動く
                  //Hogeは絶対に引数にstringとるからラムダ式での引数も勝手にstringになる
                //   これだけ覚えとけばなんとかなる
        hoge("Hello World!!");
    }
}

これだけ覚えとけばなんとかなります。長い処理なら{}で囲んだり、複数ある引数を()で囲んでおくなりして見やすく書くと吉

こんなかんじですかね。

感想?

タイトル通りめっちゃ雑な説明になっちゃいましたが、初めてのアウトプットができたので個人的には満足です。
書き終えても未だに間違ってる気がして仕方ないので間違ってたら教えてください。本当にお願いします。