Ce face library
În Dart, fiecare fișier este automat o bibliotecă, chiar și fără directiva library. Biblioteca este unitatea de confidențialitate: numele care încep cu _ sunt vizibile doar în interiorul ei (fișierul și eventualele lui part-uri).
Directiva library; (fără nume, din Dart 2.19) se scrie la începutul fișierului când vrei să atașezi documentația /// sau adnotări întregii biblioteci, nu primei declarații. Forma veche, cu nume (library magazin.preturi;), mai apare în cod vechi; numele nu mai sunt necesare.
Exemplele de pe această pagină sunt fișiere singure: fiecare este o bibliotecă, iar _ se comportă exact cum se descrie.
Exemple
Exemplul 1: library cu documentație
Comentariul /// descrie biblioteca, pentru că stă deasupra lui library;. Programul rulează normal.
/// Calculează costul unei călătorii cu mașina.
library;
const pretBenzina = 7.35;
double costDrum(double km, double consumLa100) => km * consumLa100 / 100 * pretBenzina;
void main() {
print('București - Brașov: ${costDrum(170, 6.5).toStringAsFixed(2)} lei');
}
Rezultat
București - Brașov: 81.22 lei
Exemplul 2: Confidențialitate la nivel de bibliotecă
_pin este privat, dar main îl poate citi pentru că este în aceeași bibliotecă (același fișier). Din alt fișier, card._pin ar da eroare.
library;
class Card {
final String titular;
final String _pin;
Card(this.titular, this._pin);
bool verifica(String pin) => pin == _pin;
}
void main() {
final card = Card('Sorina', '4821');
print(card.verifica('1111'));
print(card.verifica('4821'));
print('Acces din aceeași bibliotecă: ${card._pin.length} cifre');
}
Rezultat
false
true
Acces din aceeași bibliotecă: 4 cifre
Greșeli frecvente
- Să crezi că
libraryeste obligatoriu: fiecare fișier este oricum o bibliotecă. - Nume de bibliotecă inventate pentru „organizare” (
library utilitare.text.format;): sunt depășite, foloseștelibrary;sau nimic. libraryscris dupăimport: directiva trebuie să fie prima din fișier (doar comentariile pot sta înainte).
Comenzi înrudite
part și part of: Împarte o singură bibliotecă în mai multe fișiere, care își văd reciproc și numele private.export: Face ca numele dintr-o altă bibliotecă să fie disponibile și celor care importă biblioteca curentă.import: Face disponibile în fișierul curent numele publice ale altei biblioteci: din SDK, dintr-un pachet sau din proiect.comentarii și documentare: Textul ignorat de compilator: // pe un rând, /* */ pe mai multe, și /// pentru documentația generată cu dart doc.