そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】これでラムダ式への耐性アップ!ラムダ式の記述方法まとめ

はい!今回は勉強した過程を書いていきます!
ラムダ式の存在は知っていましたが、読み方がなにもわからない"まる"です。

サンプルコードが読めないと処理が把握できないので、
重い腰を上げて勉強することにしました。
STEPを踏んで勉強の過程を残していきます。

ラムダ式とは

ざっくりいうと"要点だけ書いた関数の書き方"と理解しています。

ラムダ式書き方

まずusing Systemを追加する。

using System;

・引数無し 戻り値無しの関数の場合

Action型の変数に関数を入れてその変数に括弧()をつけて実行する。

Action aaa  = () => { 実行したい処理 }; 
aaa();


・引数有り 戻り値無しの関数の場合

Action型の変数に関数を入れてその変数に括弧()をつけて実行する。
引数の型はActionの直後に<>で記述する。

Action<引数の型> aaa  = (引数の型 引数の変数) => { 実行したい処理}; 
aaa(引数);


・引数無し 戻り値有りの関数の場合

Func型の変数に関数を入れてその変数に括弧()をつけて実行する。
Funcの直後に<>をつけてその中に戻り値の型を記述する。

Func<戻り値の型> aaa  = () => { return○○ }; 
Debug.Log(aaa());//戻り値をもっているので好きな変数に入れたりする


・引数有り 戻り値有りの関数の場合

Func型の変数に関数を入れてその変数に括弧()をつけて実行する。
Funcの直後に<>をつけてその中に引数の型、戻り値の型の順で記述する。

Func<引数の型,戻り値の型> aaa  = (引数の型 引数の変数) => 
{
 実行したい処理
 return○○ 
}; 
Debug.Log(aaa(引数の値));//戻り値をもっているので好きな変数に入れたりする

注)
引数が複数の場合、戻り値の型の記入は最後に記述する。
<第一引数の型,第二引数の型,・・・・・・,戻り値の型>

(ラムダ式を使ううえで、先にデリゲートの考え方を覚えた方がいいようです。)

ポイント

戻り値が無い場合はAction
戻り値が有る場合はFunc
を使うことだけ覚えておく。

サンプルコード

サンプル1 引数無し 戻り値無し 関数

・ 通常の関数の書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ramudatest : MonoBehaviour
{    
    void Start()
    {
        aaa();
    }

    private void aaa()
    {
        Debug.Log("通常 引数無し 戻り値無し 関数");
    }      
}


ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{    
    void Start()
    {
        Action aaa = () =>{Debug.Log("ラムダ式 引数無し 戻り値無し 関数");};
        aaa();        
    }
}

サンプル2 引数有り 戻り値無し 関数

・通常の関数の書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ramudatest : MonoBehaviour
{
    void Start()
    {       
        Test1(5);
    }

    private void Test1(int number)
    {
        Debug.Log(number*2);
    }
}


ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Action<int> aaa = (int number) => { Debug.Log(number*2);};
        aaa(5);
    }
}

サンプル3 引数無し 戻り値有り 関数

・通常の関数の書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Debug.Log(Test1());
    }

    private int Test1()
    {
        return 1;
    }
}


ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Func<int> aaa = () => { return 1; };
        
        Debug.Log(aaa());//返り値確認
    }
}

サンプル4 引数有り 戻り値有り 関数

・通常の関数の書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Debug.Log(Test1(6));
    }

    private int Test1(int number)
    {
        number = number * 3;
        return number;
    }
}

ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Func<int, int> aaa = (int number) =>
        {
            number = number * 3;
            return number;
        };

        Debug.Log(aaa(6));//戻り値をもっているので好きな変数に入れたりする
    }
}

省略した書き方

次の条件の時に一部を省略して書くことができます。
・引数が1つの場合()と型を省略できる。
・メソッド部分が1行の場合{}を省略できる。

実際にこちらのコードを省略してみます。

Action<int> aaa = (int number) => { Debug.Log(number * 2);};


・引数が1つの場合()と型を省略できる

Action<int> aaa=number=> { Debug.Log(number * 2);};


・メソッド部分が1行の場合{}を省略できる。

Action<int> aaa=number=>Debug.Log(number * 2);



また、引数が複数の場合、型のみ省略することができます。
・引数2つの基本コード

Action<int,float> aaa = (int number,float kazu) => { Debug.Log(number*kazu*2);};

・型のみ省略

Action<int, float> aaa = (number,kazu) => { Debug.Log(number * kazu * 2);};


・さらに、メソッド部分が1行なので{}を省略。

Action<int, float> aaa = (number,kazu) =>Debug.Log(number * kazu * 2);

おわりに

戻り値が無い場合はAction
戻り値が有る場合はFunc
を使うことだけ覚えておく。

有効な使い方はまだ見えていませんが、
ある程度ラムダ式のコードに心の耐性がついた気がします!
実際コードを読む場面では、省略されて書かれていることがほとんどなので、
省略のところは要チェックですね。

参考

squmarigames.com