В чем разница между использованием «==» и «is» во Flutter / Dart в условном операторе if [дубликат]

Dec 02 2020

Я делаю учебник по BLoC во Flutter, и преподаватель использует ключевое слово «is» в своем условном операторе if, который, по его словам, «умно передает» состояние. Может ли кто-нибудь помочь мне понять, как оператор "is" дает мне доступ к состоянию блока в приведенном ниже коде?

BlocBuilder<WeatherBloc, WeatherState>(
            builder: (context, state) {
              if (state is WeatherLoaded) {
                return buildColumnWithData(context,state.weather);
              }

Когда я попробовал тот же код с if (state == WeatherLoaded), я не смог передать state.weather в функцию buildColumnWithData. Почему это?

Ответы

4 Lesiak Dec 02 2020 at 05:08

'==' - оператор равенства .

Чтобы проверить, представляют ли два объекта x и y одно и то же, используйте оператор ==. (В редком случае, когда вам нужно знать, являются ли два объекта одним и тем же объектом, используйте вместо этого функцию identify ().) Вот как работает оператор ==:

Если x или y равны нулю, верните истину, если оба равны нулю, и ложь, если только один из них равен нулю.

Вернуть результат вызова метода x. == (y). (Это верно, такие операторы, как ==, являются методами, которые вызываются для их первого операнда. Подробнее см. В разделе Операторы.)

'is' - оператор проверки типа

Результатом obj is Tявляется истина, если obj реализует интерфейс, указанный T. Например, obj is Object всегда истинен.

В вашем коде:

isпроверяет, является ли состояние экземпляром WeatherLoadedкласса.

Кроме того, вам не нужно выполнять приведение к, WeatherLoadedесли проверка прошла успешно - в области действия оператора if переменная состояния WeatherLoadedпонижается до («умно передает состояние»).

С помощью ==оператора вы можете сравнить 2 экземпляра класса.