SEND METHOD

SEND [METHOD] operand1 TO [OBJECT]operand2

WITH

../graphics/cbo4.gif

 

(AD=

../graphics/cbo3.gif

M
O
A

../graphics/cbc3.gif

)

operand3
nX
               
[RETURNoperand4]
[GIVINGoperand5]

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:CREATE OBJECT | DEFINE CLASS | INTERFACE | METHOD | PROPERTY

関連機能グループ:コンポーネントベースプログラミング


関数

SEND METHOD ステートメントは、オブジェクトの特定メソッドを呼び出すために使用します。

コンポーネントベースプログラミングの詳細については、『プログラミングガイド』の「NaturalX」セクションを参照してください。

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                         ×
operand2   S                               O × ×
operand3 C S A G   A U N P I F B D T L C G O ×
operand4   S A     A U N P I F B D T L C G O ×
operand5   S     N         I                 ×

ローカルクラスのメソッドに渡すことができるのは、フォーマット C および G のみです。

構文要素の説明:

構文要素 説明
operand1
メソッド名:

operand1 は、operand2 で指定されるオブジェクトによってサポートされるメソッドの名前です。

メソッド名はクラスの異なるインターフェイスで同一にできるため、混同を避けるために、operand1 のメソッド名をインターフェイス名で修飾することもできます。

次の例では、オブジェクト #O3 は、メソッド Start 付きのインターフェイス Iterate を持っています。次のステートメントが適用されます。

* Specifying only the method name.
SEND 'Start' TO #O3
* Qualifying the method name with the interface name.
SEND 'Iterate.Start' TO #O3

インターフェイス名が指定されていない場合、Natural はクラスのすべてのインターフェイスのメソッド名を検索します。メソッド名が複数のインターフェイスで見つかった場合、ランタイムエラーが発生します。

operand2
オブジェクトハンドル:

メソッドコールが送信されるオブジェクトのハンドル。

operand2 は、オブジェクトハンドル(HANDLE OF OBJECT)として定義する必要があります。オブジェクトがすでに存在している必要があります。

メソッド内で現在のオブジェクトのメソッドを呼び出すには、システム変数 *THIS-OBJECT を使用してください。

operand3
メソッドに固有のパラメータ:

operand3 として、メソッドに固有のパラメータを指定できます。

次の例では、オブジェクト #O3 は、パラメータ Pos 付きのメソッド PositionTo を持っています。メソッドは次の方法で呼び出されます。

SEND 'PositionTo' TO #O3 WITH Pos

メソッドはオプションのパラメータを持つことができます。メソッドが呼び出される場合は、オプションのパラメータを指定する必要はありません。オプションパラメータを省略するには、プレースホルダ 1X を使用します。n オプションパラメータを省略するには、プレースホルダ nX を使用します。

次の例では、オブジェクト #O4 のメソッド SetAddress には、パラメータ FirstNameMiddleInitialLastNameStreet および City があります。ここで、MiddleInitialStreet および City はオプションです。次のステートメントが適用されます。

* Specifying all parameters.
SEND 'SetAddress' TO #O4 WITH FirstName MiddleInitial
LastName Street City
* Omitting one optional parameter.
SEND 'SetAddress' TO #O4 WITH FirstName 1X LastName Street City
* Omitting all optional parameters.
SEND 'SetAddress' TO #O4 WITH FirstName 1X LastName 2X

オプションでない(必須)パラメータを省略すると、ランタイムエラーが発生します。

AD=
属性定義:
operand3 が変数の場合は、次のいずれかの方法でマークすることができます。
AD=O 変更不可。セッションパラメータ AD=O を参照してください。
AD=M 変更可。セッションパラメータ AD=M を参照してください。

これはデフォルト設定です。

AD=A 入力のみ。セッションパラメータ AD=A を参照してください。
operand3 が定数の場合は、AD を明示的に指定することはできません。定数には常に AD=O が適用されます。
nX
省略されるパラメータ:

表記 nX を使用して、次の n パラメータを省略するように指定できます。例えば、1X は次のパラメータを省略し、3X は次の 3 つのパラメータを省略します。これは、次の n パラメータに、メソッドに渡す値がないことを意味します。

Natural で実装されたメソッドについて、省略されるパラメータは、ダイアログの DEFINE DATA PARAMETER ステートメントでキーワード OPTIONAL を使用して定義する必要があります。OPTIONAL は、値を呼び出し側オブジェクトからこのようなパラメータに渡すこともできるということを意味します。

