はじめに
この記事はHamster Output Advent Calendar 2024の9日目の記事です!
本記事では、やっとラムダ式を使いだしました!というだけの内容です!!
ラムダ式に関して調べた
ラムダ式は無名関数を書くことができる機能!
ソースコードにすると下のような感じです。どこかで見たことあると思ったけど、思い出してみるとDOTweenとかUniRxとかを使っている時に、いっぱい処理書きたい!見たいな時に何となくやっていたような...
// () ← これは引き数を書く場所
() =>
{
// ここに何か処理を書く
};
実際にソースコードにして見るとこんな感じ。書き方が不思議だけど、何となく使い方は分かった気がする。
public class Test : MonoBehaviour
{
private Action logAction;
void Start()
{
logAction = () =>
{
Debug.Log("Hello, World!");
Debug.Log("Goodbye, World!");
};
logAction();
}
}
処理が1行だけならさらにコンパクトに書けます。
public class Test : MonoBehaviour
{
private Action logAction;
void Start()
{
logAction = () => Debug.Log("Hello, World!");
logAction();
}
}
Linqを使う場合、ラムダ式で記述する前提になっているらしく、ラムダ式を触る場合、一緒に勉強しても良さそうです。(今度やろうかな)
実際に使った
今作っているゲームで、VContainerの依存解決が終わったら完了通知を送るRegisterBuildCallback辺りで使ってます。VContainer周りの使い方が正しいか正しくないかはさておき、現状では登録したクラスの初期化処理を行う用途で使っていますが、これから使う場面は結構増えるかも知れないです。
public class InputDetectionLifetimeScope : LifetimeScope
{
protected override void Configure(IContainerBuilder builder)
{
builder.Register<InputDetectionModel>(Lifetime.Singleton);
builder.RegisterComponent(GetComponent<PlayerInput>());
builder.RegisterComponent(GetComponent<InputDetectionView>());
var presenter = GetComponent<InputDetectionPresenter>();
builder.RegisterComponent(presenter);
// 登録が完了したら初期化処理を呼び出す
builder.RegisterBuildCallback(container => presenter.Initialize());
}
}
まとめ
ラムダ式は無名関数を作れる便利機能。メソッドを変に作らなくても良くなるし、ソースコードがスッキリする。便利な分、書き方が少し特殊で、慣れていない内は戸惑いそう。
もっと詳細な内容はまた今度調べます!