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