Dart-programming-typedef

提供:Dev Guides
移動先:案内検索

Dartプログラミング-Typedef

*typedef* 、または関数型エイリアスは、メモリ内の実行可能コードへのポインターを定義するのに役立ちます。 簡単に言えば、 *typedef* は関数を参照するポインターとして使用できます。

以下は、Dartプログラムで typedefs を実装する手順です。

ステップ1:typedefの定義

*typedef* を使用して、特定の関数に一致させる関数シグネチャを指定できます。 関数シグネチャは、関数のパラメーター(それらのタイプを含む)によって定義されます。 戻り値の型は関数シグネチャの一部ではありません。 構文は次のとおりです。
typedef function_name(parameters)

ステップ2:関数をtypedef変数に割り当てる

*typedef* の変数は、 *typedef* と同じシグネチャを持つ任意の関数を指すことができます。 次のシグネチャを使用して、関数を *typedef* 変数に割り当てることができます。
type_def  var_name = function_name

ステップ3:関数の呼び出し

*typedef* 変数を使用して関数を呼び出すことができます。 これは、関数を呼び出す方法です-
var_name(parameters)

次に、Dartの typedef の詳細を理解するための例を見てみましょう。

最初に、 typedef を定義します。 ここでは、関数シグネチャを定義しています。 この関数は、 integer 型の2つの入力パラメーターを取ります。 戻り値の型は関数シグネチャの一部ではありません。

typedef ManyOperation(int firstNo , int secondNo);//function signature

次に、関数を定義しましょう。 ManyOperation typedef と同じ関数シグネチャを持ついくつかの関数を定義します。

Add(int firstNo,int second){
   print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
   print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
   print("Add result is ${firstNo/second}");
}

最後に、 typedef を介して関数を呼び出します。 ManyOperations型の変数を宣言します。 関数名を宣言された変数に割り当てます。

ManyOperation oper ;

//can point to any method of same signature
oper = Add;
oper(10,20);
oper = Subtract;
oper(30,20);
oper = Divide;
oper(50,5);
*oper* 変数は、2つの整数パラメーターを取る任意のメソッドを指すことができます。 *Add* 関数の参照が変数に割り当てられます。 Typedefは実行時に関数参照を切り替えることができます

すべての部品をまとめて、完全なプログラムを見てみましょう。

typedef ManyOperation(int firstNo , int secondNo);
//function signature

Add(int firstNo,int second){
   print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
   print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
   print("Divide result is ${firstNo/second}");
}
Calculator(int a, int b, ManyOperation oper){
   print("Inside calculator");
   oper(a,b);
}
void main(){
   ManyOperation oper = Add;
   oper(10,20);
   oper = Subtract;
   oper(30,20);
   oper = Divide;
   oper(50,5);
}

プログラムは、次の*出力*を生成する必要があります-

Add result is 30
Subtract result is 10
Divide result is 10.0

- typedef 変数が異なる関数シグネチャを持つ関数をポイントしようとすると、上記のコードはエラーになります。

*Typedefs* は、パラメーターとして関数に渡すこともできます。 次の例を考慮してください-
typedef ManyOperation(int firstNo , int secondNo);  //function signature
Add(int firstNo,int second){
   print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
   print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
   print("Divide result is ${firstNo/second}");
}
Calculator(int a,int b ,ManyOperation oper){
   print("Inside calculator");
   oper(a,b);
}
main(){
   Calculator(5,5,Add);
   Calculator(5,5,Subtract);
   Calculator(5,5,Divide);
}

次の output が生成されます-

Inside calculator
Add result is 10
Inside calculator
Subtract result is 0
Inside calculator
Divide result is 1.0