新規記事の投稿を行うことで、非表示にすることが可能です。
2020年02月10日
【ABAP】CLEAR命令
このページでは、データオブジェクト(変数・構造・内部テーブル)の初期化を行うCLEAR命令について解説します。
CLEAR命令以外の、初期化に関する命令であるREFRESH命令やFREE命令についても本ページで解説を加えておりますので、是非最後までご覧ください。
目次
1 構文ルール:CLEAR命令
1.1 CLEAR命令の処理内容
1.2 WITHオプション
2 REFRESH命令/FREE命令
2.1 REFRESH命令
2.2 FREE命令
3 基本はCLEAR命令を利用する
1 構文ルール:CLEAR命令
1.1 CLEAR命令の処理内容
1.2 WITHオプション
2 REFRESH命令/FREE命令
2.1 REFRESH命令
2.2 FREE命令
3 基本はCLEAR命令を利用する
1 構文ルール:CLEAR命令
CLEAR (データオブジェクト).
CLEAR命令は、指定したデータオブジェクトを初期化します。
1.1 CLEAR命令の処理内容
CLEAR命令は、指定したデータオブジェクトが変数であろうが、構造であろうが内部テーブルであろうが関係なく、データオブジェクトの内容を初期化します。
初期化というのは、簡単に言えばブランク化するということです。
対象のデータオブジェクトにVALUEオプションで "開始値" を与えていたとしても、関係ありません。
CLEAR命令では必ず対象のデータオブジェクトをブランクにする点に注意しましょう。
内部テーブルを指定した場合は、全ての行がクリアされ同時にメモリも開放されます。
1.2 WITHオプション
これはあまり知られていませんが、CLEAR命令には初期値を指定するWITHオプションが存在します。
CLEAR (データオブジェクト) WITH(初期値).
(初期値)の部分には、変数を指定することができます。
指定したデータオブジェクトに、(初期値)の値が設定されます。
2 REFRESH命令/FREE命令
CLEAR命令と似た命令に「REFRESH命令」「FREE」命令があります。
この章では、CLEAR命令と比較してREFRESH命令とFREE命令がどのような役割を果たすかを確認したいと思います。
まず結論から整理すると、3つの命令は、簡単に言うと以下のような違いがあります。
CLEAR命令 ⇒ 変数・構造・内部テーブルの初期化
REFRESH命令 ⇒ 内部テーブルの初期化
FREE命令 ⇒ 変数・構造・内部テーブルの初期化
REFRESH命令 ⇒ 内部テーブルの初期化
FREE命令 ⇒ 変数・構造・内部テーブルの初期化
なので、基本的にはCLEAR命令だけ覚えておけば初期化に関する処理はOKなのですが、古いソースコードではREFRESH命令やFREE命令が出てくる場合があります。
2.1 REFRESH命令
REFRESH命令は、内部テーブルを初期化する際に利用します。
基本的には、CLEAR命令と全く同じ働きをする命令です。
ただし、変数・構造には使えないという差異があります。
CLEAR命令と異なるのは「ヘッダー付き内部テーブル」に対する処理です。
ヘッダー付き内部テーブルというのは、内部テーブル+構造(作業エリア)が合体したテーブルです。
REFRESH命令では、このヘッダー付き内部テーブルの「内部テーブル」部分を初期化するのに対して、CLEAR命令では「構造(作業エリア)」部分を初期化します。
ただし、今はヘッダー付き内部テーブルは使わない方針となっているため、両者の区別は必ずしも必須の知識ではありません。
2.2 FREE命令
FREE命令は、変数・構造・内部テーブルの初期化を行います。
変数・構造に対してはCLEAR命令と同じ処理を行います。
内部テーブルに対しては、REFRESH命令と同じ処理になります。
ただし、FREE命令はCLEARとREFRESHと異なり、初期化と同時に「メモリの開放」を行います。
メモリの開放―。
すなわち、データオブジェクトを宣言したタイミングで割り当てられていた「プログラムの作業領域を削除する」ということです。
つまり、FREE命令を利用すると、宣言した「変数」「構造」「内部テーブル」の宣言を取り消す処理が行われるということです。
したがって、そのプログラム内でそれ以上そのデータオブジェクトを利用しない場合に用いるのがFREE命令といえます。
ただし、この命令はあまり利用しないはずです。
というのも、「変数」や「構造」「内部テーブル」が占有するメモリ領域は雀の涙である場合がほとんどであるためです。
3 基本はCLEAR命令を利用する
一昔前のABAPでは、CLEAR命令とREFRESH命令の違いを明確に意識する必要がありましたが今はヘッダー付き内部テーブルを用いないため、その差異を意識する必要がなくなりました。
そのため、データオブジェクトの初期化を行いたい場合は、基本CLEAR命令を利用するように心がけるようにしましょう。
タグ:ABAP