W Flutter / Dart, jaka jest różnica między używaniem „==” a „is” w warunkowej instrukcji if [duplicate]

Dec 02 2020

Robię samouczek na temat BLoC we Flutterze, a nauczyciel używa słowa kluczowego „jest” w swojej instrukcji warunkowej if, które, jak powiedział, „wyświetla stan”. Czy ktoś może mi pomóc zrozumieć, w jaki sposób operator „jest” daje mi dostęp do stanu bloku w poniższym kodzie?

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

Kiedy próbowałem tego samego kodu z if (state == WeatherLoaded), nie mogę przekazać state.weather do funkcji buildColumnWithData. Dlaczego to?

Odpowiedzi

4 Lesiak Dec 02 2020 at 05:08

„==” jest operatorem równości .

Aby sprawdzić, czy dwa obiekty xiy reprezentują to samo, użyj operatora ==. (W rzadkich przypadkach, gdy chcesz wiedzieć, czy dwa obiekty są dokładnie tym samym obiektem, użyj zamiast tego funkcji identycznej ()). Oto jak działa operator ==:

Jeśli x lub y jest null, zwraca wartość true, jeśli oba są null, i false, jeśli tylko jeden jest pusty.

Zwróć wynik wywołania metody x. == (y). (Zgadza się, operatory takie jak == są metodami wywoływanymi na ich pierwszym operandzie. Aby uzyskać szczegółowe informacje, zobacz Operatory).

„is” jest operatorem testu typu

Wynik obj is Tjest prawdziwy, jeśli obj implementuje interfejs określony przez T. Na przykład, obj to Object jest zawsze prawdziwe.

W swoim kodzie:

issprawdza, czy stan jest instancją WeatherLoadedklasy.

Co więcej, nie musisz wykonywać rzutowania do, WeatherLoadedjeśli sprawdzenie się powiodło - w zakresie zmiennej stanu instrukcji if WeatherLoadedjest redukowana do („is smartcasts the state”).

Za pomocą ==operatora możesz porównać 2 wystąpienia klasy.