as în Dart

Spune că o valoare are un anumit tip (cast); dacă nu are, aruncă TypeError. Tot as dă un prefix unui import.

Sintaxă
valoare as Tip                    // conversie de tip (cast)
import 'biblioteca.dart' as prefix;   // prefix pentru importuri

Ce face as

valoare as String îi spune analizorului „tratează această valoare ca String”. La rulare se verifică: dacă valoarea nu este de fapt un String, apare un TypeError. Nu face conversii (nu transformă '5' în 5); pentru asta există int.parse.

Se folosește când tu știi mai mult decât analizorul, de exemplu la datele venite din JSON (date['varsta'] as int). Când nu ești sigur de tip, folosește is sau un pattern, care nu aruncă excepții.

Același cuvânt are și un alt rol: import 'dart:math' as math; pune toate numele bibliotecii sub prefixul math (math.pi), ca să eviți conflictele de nume.

Exemple

Exemplul 1: Cast pentru date din JSON

jsonDecode întoarce dynamic; cu as spunem ce tipuri ne așteptăm să găsim.

import 'dart:convert';

void main() {
  final date = jsonDecode('{"nume": "Cristina", "varsta": 34, "orase": ["Iași", "Cluj"]}')
      as Map<String, dynamic>;

  final nume = date['nume'] as String;
  final varsta = date['varsta'] as int;
  final orase = (date['orase'] as List).cast<String>();

  print('$nume, $varsta ani, a locuit în ${orase.join(' și ')}');
}

Rezultat

Cristina, 34 ani, a locuit în Iași și Cluj

Exemplul 2: Cast greșit

Valoarea este un String, nu un int, așa că as int aruncă TypeError.

void main() {
  final Object pret = '25';
  try {
    final p = pret as int;
    print(p + 1);
  } on TypeError catch (e) {
    print('Eroare: $e');
  }
  print('Corect: ${int.parse(pret as String) + 1}');
}

Rezultat

Eroare: type 'String' is not a subtype of type 'int' in type cast
Corect: 26

Exemplul 3: Prefix de import

Cu as math, numele din dart:math se scriu cu prefix.

import 'dart:math' as math;

void main() {
  const raza = 3.0;
  print('Aria cercului: ${(math.pi * raza * raza).toStringAsFixed(2)}');
  print('Maximul: ${math.max(17, 42)}');
}

Rezultat

Aria cercului: 28.27
Maximul: 42

Greșeli frecvente

  • Să crezi că as convertește valori: '25' as int aruncă TypeError, nu întoarce 25.
  • as peste tot în loc de verificări: o singură valoare neașteptată oprește programul. Preferă is sau pattern-uri pentru date nesigure.
  • lista as List<String> pentru o listă creată ca List<dynamic>: eșuează chiar dacă elementele sunt texte. Folosește lista.cast<String>() sau List<String>.from(lista).

Comenzi înrudite

  • is și is!: Verifică la rulare dacă o valoare are un anumit tip; după verificare, variabila poate fi folosită ca acel tip.
  • import: Face disponibile în fișierul curent numele publice ale altei biblioteci: din SDK, dintr-un pachet sau din proiect.
  • dynamic: Tipul care dezactivează verificarea statică: orice metodă se poate apela, verificarea se face la rulare.
  • pattern-uri (destructurare): Desfac o valoare (record, listă, map, obiect) în variabile separate, într-o singură declarație.