Ce face funcții săgeată (=>)
=> expresie este prescurtarea pentru { return expresie; }. Se folosește la funcții, metode, getteri și funcții anonime al căror corp este o singură expresie.
După => poate sta doar o expresie, nu instrucțiuni: nu poți pune if, for sau mai multe rânduri cu ;. Poți însă folosi operatorul ternar, o expresie switch, ?? sau throw.
Dacă funcția este void, => doar execută expresia: void salut() => print('Salut');.
Exemple
Exemplul 1: Funcții de o singură expresie
Fiecare funcție returnează direct rezultatul expresiei de după =>.
double ariaCerc(double r) => 3.14159 * r * r;
bool estePar(int n) => n % 2 == 0;
String initiale(String prenume, String nume) => '${prenume[0]}.${nume[0]}.';
void main() {
print(ariaCerc(2));
print(estePar(7));
print(initiale('Andrei', 'Mureșan'));
}
Rezultat
12.56636
false
A.M.
Exemplul 2: Getteri și metode cu =>
Forma scurtă este foarte des folosită în clase.
class Dreptunghi {
final double latime, inaltime;
Dreptunghi(this.latime, this.inaltime);
double get arie => latime * inaltime;
bool get estePatrat => latime == inaltime;
@override
String toString() => 'Dreptunghi $latime x $inaltime';
}
void main() {
final d = Dreptunghi(4, 4);
print('$d: arie ${d.arie}, pătrat: ${d.estePatrat}');
}
Rezultat
Dreptunghi 4.0 x 4.0: arie 16.0, pătrat: true
Exemplul 3: Cu expresie switch
Chiar dacă logica are mai multe cazuri, rămâne o singură expresie.
String ziua(int n) => switch (n) {
1 => 'luni',
2 => 'marți',
3 => 'miercuri',
4 => 'joi',
5 => 'vineri',
6 || 7 => 'weekend',
_ => throw RangeError.range(n, 1, 7),
};
void main() {
print([1, 3, 6].map(ziua).join(', '));
}
Rezultat
luni, miercuri, weekend
Greșeli frecvente
- Instrucțiuni după
=>:=> if (x) ...nu compilează. Folosește corp cu acolade. => { ... }: nu este un bloc, ci un literal deSetsauMap! Alege fie=>, fie{ }.- Expresii foarte lungi după
=>: devin greu de citit; corpul cu acolade este mai clar.
Comenzi înrudite
funcții: Blocuri de cod cu nume, care primesc parametri și returnează o valoare; în Dart sunt și obiecte.funcții anonime: Funcții fără nume, scrise direct unde sunt folosite (lambda, closure); își amintesc variabilele din jur.get și set: Proprietăți calculate (get) și proprietăți cu validare la atribuire (set), folosite ca niște câmpuri.