Dart Typedef

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

Dartプログラムにtypedefを実装するステップを以下に示します。

ステップ1typedefを定義する

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

typedef function_name(parameters)

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

Typedef変数は、typedefと同じシグネチャを持つ関数を指すことができます。以下のシグニチャを使用して、typedef変数に関数を割り当てることができます。

type_def  var_name = function_name

ステップ3:関数を呼び出す

Typedef変数を使用して関数を呼び出すことができます。関数の呼び出し方法は以下のとおりです。

var_name(parameters)

実例

次には、Dartのtypedefを深く理解するために、実例を挙げます。

この実例では、最初にtypedefを定義します。これは、関数のシグネチャを定義します。この関数は、整数型の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変数が異なる関数シグネチャを持つ関数をポイントしようとすると、上記のコードによってエラーが発生します。

実例

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); 
}  
main(){ 
   Calculator(5,5,Add); 
   Calculator(5,5,Subtract); 
   Calculator(5,5,Divide); 
}

上記のコードを実行した後、出力結果は以下のとおりです。

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です