ロバメモ - 素人のUnity覚書と奮闘記

素人のUnity覚書と奮闘記

デリゲート,コールバック,ラムダ式,非同期とやらを調べてみた②ActionとFunc

前記事:デリゲート,コールバック,ラムダ式,非同期とやらを調べてみた①Delegate - ロバメモ - 素人のUnity覚書と奮闘記

ActionとかFuncってなに?

delegateを定義する手間が省ける便利グッズと勝手に解釈してみた。
前記事でも触れたけど、delegateの定義はメソッドの外じゃないとエラーでるのよ。でも、メソッドの中で使いたいのよ。ってなことで、定義しなくても使えるようにしてよ!という願いを叶えてくれる奴ら。

名前空間の呼び出し

Action, Funcを使う際にはSystemを呼び出しておく。
csファイルの先頭部分に書いてるアレ。

using System;

Action

例として、コンソールにHelloと表示するメソッド:Methodを参照するactionを作成して実行するコードを挙げる。

//参照したいメソッド
void Method()
{
    Debug.Log("Hello");
}

void Start(){
    //定義&インスタンス生成
    Action action = Method;

    //実行
    action();
}

出力結果

Hello

delegateを定義して書くのに比べると少し簡素化されてますね〜♪
書式

Action インスタンス名 = 参照したいメソッド名;

参照したいメソッドに引数がある場合

//参照したいメソッド
void Method(string str)
{
    Debug.Log(str);
}

void Start(){
        Action<string> action = Method;
        action("Hello");
}

こんな感じで書く。

Action<引数の型> インスタンス名 = 参照したいメソッド名;
インスタンス名(引数の値);

ActionとFuncの違い

では、戻り値がある場合、Actionはどうかくの?
そういう時は、ActionではなくFuncを使うらしい。
つまり、ActionとFuncの違いは、戻り値の有(=Func)無(=Action)だそうな。

Func:戻り値がある場合

//参照したいメソッド
int Method()
{
    return 100;
}

void Start(){
        //定義&インスタンス生成
        Func<int> func = Method;

        //実行 戻り値を受け取ってコンソールに表示 結果 : 100
        Debug.Log(func());
}

Func : 戻り値と引数がある場合

//参照したいメソッド
int Method2(string s)
{
    return s.Length;
}

void Start(){
        //定義&インスタンス生成
        Func<string, int> func = Method;

        //実行 戻り値を受け取ってコンソールに表示 結果 : 5
        Debug.Log(func("Hello"));
}

戻り値と引数が両方あるので引数, 戻り値の順で設定する。

Func<引数の型, 戻り値の型> インスタンス名 = 参照したいメソッド;

以上

次の記事:デリゲート,コールバック,ラムダ式,非同期とやらを調べてみた③コールバック - ロバメモ - 素人のUnity覚書と奮闘記

関連記事

Delegate
ActionとFunc
コールバック
ラムダ式
非同期