W Flutter / Dart, jaka jest różnica między używaniem „==” a „is” w warunkowej instrukcji if [duplicate]
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
„==” 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 T
jest prawdziwy, jeśli obj implementuje interfejs określony przez T. Na przykład, obj to Object jest zawsze prawdziwe.
W swoim kodzie:
is
sprawdza, czy stan jest instancją WeatherLoaded
klasy.
Co więcej, nie musisz wykonywać rzutowania do, WeatherLoaded
jeśli sprawdzenie się powiodło - w zakresie zmiennej stanu instrukcji if WeatherLoaded
jest redukowana do („is smartcasts the state”).
Za pomocą ==
operatora możesz porównać 2 wystąpienia klasy.