【入門編】理解必須のABAP構文ルール9個(文法)

ABAP

このページでは、これからABAPを勉強しようとしている初心者の方向けにコーディング時の基本ルールを網羅的に整理して解説しています。

特に最初のうちは、このページの内容を知らないと何も始まりません。

初期に躓くのは、大体構文エラーが原因だったりします。

このページで学べる内容
  • ABAPの基本構文ルール
  • コメント/コメントアウトの仕方
  • チェーン命令とは何か?
  • ABAPをコーディングする際の注意点!

SAPエンジニアを目指す方であれば避けて通れない理解必須の基本知識です。特に最初のうちほど躓きがちなポイントとなるので、是非最後までご覧ください。

スポンサーリンク

ABAP構文 9個のルール

ABAP構文ルール
  • ① 命令は半角英字
  • ② 個々の単語は半角スペースで区切る
  • ③ 文は "ABAPキーワード" で始め "ピリオド" で終わる
  • ④ 大文字と小文字は区別されない
  • ⑤ チェーン命令を利用することで同一の命令をまとめて記述することができる
  • ⑥ コメントアウトしたい場合は「*」を行頭に記述する
  • ⑦ 行の途中からコメントアウトしたい場合” " ”(ダブルコーテーション)を記述する
  • ⑧ 複数の命令が一連となる場合はキーワード毎にピリオドを付ける
  • ⑨ 基本は「コピペ」で記述する!!が吉

それぞれ具体的に解説します。

① 命令文は半角英字

OK) SET CURSOR FIELD 'S_VKORG'.
NG) SET CURSOR FIELD 'S_VKORG'.


命令文は半角英字で書きます。全角は許容されません。後述するコメント文以外は基本半角でコーディングします。

例えば、命令と命令の間に全角スペースなどが入っていることも許容されません。

命令文にかかわらず半角でのコーディングが基本。これは、ABAPに限らずプログラミング言語に共通している原則ですので、これを機会に改めて意識しておきましょう。

「命令" "は未定義です。スペルをチェックしてください」

というエラーメッセージは全角スペースが入っていることが原因である場合に出力されます。

※数字や記号も全て半角で記述します。コメントアウト(コード中に記載するメモ)した箇所については対象外です。

② 個々の単語は半角スペースで区切る

OK) TYPES ty_dec2 TYPE p DECIMALS 2.
NG) TYPESty_dec2TYPEpDECIMALS 2.


個々の単語は半角スペースで区切ります。改行でも同様の扱いとなるのでOK。末尾のピリオドの前にブランクを入れる必要はありません。

* OK
TYPES ty_dec2 TYPE p DECIMALS 2.
TYPES  ty_dec2  TYPE  p  DECIMALS 2 .

* NG
TYPESty_dec2 TYPEpDECIMALS2.

③ 文は "ABAPキーワード" で始め "ピリオド" で終わる

OK)MESSAGE S005(ZAMCM01).
NGMESSAGE S005(ZAMCM01)


ピリオドを打つことで、1つの文が区切られます。

初心者の方はこのピリオドが抜けて構文エラーで苦しみます。構文エラーが出たら、ちゃんとピリオドを打ったかどうか確認しましょう。

④ 大文字と小文字は区別されない

例1) TYPES ty_dec2 TYPE p DECIMALS 2.
例2) 
types ty_dec2 type p decimals 2.


上記2例はどちらも同じ命令とみなされます。その上で、基本はABAPキーワードは大文字で書かれることが多数派です。

現場によっては全て大文字で書かれている場合もあります。

システム的に大文字・小文字の制約がないので、下手をすれば開発者によって全てバラバラになってしまう可能性もあります。

通常は各現場単位で、構文規則(どのように変数に名称をつけるか)が決まっているので、大文字・小文字の区別はそちらに従うのが鉄則です。

⑤ チェーン命令を利用することで同一の命令をまとめて記述することができる

例)チェーン命令を使わないで書いた場合

  DATA GW_SCREEN1 TYPE  IT_TBL001.
  DATA GW_SCREEN2 TYPE IT_TBL002.

