【ABAP】サブルーチン―PERFORM命令(FORM~ENDFORM)を3分で解説

ABAP

ABAPプログラミングの超基本知識「サブルーチン(PERFORM文)」について説明していきます。簡単に説明すると、「サブルーチン」は繰り返し利用される機能のまとまりです。

3分ぐらいで理解できるように端的に解説します。

このページで学べる内容
  • サブルーチンとは?
    • サブルーチンと汎用モジュールの違い
  • サブルーチンの定義方法
  • サブルーチンの呼び出し
    • USING / CHANGING の違い

ABAPerであれば知らないと恥ずかしい超基本知識です。是非最後までご覧ください。

スポンサーリンク

サブルーチンとは?

サブルーチンとは、繰り返し利用可能なプログラムの部品です。他のプログラミング言語を学んだ方はいわゆる "関数" だと理解してOK。

1つのプログラムの中で、繰り返し利用する機能をあらかじめ作成しておいて、使いたくなったらその都度呼び出して使うのがサブルーチンです。

blank
【イメージ図】サブルーチン

例えば、”データを登録する” というロジックAをサブルーチンとしてあらかじめ作成しておきます。このとき、プログラムの途中で "データを登録する" という処理が必要になったら、このサブルーチンを呼び出して利用するようなイメージ。

一度作成すれば、何度も再利用可能となりプログラミングの手間も省けるのと、コード全体がすっきりすため、できるだけサブルーチンを利用する形でプログラミングしていくのができるABAPerの定石です。

構造化・モジュール化

コードが長文化・複雑化してしまうことを避けるために、ある程度の処理単位ごとにコードを別切りで作成することを、プログラムの構造化(モジュール化)と言います。

以下の記事では、プログラミング言語全般に共通するモジュール化のメリットを解説しておりますのでこの機会に合わせてご覧になってみてください。

サブルーチンと汎用モジュールの違い

別のページでも解説しますが、汎用モジュールもサブルーチンと同様の考え方です。プログラムの部品を予め作成しておいて、必要に応じて繰り返し利用するという点で両者は同一です。

ただし、サブルーチンはそのプログラムの中でのみの利用であるのに対して、汎用モジュールはどのプログラムからも利用可能です。

サブルーチンは定義したプログラム内でのみ動作する
汎用モジュールとは?

汎用モジュールも再利用可能なプログラムの部品です。「部品」ですので、事前にロジックを実装しておき、後から汎用モジュールを「呼び出す」形で利用します。

サブルーチンも「事前に定義しておき、プログラムの中で何度も利用できる」という点では全く同一ですが、汎用モジュールは「SAP内のどのプログラムでも利用可能」という点でサブルーチンと異なります。

ここからは、サブルーチンを利用する際の構文ルールについて確認していきたいと思います。

サブルーチンの利用方法

サブルーチンは「定義」と「実行」から成り立ちます。サブルーチンを利用するにはまずサブルーチンの定義を行っておく必要があります。

サブルーチンの定義:FORM~ENDFORM

サブルーチンは、上記で説明した通り繰り返し利用する機能を「あらかじめ定義」する必要があります。以下は定義時のコーディングを説明します。

構文ルール:FORM~ENDFORM

構文ルール

FORM (サブルーチン名)
 USING
  ・・・TYPE・・・
 CHANGING
  ・・・TYPE・・・

(実際のロジックはここに記述する)

ENDFORM.


FORMで始まりENDFORMで記述を終えます。ピリオドは、ENDFORMの最後に打ちますが、それ以外では打ちません。

FORM keisanki
         USING
           p1 TYPE p
           p2 TYPE p
         CHANGING
           w_tashizan  TYPE p.

    w_tashizan  =  p1 +  p2.

ENDFORM.

USING / CHANGINGは、そのサブルーチン内で利用するデータを定義です。ここの構文はDATA命令の構文構成とほぼ変わりませんので、構文としては難しくはありません。

USING / CHANGINGの違い

