PR

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

ABAP

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

別の言語でいうところの「関数」です。

サブルーチンをうまく利用することで、ABAPのプログラム全体が読みやすく構造化され、結果としてシステム全体の品質が向上します。このページではABAP初心者向けにサブルーチンの定義方法・利用方法をサンプルコード付きでわかりやすく解説します。

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

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

スポンサーリンク

サブルーチンとは?

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

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

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

別のいい方をすると、ABAPはプログラムを複数の部品に分割することができるのですが、これらの部品のことを「サブルーチン」と呼んでいる、ということです。

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

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

サブルーチンの利用シーン
  • 同じ処理を複数回実行する場合
  • プログラムをわかりやすくするために複雑な処理をサブルーチンとして分割したい場合
構造化・モジュール化

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

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

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

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

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

ABAP,サブルーチン
汎用モジュールとは?

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

サブルーチンも「事前に定義しておき、プログラムの中で何度も利用できる」という点では全く同一ですが、汎用モジュールは「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から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました