Ce face Symbol
Un Symbol reprezintă numele unui membru din program, nu valoarea lui. Literalul #salveaza este simbolul pentru numele salveaza. Același simbol se poate crea și cu constructorul Symbol('salveaza'); cele două sunt egale.
Simbolurile apar în locurile în care Dart lucrează cu nume de membri ca date: parametrii numiți din Function.apply ({#rotunjit: true}) și Invocation.memberName din noSuchMethod.
Spre deosebire de texte, numele din simbolurile literale rămân corecte și după ce un compilator scurtează (minifică) numele din cod, de exemplu la compilarea pentru web. În codul de zi cu zi le folosești rar.
Parametri
| Parametru | Descriere |
|---|---|
name |
Numele identificatorului. |
Exemple
Exemplul 1: Literal și constructor
void main() {
var s1 = #salveaza;
const s2 = Symbol('salveaza');
print(s1);
print(s1 == s2);
print(#salveaza == #sterge);
print(s1.runtimeType);
}
Rezultat
Symbol("salveaza")
true
false
Symbol
Exemplul 2: Parametri numiți dați ca simboluri
String salut(String nume, {String limba = 'ro', bool formal = false}) {
var baza = limba == 'ro' ? (formal ? 'Bună ziua' : 'Salut') : 'Hello';
return '$baza, $nume!';
}
void main() {
print(Function.apply(salut, ['Ana']));
print(Function.apply(salut, ['domnule Popescu'], {#formal: true}));
print(Function.apply(salut, ['Mihai'], {#limba: 'en'}));
}
Rezultat
Salut, Ana!
Bună ziua, domnule Popescu!
Hello, Mihai!
Greșeli frecvente
- Folosești texte în loc de simboluri:
Function.apply(f, [], {'formal': true})nu compilează; cheile trebuie să fieSymbol:{#formal: true}.
Comenzi înrudite
Function.apply: Apelează o funcție cu argumente date ca listă (poziționale) și Map (numite), construite în timpul rulării.Object.noSuchMethod: Metoda apelată când se cere unui obiect o metodă sau proprietate pe care nu o are (prin dynamic).