Typedef
または関数型エイリアスは、メモリ内の実行可能コードへのポインタを定義するのに役立ちます。簡単に言えば、typedef
は関数を参照するためのポインターとして使用できます。
Dartプログラムにtypedef
を実装するステップを以下に示します。
ステップ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
を定義します。これは、関数のシグネチャを定義します。この関数は、整数型の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
コメントを残す