En Dart, el uso de typedef permite crear alias para tipos de funciones, lo cual simplifica la definición de funciones complejas y aumenta la legibilidad del código. Con typedef, puedes definir un tipo personalizado para una función, lo que resulta útil cuando trabajas con funciones como parámetros, especialmente en aplicaciones de alto nivel y callbacks en Flutter.
typedef es una palabra clave que permite definir un alias para un tipo de función. Este alias representa una firma de función específica, es decir, define los parámetros y el tipo de retorno de la función, permitiendo que cualquier función que coincida con esta firma pueda ser utilizada donde se espera el typedef.
Para definir un typedef, usa la palabra clave typedef seguida del nombre del alias, y luego la firma de la función.
typedef Operacion = int Function(int a, int b);
int sumar(int a, int b) => a + b;
int restar(int a, int b) => a - b;
En este ejemplo, Operacion es un alias que representa cualquier función que tome dos int como parámetros y devuelva un int.
Los alias de funciones son útiles para definir funciones de callback, especialmente en aplicaciones que usan operaciones repetitivas o procesamiento en segundo plano.
typedef Callback = void Function(String mensaje);
void ejecutarCallback(String mensaje, Callback callback) {
callback(mensaje);
}
void mostrarMensaje(String mensaje) {
print("Mensaje: $mensaje");
}
void main() {
ejecutarCallback("Hola, Dart!", mostrarMensaje);
}
Aquí, Callback define una función que recibe un String y no retorna nada (void). mostrarMensaje se pasa como parámetro a ejecutarCallback, que utiliza el Callback en su firma.
Puedes usar typedef con funciones anónimas para simplificar el manejo de funciones en estructuras como listas y mapas.
typedef Transformar = String Function(String input);
void aplicarTransformacion(String input, Transformar transformacion) {
print(transformacion(input));
}
void main() {
aplicarTransformacion("dart", (str) => str.toUpperCase()); // Imprime: DART
}
En Flutter, typedef es útil para definir tipos de callback que se utilizan en widgets personalizados.
typedef VoidCallback = void Function();
class BotonPersonalizado extends StatelessWidget {
final VoidCallback onPressed;
BotonPersonalizado({required this.onPressed});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Text("Presionar"),
);
}
}
En este ejemplo, VoidCallback se utiliza para representar cualquier función que no toma parámetros ni retorna un valor, y que se ejecutará cuando el botón sea presionado.
Si tienes funciones complejas con múltiples parámetros, typedef ayuda a definir tipos claros y reutilizables.
typedef Calculo = double Function(double x, double y, double z);
double operacionCompleja(double x, double y, double z) {
return (x * y) + z;
}
void ejecutarOperacion(double a, double b, double c, Calculo calculo) {
print("Resultado: ${calculo(a, b, c)}");
}
void main() {
ejecutarOperacion(2, 3, 4, operacionCompleja); // Imprime: Resultado: 10.0
}
Aquí, Calculo representa una función que toma tres double y retorna un double, lo cual facilita la reutilización de operacionCompleja en diferentes contextos.
Para más detalles, consulta la documentación oficial de Dart sobre typedef.
Jorge García
Fullstack developer