バージョン 6.3.3
 —  ステートメント  —

SEND METHOD

SEND [METHOD] operand1 TO [OBJECT] operand2
 

 
WITH

operand3

(AD=

M
O
A

)

nX              
[RETURN operand4]
[GIVING operand5]

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

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

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

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


機能

SEND METHOD ステートメントは、オブジェクトの特定メソッドを呼び出すために使用します。 コンポーネントベースプログラミングの詳細については、『プログラミングガイド』の「NaturalX」セクションを参照してください。

Top of page

構文説明

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

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
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 はパラメータ FirstNameMiddleInitialLastNameStreetCity を持ち、そのうち MiddleInitialStreetCity がオプションです。 次のステートメントが適用されます。

* 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 でマークすることによって定義されます (詳細については、「PARAMETER 節」セクションを参照)。したがって、Natural で記述され、戻り値を持つメソッドのパラメータデータエリアには常にメソッドパラメータの次に 1 つの追加フィールドが含まれます。 この点は、Natural で記述されたクラスのメソッドを呼び出し、SEND ステートメントのメソッドのパラメータデータエリアを使用したいときに考慮します。

GIVING operand5
GIVING 節:

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

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

Top of page

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

Example

Go to source code Go to source code Go to source code Go to source code Go to source code Go to source code Go to source code Go to source code

プログラム 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                                                                

Top of page