Di Flutter / Dart, apa perbedaan antara menggunakan “==” vs “is” dalam pernyataan if bersyarat [duplikat]
Saya melakukan tutorial tentang BLoC di Flutter dan tutor menggunakan kata kunci "adalah" dalam pernyataan bersyarat if, yang dia katakan "smartcasts" negara bagian. Adakah yang bisa membantu saya memahami bagaimana operator "adalah" memberi saya akses ke status blok pada kode di bawah ini?
BlocBuilder<WeatherBloc, WeatherState>(
builder: (context, state) {
if (state is WeatherLoaded) {
return buildColumnWithData(context,state.weather);
}
Ketika saya mencoba kode yang sama dengan if (state == WeatherLoaded), saya tidak dapat meneruskan state.weather ke dalam fungsi buildColumnWithData. Kenapa ini?
Jawaban
'==' adalah operator persamaan .
Untuk menguji apakah dua objek x dan y mewakili hal yang sama, gunakan operator ==. (Dalam kasus yang jarang terjadi di mana Anda perlu mengetahui apakah dua objek adalah objek yang sama persis, gunakan fungsi identik () sebagai gantinya.) Berikut cara kerja operator ==:
Jika x atau y null, kembalikan true jika keduanya null, dan false jika hanya satu yang null.
Kembalikan hasil dari pemanggilan metode x. == (y). (Benar, operator seperti == adalah metode yang dipanggil pada operan pertamanya. Untuk detailnya, lihat Operator.)
'adalah' adalah operator uji tipe
Hasil dari
obj is T
adalah benar jika obj mengimplementasikan antarmuka yang ditentukan oleh T. Sebagai contoh, obj adalah Objek selalu benar.
Dalam kode Anda:
is
memeriksa apakah negara adalah turunan WeatherLoaded
kelas.
Selain itu, Anda tidak perlu melakukan cast ke WeatherLoaded
jika pemeriksaan berhasil - dalam lingkup variabel pernyataan if adalah downcast ke WeatherLoaded
("adalah status smartcasts").
Dengan ==
operator, Anda dapat membandingkan 2 instance kelas.