Lección 13 · 13 de 20
Funciones y sintaxis de flecha · Dart
Escriba funciones en Dart con su tipo de retorno, return y la sintaxis de flecha =>, use void y guarde funciones en variables: un conversor de temperaturas.

Una función agrupa código con un nombre para usarlo tantas veces como haga falta. double toFahrenheit(double celsius) dice qué devuelve (double), cómo se llama y qué parámetro recibe. Dentro, `return` devuelve el resultado: celsius * 9 / 5 + 32.
Cuando una función es una sola expresión, la sintaxis de flecha la acorta: bool isFreezing(double celsius) => celsius <= 0; equivale a un bloque con return. Las funciones se llaman unas a otras: describe usa isFreezing y el operador condicional para dar freezing, hot o mild.
`void` indica que la función no devuelve nada: report hace un trabajo, escribir una línea, y ya está. Se le pasan los argumentos en el mismo orden que los parámetros: report('Oslo', -4). El -4 es un entero, pero Dart lo convierte en double porque así lo pide el parámetro; por eso sale -4.0.
El resultado de una función se guarda en una variable o se usa directamente dentro de ${}. Y las funciones también son valores: var convert = toFahrenheit; guarda la función sin llamarla, y (int n) => n * n es una función anónima, sin nombre, que se guarda en square. Las próximas lecciones las usarán mucho.
En Flutter todo se construye con funciones: los botones reciben una función que se ejecuta al pulsarlos. En DMarlon Studio, el código que se ejecuta al pulsar un botón del lienzo de teléfono va en una función así.
Código · main.dart
// A function: return type, name, parameters and a block.double toFahrenheit(double celsius) { return celsius * 9 / 5 + 32;}// Arrow syntax (=>) for a function that is a single expression.bool isFreezing(double celsius) => celsius <= 0;String describe(double celsius) => isFreezing(celsius) ? 'freezing' : (celsius > 30 ? 'hot' : 'mild');// void: the function does something but returns nothing.void report(String city, double celsius) { String f = toFahrenheit(celsius).toStringAsFixed(1); print('${city.padRight(8)}$celsius C = $f F, ${describe(celsius)}');}void main() { report('Oslo', -4); report('Madrid', 21); report('Seville', 36.5); // The result can be kept in a variable or used directly. double boiling = toFahrenheit(100); print('Water boils at $boiling F'); print('Freezing at 0 C? ${isFreezing(0)}'); // Functions are values too: they can go in a variable. var convert = toFahrenheit; var square = (int n) => n * n; print('Body: ${convert(37).toStringAsFixed(1)} F, 12 squared: ${square(12)}');}Salida · dart run main.dart
Oslo -4.0 C = 24.8 F, freezing Madrid 21.0 C = 69.8 F, mild Seville 36.5 C = 97.7 F, hot Water boils at 212.0 F Freezing at 0 C? true Body: 98.6 F, 12 squared: 144
Para recordar
tipo nombre(parámetros) { return ...; }define una función.=> expresiónsustituye a{ return expresión; }.voidsignifica que no devuelve nada.- Las funciones son valores: se guardan en variables.
(x) => ...es una función anónima.
Ejercicio
Escriba una función kmToMiles con sintaxis de flecha y otra void llamada trip que escriba el nombre de un destino con su distancia en kilómetros y en millas; llámela con tres destinos.