0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ABAPクラスでメソッドチェーンを使う方法

Posted at

1. はじめに

ABAPでもJavaやJavaScriptのように「メソッドチェーン(method chaining)」が使えることをご存じですか?
メソッドチェーンを使うと、次のようにメソッドをつないで呼び出す”ことができ、コードがとても読みやすくなります。

lo_person->set_name( 'Tanaka' 
        )->set_age( 28 
        )->set_city( 'Tokyo' 
        )->display( ).

このように書くと、設定の流れが一目でわかる可読性の高いコードになります。

2. クラス定義例

CLASS zcl_person DEFINITION PUBLIC CREATE PUBLIC.

  PUBLIC SECTION.
    METHODS:
      "名前を設定
      set_name
        IMPORTING iv_name TYPE string
        RETURNING VALUE(ro_self) TYPE REF TO zcl_person,

      "年齢を設定
      set_age
        IMPORTING iv_age TYPE i
        RETURNING VALUE(ro_self) TYPE REF TO zcl_person,

      "出身地を設定
      set_city
        IMPORTING iv_city TYPE string
        RETURNING VALUE(ro_self) TYPE REF TO zcl_person,

      "出力
      display.

  PRIVATE SECTION.
    DATA:
      mv_name TYPE string,
      mv_age  TYPE i,
      mv_city TYPE string.

ENDCLASS.

3. クラス実装例

CLASS zcl_person IMPLEMENTATION.

  METHOD set_name.
    mv_name = iv_name.
    "自分自身を返す
    ro_self = me.
  ENDMETHOD.

  METHOD set_age.
    mv_age = iv_age.
    "自分自身を返す
    ro_self = me.
  ENDMETHOD.

  METHOD set_city.
    mv_city = iv_city.
    "自分自身を返す
    ro_self = me.
  ENDMETHOD.

  METHOD display.
    WRITE: / |Name: { mv_name }|,
           / |Age : { mv_age }|,
           / |City: { mv_city }|.
  ENDMETHOD.

ENDCLASS.

4. 呼び出し例

"インスタンス化
DATA(lo_person) = NEW zcl_person( ).

"メソッドチェーン
lo_person->set_name( 'Tanaka' 
        )->set_age( 28 
        )->set_city( 'Tokyo' 
        )->display( ).

5. ポイント解説

項目 説明
RETURNING VALUE(ro_self) メソッドの戻り値に「自分自身のインスタンス」を返す
ro_self = me 現在のオブジェクトを返してチェーンを続ける
チェーン対象メソッド 戻り値が「同じクラスの参照」である必要がある
最後のメソッド チェーンを終了させるため、RETURNING は不要でもOK

6.使う場面の具体例

メソッドチェーンは「設定をまとめて流れるように記述したいとき」に特に役立ちます。
ABAPの開発では、ビルダー系クラスやHTTPリクエスト作成処理、RAPのエンティティ登録処理などでよく使われます。

例えば、外部APIを呼び出すクラスを設計する場合は下記のようなイメージになります。

lo_http_client->set_url( lv_url 
             )->set_header( iv_string = 'Content-Type' iv_value = 'application/json' 
             )->set_body( lv_json 
             )->execute( ).

7.まとめ

メソッドチェーンは、ABAPでも読みやすく・美しく・意図が伝わるコードを書くための強力なテクニックです。
複数の設定処理やデータ組み立てを“流れるように”書けるので、可読性が一気に上がります。
皆さんも是非現場で使ってみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?