RETURN operand4
RETURN 節:

RETURN 節が省略され、メソッドが戻り値を持っている場合、戻り値は破棄されます。

RETURN 節を指定した場合、operand4 にはメソッドの戻り値が含まれます。メソッドの実行が失敗すると、operand4 はその初期値にリセットされます。

注意:
Natural で記述されたクラスについて、メソッドの戻り値は、メソッドのパラメータデータエリアに 1 つの追加パラメータを入力し、それを BY VALUE RESULT でマークすることによって定義されます詳細については、INTERFACE ステートメントの説明の PARAMETER 節を参照してください。したがって、Natural で記述され、戻り値を持つメソッドのパラメータデータエリアには常にメソッドパラメータの次に 1 つの追加フィールドが含まれます。この点は、Natural で記述されたクラスのメソッドを呼び出し、SEND ステートメントのメソッドのパラメータデータエリアを使用するときに考慮します。

GIVING operand5
GIVING 節:

GIVING 節を指定しなかった場合、エラーの発生時に Natural ランタイムエラー処理が開始されます。

GIVING 節を指定した場合は、operand5 に、エラー発生時は Natural メッセージ番号、成功時はゼロが含まれます。

次の図は、この例で使用されている Natural オブジェクトの概要を示しています。対応するソースコードとプログラム出力を下記に示します。図には、オブジェクトのソースコードへのリンクが用意されています。

Example

ソースコードに移動 ソースコードに移動 ソースコードに移動 ソースコードに移動 ソースコードに移動 ソースコードに移動 ソースコードに移動 ソースコードに移動

プログラム METH01 - クラスと複数のメソッドを使用した CREATE OBJECT および SEND METHOD

** Example 'METH01':  CREATE OBJECT and SEND METHOD                     
**                    using a class and several methods (see METH*)     
************************************************************************
DEFINE DATA                                                             
LOCAL                                                                   
  USING METHA                                                           
