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

素人のUnity覚書と奮闘記

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

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

コールバックとは

メソッドの完了を待って、或いはその戻り値を利用して次の処理に移りたい場合に、メソッドから「完了しました〜」ってお知らせしてもらう仕組みのこと
主に非同期の処理の時に使われることが多いらしい。
いや、非同期とか言われても・・・困惑w
ということで、非同期は一旦置いといて、デリゲートがどういう役割を担うのかを確認してみる。

デリゲートの役割

デリゲートは、メソッドを保持して実行することができるので、その機能を使って継手のような役割を担っている。
実際にはこんな使い方はしないと思うけど、例として、次のコードを挙げる。

//最初に実行するメソッド
void TriggerMethod(Action callback)
{
    Debug.Log("Trigger");
    callback();
}

//デリゲートが参照するメソッド
void Callback()
{
    Debug.Log("Callback");
}

void Start()
{
    //最初のメソッドを実行
    TriggerMethod(Callback);
}

出力結果

Trigger
Callback

注目点は、TriggerMethodの引数にデリゲートが使われていること。
こうやってデリゲートを使うと引数としてメソッド渡すことができる。 この例ではCallbackに戻り値がないのでActionを使っているけど、戻り値がある場合はFuncになる。

Callbackの戻り値boolを受け取って結果をコンソールに出すコード。

//最初に実行するメソッド
void TriggerMethod(Func<bool> callback)
{
    Debug.Log("Trigger");
    var flag = callback();
    Debug.Log(flag);
}

//デリゲートが参照するメソッド
bool Callback()
{
    Debug.Log("Callback");
    return true;
}

void Start()
{
    //最初のメソッドを実行
    TriggerMethod(Callback);
}

出力結果

Trigger
Callback
True

こんな感じで、Funcを使うと戻り値を取得することもできる。
ただし、Callbackが外部へリクエストを送信するメソッドだったりする場合、戻り値は実行結果を待ってから取得したい。
そして、読み込みメソッドのような時間のかかる処理の場合は、大抵が非同期だったりする。
いや、だから非同期って何よw
ということで、次は非同期について調べてみると言いたいところだけど、例題がラムダ式で書かれていることが多いので、その前にラムダ式をメモしようと思う。

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

関連記事

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