Lección 14 · 14 de 20
Parámetros con nombre y opcionales · Dart
Haga funciones flexibles en Dart con parámetros opcionales entre [ ], parámetros con nombre entre { }, valores por defecto y required.

Un parámetro entre corchetes es opcional y posicional: en greet(String name, [String greeting = 'Hello']), el saludo puede faltar y entonces vale 'Hello'. greet('Marta') da Hello, Marta! y greet('Marta', 'Good morning') cambia el saludo.
Los parámetros entre llaves son parámetros con nombre: al llamar a la función se escribe el nombre delante del valor, como nights: 3. Así se ve enseguida qué significa cada número, y pueden ir en cualquier orden: book('Hotel Mar', guests: 3, nights: 2).
Los parámetros con nombre son opcionales salvo que lleven `required`: nights es obligatorio y, si falta, como en la línea comentada, Dart no compila. Los demás tienen un valor por defecto: sin guests se cuentan 2 personas y sin breakfast, sin desayuno.
La función button muestra para qué sirven de verdad: las llamadas largas se leen solas. Es la forma en que se escribe Flutter: Text('Hi', style: ..., textAlign: ...) o Padding(padding: ..., child: ...) son llamadas con parámetros con nombre, y es lo que genera DMarlon Studio con los widgets que usted coloca en el lienzo de teléfono.
Código · main.dart
// Optional positional parameters go in [ ], with a default value.String greet(String name, [String greeting = 'Hello']) => '$greeting, $name!';// Named parameters go in { }; required makes one compulsory.void book(String hotel, {required int nights, int guests = 2, bool breakfast = false}) { int cost = nights * guests * 45; if (breakfast) cost += nights * guests * 8; String extra = breakfast ? ' with breakfast' : ''; print('$hotel: $nights nights, $guests guests$extra = $cost euros');}// Named parameters with defaults make long calls easy to read.String button(String text, {String colour = 'blue', bool rounded = true}) => '[$text] $colour${rounded ? ', rounded' : ''}';void main() { print(greet('Marta')); print(greet('Marta', 'Good morning')); // Named arguments carry their name and can go in any order. book('Hotel Sol', nights: 3); book('Hotel Mar', guests: 3, nights: 2); book('Casa Rural', nights: 4, breakfast: true, guests: 4); // book('Hotel Sol'); // Error: nights is required. print(button('Buy')); print(button('Cancel', colour: 'grey', rounded: false));}Salida · dart run main.dart
Hello, Marta! Good morning, Marta! Hotel Sol: 3 nights, 2 guests = 270 euros Hotel Mar: 2 nights, 3 guests = 270 euros Casa Rural: 4 nights, 4 guests with breakfast = 848 euros [Buy] blue, rounded [Cancel] grey
Para recordar
[tipo nombre = valor]es opcional y va por posición.{tipo nombre = valor}va por nombre:nombre: valor.- Los argumentos con nombre pueden ir en cualquier orden.
requiredhace obligatorio un parámetro con nombre.- Flutter usa parámetros con nombre en todos sus widgets.
Ejercicio
Escriba una función pizza con un parámetro size obligatorio con nombre y los parámetros cheese (por defecto true) y toppings (por defecto 0), que escriba el pedido y su precio; llámela de tres maneras distintas.