Ce face parametri opționali și numiți
Parametrii obișnuiți sunt poziționali și obligatorii. După ei poți avea fie parametri poziționali opționali, între paranteze drepte [...], fie parametri numiți, între acolade {...}, dar nu ambele în aceeași funcție.
Parametrii numiți se dau la apel cu numele lor: trimite(text, prioritar: true). Ordinea lor nu contează și codul se citește ușor. Sunt opționali implicit; cu required devin obligatorii.
Un parametru opțional are fie o valoare implicită (= 0, care trebuie să fie constantă), fie un tip nullabil (int?), caz în care primește null dacă lipsește.
Parametri
| Parametru | Descriere |
|---|---|
[Tip x = implicit] |
Poziționali opționali: se dau în ordine, de la stânga la dreapta, și pot lipsi de la final. |
{Tip x = implicit} |
Numiți: se dau cu x: valoare, în orice ordine. |
required |
Face un parametru numit obligatoriu. |
Exemple
Exemplul 1: Parametri poziționali opționali
titlu are valoare implicită, oras poate fi null.
String salut(String nume, [String titlu = 'dl./dna.', String? oras]) {
final din = oras == null ? '' : ' din $oras';
return 'Bună ziua, $titlu $nume$din!';
}
void main() {
print(salut('Popescu'));
print(salut('Ionescu', 'dr.'));
print(salut('Marin', 'prof.', 'Pitești'));
}
Rezultat
Bună ziua, dl./dna. Popescu!
Bună ziua, dr. Ionescu!
Bună ziua, prof. Marin din Pitești!
Exemplul 2: Parametri numiți
La apel, numele arată clar ce înseamnă fiecare valoare; ordinea nu contează.
String formatPret(double suma, {String moneda = 'lei', int zecimale = 2, bool cuTva = false}) {
final total = cuTva ? suma * 1.19 : suma;
return '${total.toStringAsFixed(zecimale)} $moneda';
}
void main() {
print(formatPret(100));
print(formatPret(100, cuTva: true));
print(formatPret(49.99, zecimale: 0, moneda: 'euro'));
}
Rezultat
100.00 lei
119.00 lei
50 euro
Exemplul 3: Parametri numiți în constructor
Stilul folosit peste tot în Flutter: parametri numiți cu this. și required.
class Comanda {
final String client;
final int bucati;
final bool livrare;
Comanda({required this.client, this.bucati = 1, this.livrare = false});
@override
String toString() => '$client: $bucati buc., ${livrare ? 'cu' : 'fără'} livrare';
}
void main() {
print(Comanda(client: 'Ana'));
print(Comanda(livrare: true, client: 'Vlad', bucati: 3));
}
Rezultat
Ana: 1 buc., fără livrare
Vlad: 3 buc., cu livrare
Greșeli frecvente
- Amestecul
[...]și{...}în aceeași funcție: nu este permis. - Parametru numit nenul fără valoare implicită și fără
required:The parameter 'x' can't have a value of 'null' because of its type. - Valoare implicită care nu este constantă (
{DateTime d = DateTime.now()}): foloseșteDateTime? dșid ??= DateTime.now()în corp.
Comenzi înrudite
required: Face un parametru numit obligatoriu: apelul fără el nu compilează.funcții: Blocuri de cod cu nume, care primesc parametri și returnează o valoare; în Dart sunt și obiecte.constructori: Funcțiile speciale care creează și inițializează obiectele unei clase.