すくまりのメモ帳すくまりのメモ帳
← 記事一覧に戻る

【Unity, C#】超入門 ラムダ式の書き方、使い方

【Unity, C#】超入門 ラムダ式の書き方、使い方

はじめに

この記事ではUnityでラムダ式の書き方を紹介します。

通常の計算式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
 
public class Normal : MonoBehaviour {
 
	// Use this for initialization
	void Start () {
 
        Action();
 
        Action1(2);
 
        Action2(5, "を代入したよー");
 
        Debug.Log("func1 : 2 * 2 = " + Func1(2) + "だよー");
 
        Debug.Log("func2 : " + Func2(10));
        Debug.Log("func2 : " + Func2(0));
 
 
    }
 
    //----------------------
    //戻り値なし
    //--------------------
    void Action()
    {
        Debug.Log("action : 引数なしだよー");
 
    }
 
    void Action1(int num)
    {
        num = num * 2;
        Debug.Log("action1 : 2 * 2 = " + num + "だよー");
    }
 
    void Action2(int num, string text)
    {
        Debug.Log("action2 : " + num + text);
    }
 
    //----------------------
    //戻り値あり
    //--------------------
    int Func1(int num)
    {
        num = num * 2;
        return num;
    }
 
    string Func2(int num)
    {
        string text;
 
        if (num >= 5)
        {
            text = num + "は5以上の数字だよー";
        }
        else
        {
            text = num + "は5以下の数字だよー";
        }
        return text;
    }
 
}
 
実行結果

これは通常の計算方法です。

次にこれをラムダ式で表現してみます。

ラムダ式の場合

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
 
public class Lambda : MonoBehaviour {
 
	// Use this for initialization
	void Start () {
 
        //-----------------------------------
        //戻り値なしのときはActionを使う
        //----------------------------------
 
        //引数なし
        Action action = () => {
            Debug.Log("action : 引数なしだよー");
        };
        action();
 
 
        //引数1つ
        Action<int> action1 = (int num) => {
            num = num * 2;
            Debug.Log("action1 : 2 * 2 = " + num + "だよー");
        };
 
        action1(2);
 
 
        //異なる引数
        Action<int, string> action2 = (int num, string text) => {
            Debug.Log("action2 : " + num + text);
        };
 
        action2( 5,"を代入したよー");
 
 
 
        //---------------------------------
        //戻り値ありのときはFuncを使う
        //---------------------------------
 
        //intを代入してintを返す
        Func<int, int> func1 = (int num) => {
            num = num * 2;
            return num;
        };
        Debug.Log("func1 : 2 * 2 = " + func1(2) + "だよー");
 
 
        //intを代入してstringを返す
        Func<int, string> func2 = (int num) =>
        {
            string text;
            
            if(num >= 5)
            {
                text = num + "は5以上の数字だよー";
            }
            else
            {
                text = num + "は5以下の数字だよー";
            }
            return text;
        };
        Debug.Log("func2 : " + func2(10));
        Debug.Log("func2 : " + func2(0));
 
 
        //-------------------------------
        //ラムダ式の短縮系
        //--------------------------------
 
        //短縮前
        Action<int> shortAction = (int num) => { num = num * 2; };
 
        //↓(int num)はintへ省略可
 
        Action<int> shortAction = num => { num = num * 2; };
 
        //↓ 実行したいメソッドが一行なら{}も省略可能
 
        Action<int> shortAction = num =>  num = num * 2 ;
 
    }
 
 
}
 
 
 

ラムダ式の使い方

using UnityEngine;
using System;
public class Lambda : MonoBehaviour {
 
	// Use this for initialization
	void Start () {
 
        //戻り値なし
        Action<代入する型> action = (引数) => { 実行したいメソッド };
        action(引数);
 
        //戻り値あり
        Func<代入する型, 戻り値の型> func = (引数) => { 実行したいメソッド };
        var hoge = func(引数);
 
        }
 
}

ラムダ式を使用する際は、「using  System;」を追加します。

戻り値がない場合は Action、ある場合は Func を使い、 (引数) => { 実行したいメソッド }; のように使います。

ここからさらに短縮できます。

ラムダ式の短縮形

        //-------------------------------
        //ラムダ式の短縮系
        //--------------------------------
 
        //短縮前
        Action<int> shortAction = (int num) => { num = num * 2; };
 
        //↓(int num)はnumへ省略可
 
        Action<int> shortAction = num => { num = num * 2; };
 
        //↓ 実行したいメソッドが一行なら{}も省略可能
 
        Action<int> shortAction = num =>  num = num * 2 ;
 

引数が1つ場合()と型を省略することができます。引数が複数の場合、型のみ省略することができます。

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

忙しい人のためのUnity入門講座へ