USINGとCHANGINGの区別が、サブルーチンを理解するうえで最も大切です。 USING(使う)とCHANGING(変える)という名称に騙されやすいのですが、実際は以下の区別が最も適切です。

  • USING    ⇒ インプットデータ
  • CHANGING ⇒ インプットデータかつアウトプットデータ

USINGは、サブルーチン内でのみ利用されるデータオブジェクトです。そのため、サブルーチンを動かす際のインプットデータにしかなりません。一方で、CHANGINGはサブルーチン内外で利用可能なデータオブジェクトになります。

  • USING    ⇒ サブルーチン実行前後で値が変わらない
  • CHANGING ⇒  サブルーチン実行前後で値が変わりうる

したがって、条件次第でどちらか一方だけ(USINGだけ・CHANGINGだけ)をパラメータとして設定する場合もあります。

そのうえで先ほどのサブルーチンのサンプルコードを見てみましょう。

FORM keisanki
         USING
           p1 TYPE p
           p2 TYPE p
         CHANGING
           w_tashizan  TYPE p.

    w_tashizan  =  p1 +  p2.

ENDFORM.

簡単な足し算のサブルーチンです。インプットの値を入れると、足し算の答えを返すロジックが組み込まれているのが分かるかと思いますが、サブルーチン中で不変の変数「p1」と「p2」はUSINGオプションに、可変の変数「w_tashizan」をCHANGINGオプションに指定しています。

サブルーチンの実行:PERFORM

サブルーチンの定義は以上。ここからは、サブルーチンを実際に利用する方法を学んでみましょう。

構文ルール:PERFORM

構文ルール

PERFORM(サブルーチン名)
 USING
  (インプットデータ)
 CHANGING
  (アウトプットデータ).


サブルーチンを利用する際はPERFORM命令を利用します。PERFORMでは、実際にサブルーチンで利用する値をUSINGとCHANGINGに指定します。

先ほどの例で定義したサブルーチンを動かすコード例を見てみましょう。

int1 = 2.
int2 = 3.

PERFORM keisanki
  USING
         int1
         int2
  CHANGING
    kotae_tashizan

”keisanki” というサブルーチンは「インプットデータ2つを加算しアウトプットを出力する」ロジックを組み込んでいました。(以下再掲)

FORM keisanki
         USING
           p1 TYPE p
           p2 TYPE p
         CHANGING
           w_tashizan  TYPE p.

    w_tashizan  =  p1 +  p2.

ENDFORM.

PERFORM命令では、FORMで定義したUSINGとCHANGINGに渡す値を同じく USINGとCHANGINGで指定します。USINGとCHANGINGで定義したデータが複数ある場合は、定義した順番に上から値が渡される仕組みです。

上記例では、"int1" "int2" の中身に2と3が入っているので、サブルーチンを動かした後 "kotae_tashizan" に入っている値は5ということになります。

サブルーチン:応用編

先ほどのサブルーチンを動かしたあと、再度同様のサブルーチンを動かした場合はどうなるでしょうか?

先ほどの例の続きに以下のコードを書き足した場合を考えてみましょう。

*****************
****値を格納*****
*****************

int1 = 2.
int2 = 3.

****************************
****計算ロジック呼び出し1****
****************************

PERFORM keisanki
  USING
         int1
         int2
  CHANGING
    kotae_tashizan

****************************
****計算ロジック呼び出し2****
****************************

PERFORM keisanki
  USING
         kotae_tashizan
         int1
  CHANGING
    kotae_tashizan_2

************************
****サブルーチン定義*****
************************

FORM keisanki
         USING
           p1 TYPE p
           p2 TYPE p
         CHANGING
           w_tashizan  TYPE p.

    w_tashizan  =  p1 +  p2.

ENDFORM.

このコードを読む鍵は「USINGとCHANGING」についての理解です。

変数「kotae_tashizan_2」に入っている数字は「7」です。答えが「7」にならなかった方は、再度ページ上部から読み直してみてください。

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

SAP / ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

是非、一度ご覧になってみてください。

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