この記事はUnreal Engine (UE) - Qiita Advent Calendar 2025 - Qiitaシリーズ 4の20日目の記事となります。
環境
- Unreal Engine 5.3.2
- Rider 2025.2.3
概要
ON_SCOPE_EXITはスコープを抜けるときに必ず実行したい処理をラムダで簡潔に書ける便利マクロです。
利用例としては以下のケースが考えられます。
・早期returnが多い関数での失敗時処理の一元化
・リソース解放や状態復元の漏れ防止
ファイルクローズ、ロック解放、フラグ復元、一時的に変更した内部状態のロールバック等
・成功時のみキャンセルする形でのガード的なケース
具体的な利用例
例としてActorからHTTP Requestを投げてCallbackを受け取った際の処理を考えます。
・途中で失敗する可能性が複数ある
・失敗時には必ずDelegateを呼びたい
・成功した場合のみDelegate呼び出しを抑制したい
という、早期returnが増えがちなケースです。
gist.github.com
ON_SCOPE_EXITを使用した場合
以下はON_SCOPE_EXITを使った実装例です。
関数冒頭で失敗時に呼びたい処理を登録しています。
処理が最後まで正常に進んだ場合のみ失敗時の処理をキャンセルする構造になっています。
gist.github.com
このように書くことで、エラー時の早期return箇所が複数あっても
必ずDelegateが呼ばれることが保証される構造になっています。
ON_SCOPE_EXITを使用しない場合
実際にはこんなコードを書くことはまずありえないですが
早期returnが正義という思想で無理やり書いたコードになります。
gist.github.com
このように処理に失敗して早期returnを行いたいが
その時に登録したDelegateも実行したいという場合にON_SCOPE_EXITを使うとスッキリ出来ます。