Dans Flutter / Dart, quelle est la différence entre l'utilisation de «==» et de «is» dans une instruction if conditionnelle [duplicate]
Je suis en train de faire un tutoriel sur BLoC dans Flutter et le tuteur utilise le mot-clé "est" dans son instruction conditionnelle if, qu'il a dit "smartcasts" l'état. Quelqu'un peut-il m'aider à comprendre comment l'opérateur "is" me donne accès à l'état du bloc dans le code ci-dessous?
BlocBuilder<WeatherBloc, WeatherState>(
builder: (context, state) {
if (state is WeatherLoaded) {
return buildColumnWithData(context,state.weather);
}
Quand j'ai essayé le même code avec if (state == WeatherLoaded), je ne suis pas en mesure de passer le state.weather dans la fonction buildColumnWithData. Pourquoi est-ce?
Réponses
'==' est un opérateur d'égalité .
Pour tester si deux objets x et y représentent la même chose, utilisez l'opérateur ==. (Dans le cas rare où vous avez besoin de savoir si deux objets sont exactement le même objet, utilisez plutôt la fonction identique ().) Voici comment fonctionne l'opérateur ==:
Si x ou y est nul, renvoie true si les deux sont nulles et false si un seul est nul.
Renvoie le résultat de l'appel de la méthode x. == (y). (C'est vrai, les opérateurs tels que == sont des méthodes qui sont appelées sur leur premier opérande. Pour plus de détails, voir Opérateurs.)
'is' est un opérateur de test de type
Le résultat de
obj is T
est vrai si obj implémente l'interface spécifiée par T. Par exemple, obj est Object est toujours vrai.
Dans votre code:
is
vérifie si l'état est une instance de WeatherLoaded
classe.
En plus de cela, vous n'avez pas besoin de faire un cast pour WeatherLoaded
si la vérification a réussi - dans la portée de la variable d'état de l'instruction if WeatherLoaded
est downcast vers ("is smartcasts the state").
Avec ==
operator, vous pouvez comparer 2 instances d'une classe.