Operator ? dan !
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 25 dari 110.
Saat bekerja dengan tipe nullable, Dart menyediakan dua operator penting untuk mengakses nilai dengan aman. Operator akses yang memperhatikan null ?. dan operator penegasan null ! memberimu kendali atas cara menangani nilai yang mungkin null.
Operator ?. mengakses property atau method dengan aman pada nilai yang bisa bernilai null. Jika nilainya null, seluruh ekspresi mengembalikan null alih-alih menyebabkan program crash:
String? name = 'Alice';
print(name?.length); // 5
name = null;
print(name?.length); // null (tidak terjadi crash!)Operator ! memberi tahu Dart, "Saya yakin nilai ini tidak null." Operator ini mengubah tipe yang nullable menjadi non-nullable, tetapi memunculkan error jika nilainya ternyata null:
String? maybeName = 'Bob';
String definite = maybeName!; // OK, kita menegaskan bahwa nilainya bukan null
print(definite.length); // 3
String? empty = null;
// String crash = empty!; // error saat dijalankan! Nilainya nullGunakan ?. saat kamu ingin menangani nilai null dengan baik. Gunakan ! hanya saat kamu benar-benar yakin suatu nilai ada, mungkin setelah memeriksanya dengan pernyataan if atau saat kamu tahu logikanya menjamin adanya nilai. Penggunaan ! secara berlebihan menggagalkan tujuan keamanan null dan dapat menyebabkan crash saat runtime.
Tantangan
MudahMari kita buat sistem inventaris produk yang menunjukkan cara menggunakan nilai nullable dengan aman menggunakan operator ?. dan !.
Kamu akan membuat dua file untuk menata kodemu:
product.dart: Definisikan classProductyang merepresentasikan item dalam inventaris. Beberapa produk memiliki informasi lengkap, sementara produk lainnya masih dalam proses pencatatan. Class-mu harus memiliki:String nameyang non-nullable, setiap produk harus memiliki namadouble priceyang non-nullable, setiap produk harus memiliki hargaString? descriptionyang nullable, beberapa produk belum memiliki deskripsiString? categoryyang nullable, beberapa produk belum dikategorikan- Constructor yang menerima
namedanpricesebagai parameter wajib - Method
getDescriptionLength()yang mengembalikan panjang deskripsi menggunakan?., ataunulljika tidak ada deskripsi - Method
getCategoryUppercase()yang mengembalikan kategori dalam huruf kapital menggunakan!. Method ini mengasumsikan kategori sudah ditetapkan - Method
displayProduct()yang mencetak informasi produk, menampilkanNo descriptionsaat description bernilai null danUncategorizedsaat category bernilai null
main.dart: Impor class produkmu dan tunjukkan cara menggunakan kedua operator:- Buat produk bernama
'Laptop'dengan harga999.99, lalu tetapkan deskripsinya menjadi'High-performance computing device'dan kategorinya menjadi'Electronics' - Buat produk bernama
'Mystery Item'dengan harga49.99(biarkan description dan category bernilai null) - Untuk Laptop: panggil
displayProduct(), cetakDescription length: [length]menggunakangetDescriptionLength(), dan cetakCategory: [uppercase]menggunakangetCategoryUppercase() - Untuk Mystery Item: panggil
displayProduct()dan cetakDescription length: [length]menggunakangetDescriptionLength()(hasilnya akan menampilkannull)
- Buat produk bernama
Method displayProduct() harus mencetak dengan format berikut:
Product: [name] - $[price]
Description: [description or "No description"]
Category: [category or "Uncategorized"]Output yang diharapkan:
Product: Laptop - $999.99
Description: High-performance computing device
Category: Electronics
Description length: 32
Category: ELECTRONICS
Product: Mystery Item - $49.99
Description: No description
Category: Uncategorized
Description length: nullCoba sendiri
import 'product.dart';
void main() {
// TODO: Buat produk bernama 'Laptop' dengan harga 999.99
// Lalu atur deskripsinya menjadi 'High-performance computing device'
// Dan atur kategorinya menjadi 'Electronics'
// TODO: Buat produk bernama 'Mystery Item' dengan harga 49.99
// Biarkan deskripsi dan kategorinya bernilai null
// TODO: Untuk Laptop:
// - Panggil displayProduct()
// - Cetak "Description length: [length]" menggunakan getDescriptionLength()
// - Cetak "Category: [uppercase]" menggunakan getCategoryUppercase()
// TODO: Untuk Mystery Item:
// - Panggil displayProduct()
// - Cetak "Description length: [length]" menggunakan getDescriptionLength()
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online