SetUserError関数の働き・役割
SetUserError関数は、ユーザーが任意にエラー番号を設定するために使用されます。
この関数を使用すると、事前に定義された変数である _LastErrorに、指定されたエラー番号に基づく値を設定できます。特に、ERR_USER_ERROR_FIRST という基本となるエラー番号に、ユーザーが指定したエラー番号(user_error)を加算した値がセットされるのが特徴です。
この関数を使用することで、独自のエラーハンドリングやデバッグを実装する際に、任意のエラー番号を定義し、エキスパートログを通じて確認することが可能です。例えば、エラーが発生した場所や種類に応じて異なるエラー番号を設定し、後続の処理でそのエラー番号を参照することができます。
SetUserError関数の引数について
void SetUserError(
ushort user_error, // エラー番号
);
SetUserError関数には1つの引数があります。この引数を使って、設定するエラー番号を指定します。
引数構成:
1. user_error
- 種類: ushort(符号なし短整数型)
- 説明: ユーザーが設定するエラー番号です。
ERR_USER_ERROR_FIRSTという定義済みのエラー番号に、この user_error で指定した数値が加算され、最終的なエラーコードが作成されます。例えば、user_error に 1 を設定した場合、_LastErrorには ERR_USER_ERROR_FIRSTに 1 を足した値がセットされます。
例:
SetUserError関数で 1 を設定した場合、エラー番号 65537(ERR_USER_ERROR_FIRST + 1)が設定されます。
SetUserError関数の戻り値について
SetUserError関数には戻り値はありません。この関数を呼び出すと、指定されたエラー番号が設定されるだけで、関数自体は値を返しません。
SetUserError関数を使う際の注意点
SetUserError関数を使用してエラーを設定した後は、GetLastError関数でそのエラー番号を取得できますが、エラー番号が上書きされる可能性があるため、他の関数呼び出しを行う前に速やかに確認する必要があります。エラー番号が保持されるのは、次のエラーが発生するまでの間です。
また、エラー番号の範囲に注意する必要があります。user_errorに指定できる値は、ushort型(符号なし短整数型)の範囲内でなければなりません。この範囲を超える値を設定しようとすると、予期しない動作が発生する可能性があります。
SetUserError関数を使ったサンプルコード
// スクリプトが開始された際に実行される関数
void OnStart()
{
// ユーザー定義エラー番号 1 を指定してエラーを設定します。
// ERR_USER_ERROR_FIRST は 65536 で、これに 1 を足したエラー番号 65537 が設定されます。
SetUserError(1);
// GetLastError関数を使用して、最後に発生したエラー番号を取得します。
// ここでは、65537 が取得されるはずです(ERR_USER_ERROR_FIRST + 1)。
int lastError = GetLastError();
// エキスパートログにエラー番号を出力します。
// Print関数を使用して、"GetLastError = 65537" のような出力をします。
Print("GetLastError = ", lastError);
}
サンプルコードの説明
- OnStart関数は、スクリプトが開始されたときに自動的に呼び出される関数です。
- SetUserError関数で、ユーザー定義エラー番号を 1 に設定します。これにより、65536 に 1 を加えたエラー番号 65537 が設定されます。
- GetLastError関数を使って、最後に発生したエラー番号を取得します。この例では、65537 が返されます。
- Print関数を使って、エキスパートログに指定された文字列や数値を出力します。この例では、”GetLastError = 65537″ という形式で出力されます。
このコードを実行することで、ユーザーが定義したエラー番号が正しく設定され、エラーコードをエキスパートログで確認できることがわかります。
SetUserError関数を使ってEAを作る際のアイディア
SetUserError関数は、エキスパートアドバイザー(EA)で独自のエラーハンドリングを実装する際に便利です。以下に、EA作成時のアイディアをいくつか挙げます。
- 複雑なロジックでのエラー管理
EAが複数のロジックやアルゴリズムを実行する場合、特定の条件でエラーが発生したときに独自のエラー番号を割り当て、どの部分で問題が生じたかを把握できます。例えば、発注に失敗した場合にはエラー番号1を、リクエストの処理中にタイムアウトが発生した場合にはエラー番号2を設定するなど、詳細なエラートラッキングが可能です。 - エラーごとのリトライ処理
特定のエラー番号を設定した後、そのエラー番号に応じたリトライ処理を実装できます。例えば、接続が不安定で注文処理に失敗した場合は、エラー番号を設定し、一定回数リトライするロジックを追加することができます。 - エキスパートログでのデバッグ支援
EAが異常終了した際や、期待通りの結果が得られなかった際に、SetUserError関数を使用して特定のエラー番号をログに残すことで、後から原因を特定しやすくなります。エキスパートログを通じて、エラーの発生場所や状況をより詳細に記録できるため、デバッグ作業が効率的に進みます。 - ユーザー定義エラーの通知機能
SetUserError関数で設定したエラー番号を使って、特定のエラーが発生したときにアラートやメールで通知する機能を実装することも可能です。例えば、重要なエラー番号が設定されたときに、ユーザーに即座に知らせる仕組みを作ることができます。
これらのアイディアを活用することで、EAの動作をより信頼性の高いものにし、エラー発生時の対応もスムーズに行えるようになります。