web-dev-qa-db-ja.com

ABAPでメソッドを呼び出すさまざまな方法

この基本的なABAPの質問でごめんなさい。 ABAPでメソッドを呼び出す方法は何ですか?そして、彼らの「公式の」名前は何ですか?実行、メソッド呼び出し、内部/インラインメソッド呼び出しについて聞いたことがあります。

PerformはPERFORMキーワードを使用し、メソッド呼び出しCALL METHOD構文だと思います。しかし、「内部」または「インラインメソッド呼び出し」とは何でしょうか。

7
Ulrich Scholz

これらは、インラインメソッド呼び出しの可能性です。

IMPORTINGパラメータとオプションで1つのRETURNパラメータのみを持ついわゆる関数型メソッドを呼び出す場合は、次のように呼び出すことができます。

CLASS lcl_test DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      func_meth
        IMPORTING
          i_param TYPE i
        RETURNING
          VALUE(r_res) TYPE char1.
ENDCLASS.

l_res = lcl_test=>func_meth( 1 ).

* you could also call it like this
l_res = lcl_test=>func_meth( i_param = 1 ).

* also this variant is possible
l_res = lcl_test=>func_meth( EXPORTING i_param = 1 ).

* the traditional CALL METHOD syntax would be like this
CALL METHOD lcl_test=>func_meth
  EXPORTING
    i_param = 1
  RECEIVING
    r_res = l_res.

IMPORTINGパラメータが複数ある場合は、パラメータの名前を指定する必要があります。

CLASS lcl_test DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      func_meth
        IMPORTING
          i_param1 TYPE i
          i_param2 TYPE i
        RETURNING
          VALUE(r_res) TYPE char1.
ENDCLASS.

l_res = lcl_test=>func_meth(
   i_param1 = 1
   i_param2 = 2
).

メソッドにEXPORTINGまたはCHANGINGパラメーターがある場合でも、インライン呼び出しは可能ですが、パラメーターのカテゴリーを明示的に指定する必要があります。

CLASS lcl_test DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      func_meth
        IMPORTING
          i_param TYPE i
        EXPORTING
          e_param TYPE c
        CHANGING
          c_param TYPE n.
ENDCLASS.

lcl_test=>func_meth(
  EXPORTING
    i_param = 1
  IMPORTING
    e_param = l_param
  CHANGING
    c_param = l_paramc
).
10
Jagger

クエストで頑張ってください-このタスクは予想よりもはるかに難しいことがわかります。たとえば、ABAPにはマクロ処理機能が含まれており、実際のメソッド呼び出しが行われていることを見つけるのが非常に困難になります。それでもコンパイルされる悪意のある例:

DATA: l_foo TYPE c LENGTH 32.

DEFINE foo.
  l_&4 = cl_&1_&3&5&2&9if_&1_&3&5_&8~&7_&3&5_c&6( ).
END-OF-DEFINITION.

foo system = u foo uid 32 create static >.

マクロがシステムの一部で広く使用されていることがわかります。組み込みのパーサーとマクロプロセッサを使用せずに、この種のものでメソッド呼び出しを見つける幸運。

1
vwegert

あなたは多くのものを大規模に混合しました。親切にし、ここでいくつかの基本から始めましょう:

メソッドは、クラスのメンバー関数の正式な名前です。つまり、メソッドについて話す場合、オブジェクト指向プログラミング(OOP)について話します。メソッド呼び出しには、2つまたは3つの方法があります。少なくともabapのバリアントです。あなたが私に約束した後、これについて読むために、後で詳細に説明しましょう。

関数は単なる関数であり、再利用するために複数の呼び出し元から呼び出すことができる小さな(または大きな)コード片です。 OOPパラダイムではなく、プログラミングが始まってから存在します。それでも、abapにはわずかに「より大きな」定義があります。あなたが私に約束した場合、それについて読むために、これについて詳しく話しましょう。そして、もしあなたがABAPを開発したいなら、あなたはそうすべきです。

実行しますか? 「Perform」は、フォームルーチンを呼び出すためのabapキーワードです。フォームルーチンは、実際の昔ながらの関数です。abapと同等であり、プログラミングが始まったときの古き良き時代の関数に最も似ています。再利用可能な小さなコード。これは、あなたのプログラムのどこからでも呼び出すことができますが、他のどこからでも呼び出すことができます(これは、今のところあなたには遠すぎます)。

したがって、これら3つ(またはこれら3つのうちの2つ)をすでに混同している場合、内部またはインラインについて話すことはできません。申し訳ありませんが、そのままです。それは問題ではありません。

他の言語で開発したことはありますか?

0
icbytes