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