LOCAL                                                                   
1 L-STUDENT HANDLE OF OBJECT                                            
1 #NAME     (A20)                                                       
1 #STREET   (A20)                                                       
1 #CITY     (A20)                                                       
1 #SUM      (I4)                                                        
1 #MULTI    (I4)                                                        
END-DEFINE                                                              
*                                                                       
CREATE OBJECT L-STUDENT OF CLASS 'STUDENTS' /* see METHCL for class     
*                                                                       
L-STUDENT.<> := 'John Smith'                                 
*                                                                       
SEND METHOD 'INIT' TO L-STUDENT             /* see METHCL
     WITH #VAR1 #VAR2 #VAR3 #VAR4                        
*                                                        
SEND METHOD 'SUMMATION' TO L-STUDENT        /* see METHCL
     WITH #VAR1 #VAR2 #VAR3 #VAR4                        
*                                                        
SEND METHOD 'MULTIPLICATION' TO L-STUDENT   /* see METHCL
     WITH #VAR1 #VAR2 #VAR3 #VAR4                        
*                                                        
#NAME  := L-STUDENT.<>                     
#SUM   := L-STUDENT.<>                              
#MULTI := L-STUDENT.<>                            
*                                                        
SEND METHOD 'ADDRESS' TO L-STUDENT          /* see METHCL
*                                                        
#STREET := L-STUDENT.<>                          
#CITY   := L-STUDENT.<>                            
*                                                        
*                                                        
WRITE 'Name  :' #NAME                                
WRITE 'Street:' #STREET                              
WRITE 'City  :' #CITY                                
WRITE ' '                                            
WRITE 'The summation of     ' #VAR1 #VAR2 #VAR3 #VAR4
WRITE 'is' #SUM                                      
WRITE 'The multiplication of' #VAR1 #VAR2 #VAR3 #VAR4
WRITE 'is' #MULTI                                    
*                                                    
END

METH01 で使用されるクラス定義 METHCL:

** Example 'METHCL': DEFINE CLASS (used by METH01)                      
************************************************************************
* Defining class STUDENTS for METH01                                    
*                                                                       
DEFINE CLASS STUDENTS                                                   
  OBJECT                                                                
    USING METHO                  /* Object data for class STUDENTS      
  /*                                                                    
  INTERFACE STUDENT-ARITHMETICS                                         
    PROPERTY FULL-NAME                                                  
      IS NAME                                                           
    END-PROPERTY                                                        
    PROPERTY SUM                                                        
    END-PROPERTY                                                        
    PROPERTY MULTI                                                      
    END-PROPERTY                                                        
*                                                                       
    METHOD INIT                                                         
      IS METH02                                                         
      PARAMETER USING METHA 
    END-METHOD              
    METHOD SUMMATION        
      IS METH03             
      PARAMETER USING METHA 
    END-METHOD              
    METHOD MULTIPLICATION   
      IS METH04             
      PARAMETER USING METHA 
    END-METHOD              
  END-INTERFACE             
*                           
  INTERFACE STUDENT-ADDRESS 
    PROPERTY STUDENT-NAME   
      IS NAME               
    END-PROPERTY            
    PROPERTY STREET         
    END-PROPERTY            
    PROPERTY CITY           
    END-PROPERTY  
*                 
    METHOD ADDRESS
      IS METH05   
    END-METHOD    
  END-INTERFACE   
END-CLASS         
END

クラス METHCL およびサブプログラム METH02、METH03、METH04、METH05 で使用されるローカルデータエリア METHO(オブジェクトデータ):

Local     METHO     Library SYSEXSYN                       DBID    10 FNR    32
Command                                                                     > +
I T L  Name                             F Length     Miscellaneous             
All -- -------------------------------- - ---------- ------------------------->
     1 NAME                             A         20                           
     1 STREET                           A         30                           
     1 CITY                             A         20                           
     1 SUM                              I          4                           
     1 MULTI                            I          4

プログラム METH01、クラス METHCL、およびサブプログラム METH02、METH03、METH04 で使用されるパラメータデータエリア METHA:

Parameter METHA     Library SYSEXSYN                       DBID    10 FNR    32
Command                                                                     > +
I T L  Name                             F Length     Miscellaneous             
All -- -------------------------------- - ---------- ------------------------->
     1 #VAR1                            I          4                           
     1 #VAR2                            I          4                           
     1 #VAR3                            I          4                           
     1 #VAR4                            I          4

サブプログラム METH02 - プログラム METH01 で使用されるメソッド INIT:

** Example 'METH02': Method INIT (used by METH01)                       
************************************************************************
DEFINE DATA                                                             
PARAMETER                                                               
  USING METHA                                                           
OBJECT                                                                  
  USING METHO                                                           
END-DEFINE                                                              
*                                                                       
* Method INIT of class STUDENTS                                         
*                                                                       
#VAR1 := 1                                                              
#VAR2 := 2                                                              
#VAR3 := 3                                                              
#VAR4 := 4                                                              
*                                                                       
END

サブプログラム METH03 - プログラム METH01 で使用されるメソッド SUMMATION:

** Example 'METH03': Method SUMMATION (used by METH01)                  
************************************************************************
DEFINE DATA                                                             
PARAMETER                                                               
  USING METHA                                                           
OBJECT                                                                  
  USING METHO                                                           
END-DEFINE                                                              
*                                                                       
* Method SUMMATION of class STUDENTS                                    
*                                                                       
COMPUTE SUM = #VAR1 + #VAR2 + #VAR3 + #VAR4                             
END

サブプログラム METH04 - プログラム METH01 で使用されるメソッド MULTIPLICATION:

** Example 'METH04': Method MULTIPLICATION (used by METH01)             
************************************************************************
DEFINE DATA                                                             
PARAMETER                                                               
  USING METHA                                                           
OBJECT                                                                  
  USING METHO                                                           
END-DEFINE                                                              
*                                                                       
* Method MULTIPLICATION of class STUDENTS                               
*                                                                       
COMPUTE MULTI = #VAR1 * #VAR2 * #VAR3 * #VAR4                           
END

サブプログラム METH05 - プログラム METH01 で使用されるメソッド ADDRESS:

** Example 'METH05': Method ADDRESS (used by METH01)                    
************************************************************************
DEFINE DATA                                                             
  OBJECT USING METHO                                                    
END-DEFINE                                                              
*                                                                       
* Method ADDRESS of class STUDENTS                                      
*                                                                       
IF NAME = 'John Smith'                                                  
  STREET := 'Oxford street'                                             
  CITY   := 'London'                                                    
END-IF                                                                  
END

プログラム METH01 の出力:

Page      1                                                  05-01-17  15:59:04
                                                                               
Name  : John Smith                                                             
Street: Oxford street                                                          
City  : London                                                                 
                                                                               
The summation of                1           2           3           4          
is          10                                                                 
The multiplication of           1           2           3           4          
is          24