【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行の場合{}を省略できます。