Iterable.cast în Dart

Privește elementele ca fiind de alt tip; fiecare element este verificat abia când este citit.

Sintaxă
Iterable<R> cast<R>()

Ce face Iterable.cast

cast<R>() returnează o „vedere” a colecției în care elementele au tipul R. Nu copiază nimic și nu verifică nimic pe loc: fiecare element este convertit (as R) abia când îl citești. Dacă un element nu are tipul cerut, apare TypeError în acel moment.

Este util pentru date venite ca List<dynamic> sau List<Object?>, de exemplu dintr-un JSON decodat, despre care știi că au un anumit tip. Dacă vrei doar elementele de tipul potrivit, fără erori, folosește whereType<R>(). List, Set și Map au propriile metode cast.

Parametri

Parametru Descriere
R Tipul în care sunt văzute elementele.

Ce returnează

Un Iterable<R> (pe o listă, o List<R>) care verifică elementele la citire.

Exemple

Exemplul 1: Date dintr-un JSON decodat

import 'dart:convert';

void main() {
  final decodat = jsonDecode('{"note": [9, 10, 7]}') as Map<String, dynamic>;
  final brute = decodat['note'] as List<dynamic>;
  final List<int> note = brute.cast<int>();
  print('suma: ${note.reduce((a, b) => a + b)}');
}

Rezultat

suma: 26

Exemplul 2: cast verifică abia la citire

void main() {
  final amestec = <Object>[1, 2, 'trei', 4];
  final numere = amestec.cast<int>();
  print('cast a reușit, încă nimic verificat');
  try {
    for (final n in numere) {
      print(n * 10);
    }
  } on TypeError {
    print('TypeError: "trei" nu este int');
  }
  print('whereType: ${amestec.whereType<int>()}');
}

Rezultat

cast a reușit, încă nimic verificat
10
20
TypeError: "trei" nu este int
whereType: (1, 2, 4)

Greșeli frecvente

  • Crezi că cast transformă valorile (de exemplu, text în număr). Nu face conversii: verifică doar tipul. Pentru conversii folosește map(int.parse).

Comenzi înrudite

  • Iterable.where: Păstrează doar elementele care trec un test; whereType păstrează doar elementele de un anumit tip.
  • Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.
  • Stream.cast: Prezintă stream-ul ca Stream<R>; fiecare valoare este verificată la rulare că are tipul R.