Dart-Programmierung - Typedef

EIN typedefoder ein Alias ​​vom Funktionstyp hilft beim Definieren von Zeigern auf ausführbaren Code im Speicher. Einfach gesagt, atypedef kann als Zeiger verwendet werden, der auf eine Funktion verweist.

Im Folgenden sind die zu implementierenden Schritte aufgeführt typedefs in einem Dart-Programm.

Step 1: Defining a typedef

EIN typedefkann verwendet werden, um eine Funktionssignatur anzugeben, mit der bestimmte Funktionen übereinstimmen sollen. Eine Funktionssignatur wird durch die Parameter einer Funktion (einschließlich ihrer Typen) definiert. Der Rückgabetyp ist nicht Teil der Funktionssignatur. Die Syntax lautet wie folgt.

typedef function_name(parameters)

Step 2: Assigning a Function to a typedef Variable

Eine Variable von typedef kann auf jede Funktion mit derselben Signatur wie verweisen typedef. Mit der folgenden Signatur können Sie a eine Funktion zuweisentypedef Variable.

type_def  var_name = function_name

Step 3: Invoking a Function

Das typedefVariable kann verwendet werden, um Funktionen aufzurufen. So können Sie eine Funktion aufrufen:

var_name(parameters)

Beispiel

Nehmen wir nun ein Beispiel, um mehr darüber zu erfahren typedef in Dart.

Definieren wir zunächst a typedef. Hier definieren wir eine Funktionssignatur. Die Funktion akzeptiert zwei Eingabeparameter des Typsinteger. Der Rückgabetyp ist nicht Teil der Funktionssignatur.

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

Als nächstes definieren wir die Funktionen. Definieren Sie einige Funktionen mit derselben Funktionssignatur wie die vonManyOperation 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}"); 
}

Zum Schluss rufen wir die Funktion über auf typedef. Deklarieren Sie eine Variable vom Typ ManyOperations. Weisen Sie der deklarierten Variablen den Funktionsnamen zu.

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);

Das operVariable kann auf jede Methode verweisen, die zwei ganzzahlige Parameter akzeptiert. DasAddDie Funktionsreferenz wird der Variablen zugewiesen. Typedefs können zur Laufzeit Funktionsreferenzen wechseln

Lassen Sie uns nun alle Teile zusammenfügen und das komplette Programm sehen.

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); 
}

Das Programm sollte Folgendes erzeugen output - -

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

Note - Der obige Code führt zu einem Fehler, wenn der typedef Variable versucht, auf eine Funktion mit einer anderen Funktionssignatur zu verweisen.

Beispiel

Typedefskann auch als Parameter an eine Funktion übergeben werden. Betrachten Sie das folgende Beispiel -

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); 
}

Es wird Folgendes erzeugt output - -

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