ASSERT命令及びアサーションエラーの仕組みと使いどころを解説します。
ASSERT命令は、一言で言うとプログラム内で起きた想定外のエラー情報を "開発者" に知らせるための命令です。読者の中には「ASSERT 1 = 2.」のような奇妙なコードを見かけたことがある方もいらっしゃるかもしれません。
このページでは、ASSERT命令の仕組み(アサーションエラーとは?)と使いどころをサンプルコード付きで解説します。
ABAPerとして1つレベルアップしたい方は必見です。是非最後までご覧ください。
Assert Error(アサートエラー)とは?
あまり聞きなれない言葉かと思いますが、アサートエラーを分かりやすく言い換えると開発者にとって想定外のエラーとなります。
つまり、ASSERT命令は、テスト中に問題を特定する目的で使用されるべき命令であり、本番環境では通常使用すべきではありません。通常のエラー(例えばユーザによる入力ミスなど)であれば、IF文とMESSAGE命令を用いて適切なエラーハンドリングを行うべきです。
REPORT ZDEMO_ASSERT. DATA: lv_dividend TYPE i VALUE 10, lv_divisor TYPE i VALUE 0, lv_result TYPE f. * 0で割る前に、割る数が0でないことを確認 ASSERT lv_divisor <> 0. * 除算を実行 lv_result = lv_dividend / lv_divisor. WRITE: / 'Result:', lv_result.
この例では、ASSERT命令を使用して "lv_divisor" が0でないことを確認しています。もし "lv_divisor" が0の場合、ASSERT命令がランタイムエラーを発生させ、プログラムの実行が中断(プログラムがダンプします)されます。
ASSERT命令では比較演算子を用いるシーンが多いので、比較演算子って?という方は以下の記事をご覧ください。
ASSERT命令(ASSERT 1 = 2 .)
ASSERT命令を利用したコードでたまに見かける例がこちら。
CASE GV_VALUE. WHEN GP_1000. PERFORM Dynrpo_SET_1000. "Dynpro1000呼び出し WHEN GP_2000. PERFORM Dynrpo_SET_1000. "Dynpro2000呼び出し WHEN GP_3000. PERFORM Dynrpo_SET_3000. "Dynpro3000呼び出し WHEN OTHERS. ASSERT 1 = 2. "想定外のエラー ENDCASE.
「ASSERT 1 = 2. 」のように論理式が必ず偽(FALSE)となるように記述する例です。
変数「GV_VALUE」は、1000 / 2000 / 3000 のいずれかの値しか持たない想定のコード。この場合、1000 / 2000 / 3000 以外の値となった場合、アサートエラーを発生させることができます。
条件分岐の定義する命令です。オペランドに指定した変数の値に応じて、異なる処理を実行する場合に利用できる命令です。
詳細は、以下の記事で解説しております。
ASSERT命令利用時の注意点
冒頭でも記載した通り、ASSERT命令は他のABAP命令と比較すると少し異質な命令です。
あまり見かけることはないと思いますが、もしこのページを読んでASSERT命令を利用してみたい!という方は以下の注意点に気を付けましょう。
SAP / ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!