43 votes

Qu'est-ce que l'affirmation fait à Dart ?

Je veux juste savoir à quoi ça sert de affirmer dans une Dart. J'ai essayé de le comprendre par moi-même mais je n'y arrive pas. Ce serait génial si quelqu'un m'expliquait l'utilisation de affirmer .

55voto

Esen Mehmet Points 3922

Mise à jour : voir ci-dessous à propos de null-safety additions.

Ce que @jamesdlin a dit est suffisant. En outre, si vous avez besoin d'un exemple concret, pensez à ceci :

import 'package:meta/meta.dart';

class Product {
  final int id;
  final String name;
  final int price;
  final String size;
  final String image;
  final int weight;

  const Product({
    @required this.id,
    @required this.name,
    @required this.price,
    this.size,
    this.image,
    this.weight,
  }) : assert(id != null && name != null && price != null);
}

Nous avons des produits et ils doivent avoir un prix, un id et un nom. Mais nous pouvons gérer d'autres champs comme, par exemple, une image pour quelque chose de générique ou une icône d'image vide, etc. De même, la taille et le poids ne sont pas obligatoires.

Donc, à la fin, nous devons nous assurer que les champs obligatoires ne doivent pas être nuls car ils sont obligatoires. Si vous faites cela, vous gérerez les valeurs nulles pendant le développement au lieu d'obtenir une erreur sur l'application publiée.

N'oubliez pas cette (de docs ):

Dans le code de production, les assertions sont ignorées, et les arguments d'assertion ne sont pas évalués.

Null-safety update: Puisqu'il s'agit d'un sujet sur assert le fait que Dart soit nullable ou pas ne veut rien dire. Parce que assert consiste à faire, eh bien, des affirmations.

Un exemple simple serait :

final text = Text('foo');
assert(text.data == 'foo', 'The data inside the Text must be foo!');

Mais dans notre exemple spécifique, nous devons faire quelques changements. Parce que id , name o price ne peut pas être nul avec cette syntaxe. Faisons quelques différences :

import 'package:meta/meta.dart';

class Product {
  final int id;
  final String name;
  final double price;
  final String? size;
  final String? image;
  final int? weight;

  const Product({
    required this.id,
    required this.name,
    required this.price,
    this.size,
    this.image,
    this.weight,
  }) : assert(id > 0 && name.isNotEmpty && price > 0.0);
}

Parce qu'ils ne sont pas sûrs, nous devons jouer avec les éléments suivants zero-values .

6voto

iDecode Points 3965

De aquí :

Pendant le développement, utilisez une instruction assert - assert(condition, optionalMessage) ; - pour interrompre l'exécution normale si une condition booléenne est fausse.

Supposons que vous voulez ouvrir une URL qui doit commencer par "https" . Comment allez-vous le confirmer ? Voici un exemple.

Exemple :

void openUrl({String url}) {
  assert(url.startsWith('https'), 'The url should start with https');

  // We can proceed as we 'https' in the url.
}

0voto

ayoub boumzebra Points 844

Un site affirmer est similaire à un Erreur en ce sens qu'il sert à signaler des états mauvais qui ne devraient jamais se produire. La différence est que affirme ne sont vérifiés qu'en mode débogage. Ils sont complètement ignorés en mode production.

Ex :

OverlayEntry({
  @required this.builder,
  bool opaque = false,
  bool maintainState = false,
}) : assert(builder != null),
      assert(opaque != null),
      assert(maintainState != null),
      _opaque = opaque,
      _maintainState = maintainState;

-1voto

Amit Singh Points 111

Assert est un mot-clé dans Dart qui est utilisé pour le débogage, et qui serait ignoré par le compilateur en mode production du logiciel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X