Ce face required
Parametrii numiți (cei din acolade) sunt opționali implicit. required în fața unuia îl face obligatoriu: dacă apelul nu-l dă, analizorul raportează eroare încă de la compilare.
Ai astfel avantajele ambelor lumi: apelul se citește ușor (Utilizator(nume: 'Ana', email: '...')), dar nu poți uita un câmp important. Un parametru required poate avea și tip nullabil: atunci valoarea trebuie dată explicit, chiar dacă este null.
required se folosește doar la parametri numiți. Parametrii poziționali obișnuiți sunt deja obligatorii.
Exemple
Exemplul 1: Parametri numiți obligatorii
catre și subiect trebuie date; cc este opțional.
void trimiteEmail({required String catre, required String subiect, String? cc}) {
print('Către: $catre');
print('Subiect: $subiect');
if (cc != null) print('CC: $cc');
print('---');
}
void main() {
trimiteEmail(catre: 'ana@exemplu.ro', subiect: 'Ședința de luni');
trimiteEmail(subiect: 'Factură', catre: 'contabil@firma.ro', cc: 'sef@firma.ro');
// trimiteEmail(catre: 'ana@exemplu.ro'); // eroare: lipsește 'subiect'
}
Rezultat
Către: ana@exemplu.ro
Subiect: Ședința de luni
---
Către: contabil@firma.ro
Subiect: Factură
CC: sef@firma.ro
---
Exemplul 2: required în constructor
Un obiect Elev nu poate fi creat fără nume și clasă.
class Elev {
final String nume;
final String clasa;
final double? medie;
Elev({required this.nume, required this.clasa, this.medie});
}
void main() {
final e = Elev(nume: 'Darius', clasa: 'a X-a A');
print('${e.nume}, ${e.clasa}, medie: ${e.medie ?? 'neîncheiată'}');
}
Rezultat
Darius, a X-a A, medie: neîncheiată
Exemplul 3: required cu tip nullabil
telefon poate fi null, dar trebuie scris explicit la apel, ca să fie o decizie conștientă.
void inregistreaza({required String nume, required String? telefon}) {
print('$nume: ${telefon ?? 'fără telefon'}');
}
void main() {
inregistreaza(nume: 'Raluca', telefon: '0733123456');
inregistreaza(nume: 'Costin', telefon: null);
}
Rezultat
Raluca: 0733123456
Costin: fără telefon
Greșeli frecvente
- Apel fără parametrul obligatoriu:
The named parameter 'subiect' is required, but there's no corresponding argument. requiredla un parametru pozițional:void f(required int x)nu compilează.requiredplus valoare implicită: nu are sens, parametrul nu poate fi omis oricum (analizorul dă eroare).
Comenzi înrudite
parametri opționali și numiți: Parametrii între [ ] sunt poziționali opționali; cei între { } sunt numiți și se dau cu nume: valoare.constructori: Funcțiile speciale care creează și inițializează obiectele unei clase.null safety (? ! ?? ??=): Tipurile nu pot fi null decât dacă au ?; operatorii !, ?? și ??= lucrează cu valorile care pot lipsi.