Programação Dart - Typedef

UMA typedef, ou um alias de tipo de função, ajuda a definir ponteiros para código executável na memória. Simplificando, umtypedef pode ser usado como um ponteiro que faz referência a uma função.

Abaixo estão as etapas para implementar typedefs em um programa Dart.

Step 1: Defining a typedef

UMA typedefpode ser usado para especificar uma assinatura de função que desejamos que funções específicas correspondam. Uma assinatura de função é definida pelos parâmetros de uma função (incluindo seus tipos). O tipo de retorno não faz parte da assinatura da função. Sua sintaxe é a seguinte.

typedef function_name(parameters)

Step 2: Assigning a Function to a typedef Variable

Uma variável de typedef pode apontar para qualquer função com a mesma assinatura que typedef. Você pode usar a seguinte assinatura para atribuir uma função a umtypedef variável.

type_def  var_name = function_name

Step 3: Invoking a Function

o typedefvariável pode ser usada para invocar funções. Aqui está como você pode invocar uma função -

var_name(parameters)

Exemplo

Vamos agora dar um exemplo para entender mais sobre typedef em Dart.

Em primeiro lugar, vamos definir um typedef. Aqui estamos definindo uma assinatura de função. A função terá dois parâmetros de entrada do tipointeger. O tipo de retorno não faz parte da assinatura da função.

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

A seguir, vamos definir as funções. Defina algumas funções com a mesma assinatura de função daManyOperation 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, vamos invocar a função via typedef. Declare uma variável do tipo ManyOperations. Atribua o nome da função à variável 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);

o opervariável pode apontar para qualquer método que receba dois parâmetros inteiros. oAdda referência da função é atribuída à variável. Typedefs podem alternar referências de função em tempo de execução

Vamos agora juntar todas as peças e ver o 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); 
}

O programa deve produzir o seguinte output -

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

Note - O código acima resultará em um erro se o typedef variável tenta apontar para uma função com uma assinatura de função diferente.

Exemplo

Typedefstambém pode ser passado como um parâmetro para uma função. Considere o seguinte exemplo -

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

Irá produzir o seguinte output -

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