Programmation de fléchettes - Typedef

UNE typedef, ou un alias de type fonction, permet de définir des pointeurs vers le code exécutable dans la mémoire. En termes simples, untypedef peut être utilisé comme un pointeur qui référence une fonction.

Voici les étapes à suivre pour mettre en œuvre typedefs dans un programme Dart.

Step 1: Defining a typedef

UNE typedefpeut être utilisé pour spécifier une signature de fonction à laquelle nous voulons que des fonctions spécifiques correspondent. Une signature de fonction est définie par les paramètres d'une fonction (y compris leurs types). Le type de retour ne fait pas partie de la signature de la fonction. Sa syntaxe est la suivante.

typedef function_name(parameters)

Step 2: Assigning a Function to a typedef Variable

Une variable de typedef peut pointer vers n'importe quelle fonction ayant la même signature que typedef. Vous pouvez utiliser la signature suivante pour attribuer une fonction à untypedef variable.

type_def  var_name = function_name

Step 3: Invoking a Function

le typedefvariable peut être utilisée pour appeler des fonctions. Voici comment vous pouvez appeler une fonction -

var_name(parameters)

Exemple

Prenons maintenant un exemple pour en savoir plus sur typedef dans Dart.

Dans un premier temps, définissons un typedef. Ici, nous définissons une signature de fonction. La fonction prendra deux paramètres d'entrée du typeinteger. Le type de retour ne fait pas partie de la signature de la fonction.

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

Ensuite, définissons les fonctions. Définissez certaines fonctions avec la même signature de fonction que celle duManyOperation 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}"); 
}

Enfin, nous invoquerons la fonction via typedef. Déclarez une variable de type ManyOperations. Attribuez le nom de la fonction à la variable déclarée.

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

le opervariable peut pointer vers n'importe quelle méthode qui prend deux paramètres entiers. leAddla référence de la fonction est affectée à la variable. Les typedefs peuvent changer les références de fonction au moment de l'exécution

Assemblons maintenant toutes les parties et voyons le programme complet.

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

Le programme doit produire les éléments suivants output -

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

Note - Le code ci-dessus entraînera une erreur si le typedef variable essaie de pointer vers une fonction avec une signature de fonction différente.

Exemple

Typedefspeut également être passé en paramètre à une fonction. Prenons l'exemple suivant -

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

Il produira ce qui suit output -

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