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 .
Réponses
Trop de publicités?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
.
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.
}
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;