RangeError în Dart

Eroarea pentru o valoare numerică în afara intervalului permis, de exemplu un index greșit într-o listă.

Sintaxă
RangeError(dynamic message)
RangeError.range(num invalidValue, int? minValue, int? maxValue, [String? name, String? message])
static int checkValueInInterval(int value, int minValue, int maxValue, [String? name, String? message])
static int checkValidIndex(int index, dynamic indexable, [String? name, int? length, String? message])

Ce face RangeError

RangeError este un ArgumentError pentru numere în afara limitelor. Îl primești când accesezi lista[10] într-o listă de 3 elemente sau apelezi substring cu poziții greșite. Are câmpurile start, end (limitele) și invalidValue.

Metodele statice te ajută să verifici argumentele în funcțiile tale. RangeError.checkValueInInterval(v, min, max, 'nume') aruncă dacă v nu este între min și max (inclusiv) și altfel returnează v. RangeError.checkValidIndex(i, colectie) verifică dacă i este un index valid (0 ≤ i < length) pentru o colecție.

Există și RangeError.checkNotNegative și checkValidRange, pentru intervale de poziții.

Parametri

Parametru Descriere
value / index Valoarea verificată.
minValue, maxValue Limitele permise, inclusiv.
indexable Colecția (cu length) pentru care se verifică indexul.
name, message Numele parametrului și mesajul (opționale).

Ce returnează

Metodele de verificare returnează valoarea, dacă este validă.

Exemple

Exemplul 1: RangeError din liste și texte

void main() {
  var orase = ['Iași', 'Cluj', 'Brașov'];
  try {
    print(orase[3]);
  } on RangeError catch (e) {
    print(e.message);
    print('valoare ${e.invalidValue}, limite ${e.start}..${e.end}');
  }
  try {
    print('Iași'.substring(2, 9));
  } on RangeError catch (e) {
    print(e);
  }
}

Rezultat

Invalid value
valoare 3, limite 0..2
RangeError (end): Invalid value: Not in inclusive range 2..4: 9

Exemplul 2: Verificarea argumentelor

void puneNota(Map<String, int> catalog, String elev, int nota) {
  catalog[elev] = RangeError.checkValueInInterval(nota, 1, 10, 'nota');
}

String loc(List<String> clasament, int pozitie) {
  RangeError.checkValidIndex(pozitie, clasament, 'pozitie');
  return clasament[pozitie];
}

void main() {
  var catalog = <String, int>{};
  puneNota(catalog, 'Ana', 9);
  try {
    puneNota(catalog, 'Mihai', 11);
  } on RangeError catch (e) {
    print(e);
  }
  print(catalog);
  var podium = ['Ioana', 'Radu', 'Ana'];
  print(loc(podium, 0));
  try {
    loc(podium, 3);
  } on RangeError catch (e) {
    print(e);
  }
}

Rezultat

RangeError (nota): Invalid value: Not in inclusive range 1..10: 11
{Ana: 9}
Ioana
RangeError (pozitie): Index out of range: index should be less than 3: 3

Greșeli frecvente

  • Parcurgi o listă cu i <= lista.length. Ultimul index valid este length - 1; condiția corectă este i < lista.length.

Comenzi înrudite

  • ArgumentError: Eroarea aruncată când o funcție primește un argument nepermis; ArgumentError.value include și valoarea greșită.
  • Error: Clasa de bază pentru greșelile de programare (index greșit, argument invalid); stackTrace arată unde a fost aruncată.
  • String.substring: substring extrage o bucată din text între două poziții; operatorul [] dă caracterul de la o poziție.
  • List.operator[]: lista[i] citește elementul de pe poziția i; lista[i] = x îl înlocuiește.