例)チェーン命令で書いた場合
  DATA:
  GW_SCREEN1
TYPE  IT_TBL001,
  GW_SCREEN2
TYPE  IT_TBL002.


チェーン命令を記述する場合、ABAPキーワードの後に””を記述。命令が一つ終わるごとに、” ,”を記述します。チェーン命令も最後は、ルール③の通り必ずピリオドを記述します。

チェーン命令を用いることでコード全体がすっきり見やすくなります。

⑥ コメントアウトしたい場合は「*」を行頭に記述する

例)
*----------------------------------------------------------------------*
*DATA DEFINITION

*----------------------------------------------------------------------


ソースコードの中に説明文を載せたい場合などにコメントアウトを使います。コメントが適切に用いられているソースコードは可読性が格段に向上します。

コメントアウトを行う際には、””を行頭に記述します。「行頭」というのがポイントで、スペースを入れた後に"*"を入れても意味がありません。(構文エラーになってしまいます。)

"*"をつけない場合、それらもコードの一部としてみなされてしまい、結果として構文エラーとなってしまいます。

コメントアウトの主な利用目的としては「履歴」や「処理内容の説明」などで用います。もともとあったコードを改修する場合、元のコードをコメントアウトしてコード上に残しておくといった使い方があります。あまり使いすぎると、ただの見づらいコードになるだけですので注意が必要です。

なんでこれが改修になったのか?この変数は何に使われるか?を説明するためにコメントアウトを使うことが多いです。

※ショートカットキー「Ctrl+<

⑦ 行の途中からコメントアウトしたい場合” " ”(ダブルコーテーション)を記述する

DATA:
  GW_SCREEN
TYPE IT_TBL001, "選択画面構造
  GIT_YKS002
TYPE YKS002.


IF sy-subrc = 0.
・・・
  ELSE.
・・・   #EC 処理対象外
ENDIF.


上記赤字部分の通り、行の途中からコメントアウトする場合は必ず、ダブルコーテーション、もしくは「#EC」を記述します。

/#ECを記述した行の後のスペースはすべてコメントとして扱われるようになります。

コメントアウトの注意点

コメントアウトをする場合でも、プログラム実行時に完全に無視されるわけではありません。

そのため、特殊文字やSAPが認識しない文字を使っていると、予期せぬエラーが発生する場合があります。

⑧ 複数の命令が一連となる場合(「IF~ENDIF」 など)はキーワード毎にピリオドを付ける

例)
IF sy-subrc = 0.
・・・
  ELSE.
・・・
ENDIF.


複数の命令が一連(条件分岐とループ)となる場合、上記のようにキーワードごとにピリオドを付ける必要があります。

条件分岐構文(IF文/CASE文)については以下の記事で詳しく解説しておりますので、詳しく知りたい方は合わせてご覧ください。

⑨ 基本は「コピペ」で記述する!!

以上8ルールを見てきましたが、基本はコピペでコーディングしていくことをおすすめします。

実際、熟練ABAPerでも一度も構文チェックに引っかからないことはほぼありません。コードを書くとき、すごい速さでキーボードを打っていく姿はかっこいいですが、どこかしらで何かを間違えるのが常。

したがって、コードは「コピペ」!で書くようにしましょう。

プログラミングを実際に書くときは、ロジックの整理に時間を使うべきであって、初歩的な構文チェックなんかに時間を費やすべきではありません。そのためにも、今あるコードを適切に切り貼り・一部修正するという流れでコーディングしていくことが大切です。

上記、ABAPの構文ルールを理解しつつ、実務ではできるだけコピペで作業していくように心がけましょう。

ABAPを1から学習したい方は

以下のページでは、ABAPでプログラミングをしていくうえで、必要な知識を1つのページにまとめて解説しています。

ABAPの変数宣言や基本的なデータ型から、汎用モジュールやサブルーチンといった内容まで幅広く解説をしておりますので、是非ご覧ください。

タイトルとURLをコピーしました