ArgumentError în Dart

Eroarea aruncată când o funcție primește un argument nepermis; ArgumentError.value include și valoarea greșită.

Sintaxă
ArgumentError([dynamic message, String? name])
ArgumentError.value(dynamic value, [String? name, dynamic message])

Ce face ArgumentError

ArgumentError semnalează că cine a apelat funcția i-a dat o valoare greșită: o vârstă negativă, un text gol unde trebuia un nume. Este o greșeală a codului apelant, deci este un Error, nu o excepție.

ArgumentError(mesaj, nume) primește mesajul și, opțional, numele parametrului. ArgumentError.value(valoare, nume, mesaj) păstrează și valoarea greșită în câmpul invalidValue, iar toString() o afișează: Invalid argument (varsta): Nu poate fi negativă: -3. Câmpurile sunt message, name și invalidValue.

Pentru numere în afara unui interval există subclasa specializată RangeError.

Parametri

Parametru Descriere
message Descrierea problemei.
name Numele parametrului.
value La ArgumentError.value: valoarea primită.

Ce returnează

Un obiect ArgumentError.

Exemple

Exemplul 1: Cele două constructoare

void main() {
  var e1 = ArgumentError('Numele nu poate fi gol', 'nume');
  print(e1);
  print(e1.name);
  var e2 = ArgumentError.value(-3, 'varsta', 'Nu poate fi negativă');
  print(e2);
  print(e2.invalidValue);
  print(e2.message);
}

Rezultat

Invalid argument(s) (nume): Numele nu poate fi gol
nume
Invalid argument (varsta): Nu poate fi negativă: -3
-3
Nu poate fi negativă

Exemplul 2: Validarea parametrilor unei funcții

double pretCuReducere(double pret, int procent) {
  if (pret < 0) throw ArgumentError.value(pret, 'pret', 'Prețul nu poate fi negativ');
  if (procent < 0 || procent > 100) {
    throw ArgumentError.value(procent, 'procent', 'Trebuie să fie între 0 și 100');
  }
  return pret * (100 - procent) / 100;
}

void main() {
  print(pretCuReducere(200, 25));
  for (var (pret, procent) in [(-5.0, 10), (100.0, 150)]) {
    try {
      pretCuReducere(pret, procent);
    } on ArgumentError catch (e) {
      print('${e.name} = ${e.invalidValue}: ${e.message}');
    }
  }
}

Rezultat

150.0
pret = -5.0: Prețul nu poate fi negativ
procent = 150: Trebuie să fie între 0 și 100

Greșeli frecvente

  • Inversezi ordinea la ArgumentError.value: primul este valoarea, apoi numele, apoi mesajul.
  • Arunci ArgumentError pentru date venite de la utilizator. Acolo datele greșite sunt normale; aruncă o FormatException sau o excepție proprie.

Comenzi înrudite

  • ArgumentError.checkNotNull: Verifică dacă o valoare nu este null; o returnează ca tip nenul sau aruncă ArgumentError.
  • RangeError: Eroarea pentru o valoare numerică în afara intervalului permis, de exemplu un index greșit într-o listă.
  • Error: Clasa de bază pentru greșelile de programare (index greșit, argument invalid); stackTrace arată unde a fost aruncată.
  • StateError: Eroarea aruncată când o operație nu are sens în starea curentă a obiectului, de exemplu first pe o listă goală.