Dans Flutter / Dart, quelle est la différence entre l'utilisation de «==» et de «is» dans une instruction if conditionnelle [duplicate]

Dec 02 2020

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

4 Lesiak Dec 02 2020 at 05:08

'==' 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 Test vrai si obj implémente l'interface spécifiée par T. Par exemple, obj est Object est toujours vrai.

Dans votre code:

isvérifie si l'état est une instance de WeatherLoadedclasse.

En plus de cela, vous n'avez pas besoin de faire un cast pour WeatherLoadedsi la vérification a réussi - dans la portée de la variable d'état de l'instruction if WeatherLoadedest downcast vers ("is smartcasts the state").

Avec ==operator, vous pouvez comparer 2 instances d'une classe.