Di Flutter / Dart, apa perbedaan antara menggunakan “==” vs “is” dalam pernyataan if bersyarat [duplikat]

Dec 02 2020

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

4 Lesiak Dec 02 2020 at 05:08

'==' 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 Tadalah benar jika obj mengimplementasikan antarmuka yang ditentukan oleh T. Sebagai contoh, obj adalah Objek selalu benar.

Dalam kode Anda:

ismemeriksa apakah negara adalah turunan WeatherLoadedkelas.

Selain itu, Anda tidak perlu melakukan cast ke WeatherLoadedjika pemeriksaan berhasil - dalam lingkup variabel pernyataan if adalah downcast ke WeatherLoaded("adalah status smartcasts").

Dengan ==operator, Anda dapat membandingkan 2 instance kelas.