Programación de dardos - Typedef

UNA typedef, o un alias de tipo de función, ayuda a definir punteros al código ejecutable dentro de la memoria. En pocas palabras, untypedef se puede utilizar como puntero que hace referencia a una función.

A continuación se muestran los pasos para implementar typedefs en un programa de Dart.

Step 1: Defining a typedef

UNA typedefse puede utilizar para especificar una firma de función con la que queremos que coincidan funciones específicas. La firma de una función se define mediante los parámetros de una función (incluidos sus tipos). El tipo de retorno no es parte de la firma de la función. Su sintaxis es la siguiente.

typedef function_name(parameters)

Step 2: Assigning a Function to a typedef Variable

Una variable de typedef puede apuntar a cualquier función que tenga la misma firma que typedef. Puede utilizar la siguiente firma para asignar una función a untypedef variable.

type_def  var_name = function_name

Step 3: Invoking a Function

los typedefLa variable se puede utilizar para invocar funciones. Así es como puede invocar una función:

var_name(parameters)

Ejemplo

Tomemos ahora un ejemplo para entender más sobre typedef en Dart.

Primero, definamos un typedef. Aquí estamos definiendo una firma de función. La función tomará dos parámetros de entrada del tipointeger. El tipo de retorno no es parte de la firma de la función.

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

A continuación, definamos las funciones. Definir algunas funciones con la misma firma de función que la delManyOperation 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}"); 
}

Finalmente, invocaremos la función a través de typedef. Declare una variable del tipo ManyOperations. Asigne el nombre de la función a la variable declarada.

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

los operLa variable puede apuntar a cualquier método que tome dos parámetros enteros. losAddLa referencia de la función se asigna a la variable. Typedefs puede cambiar las referencias de función en tiempo de ejecución

Ahora juntemos todas las partes y veamos el programa completo.

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

El programa debe producir lo siguiente output -

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

Note - El código anterior dará como resultado un error si el typedef variable intenta apuntar a una función con una firma de función diferente.

Ejemplo

Typedefstambién se puede pasar como parámetro a una función. Considere el siguiente ejemplo:

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

Producirá lo siguiente output -

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