Keamanan Null dalam class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 28 dari 110.
Saat merancang class, kamu perlu menentukan field mana yang wajib dan mana yang opsional. Keamanan null memengaruhi cara kamu mendeklarasikan variabel instans dan menulis konstruktor.
Field yang tidak boleh bernilai null harus diinisialisasi sebelum isi konstruktor dijalankan. Kamu dapat melakukannya melalui daftar inisialisasi, parameter konstruktor, atau nilai default:
class User {
String name; // Harus diinisialisasi
String? bio; // Opsional, boleh bernilai null
int age = 0; // Memiliki nilai bawaan
User(this.name); // name diinisialisasi melalui parameter
}Untuk field yang nullable, kamu bisa membiarkannya tanpa inisialisasi karena nilai default-nya adalah null. Ini berguna untuk data opsional:
class Product {
String title;
String? description; // Deskripsi produk opsional
double? discount; // Secara default, tidak ada diskon
Product(this.title);
}
var item = Product('Laptop');
print(item.description); // null
print(item.discount); // nullSaat mengakses field yang bisa bernilai null, gunakan operator yang memahami null yang sudah kamu pelajari:
class Order {
String id;
User? customer;
Order(this.id);
String getCustomerName() {
return customer?.name ?? 'Guest';
}
}Kata kunci required pada parameter bernama memastikan pemanggil memberikan nilai penting:
class Account {
String email;
String? phone;
Account({required this.email, this.phone});
}
var acc = Account(email: 'test@mail.com'); // phone bersifat opsionalDengan memilih field nullable dan non-nullable secara cermat, kamu membuat class yang menyampaikan dengan jelas data mana yang wajib dan mana yang opsional.
Tantangan
MudahMari kita buat sistem pemesanan hotel yang menunjukkan cara merancang class dengan perpaduan yang cermat antara field wajib dan opsional menggunakan keamanan null.
Kamu akan mengatur kodemu ke dalam dua file:
reservation.dart: Definisikan classReservationyang merepresentasikan pemesanan hotel. Setiap pemesanan memerlukan informasi penting tertentu, tetapi beberapa detail merupakan tambahan opsional yang mungkin diberikan atau tidak diberikan oleh tamu. Class-mu harus memiliki:String guestNameyang tidak dapat bernilai null: setiap pemesanan harus memiliki nama tamuint roomNumberyang tidak dapat bernilai null: setiap pemesanan harus memiliki nomor kamarint nightsyang tidak dapat bernilai null dengan nilai default1: masa inap minimum adalah satu malamString? specialRequestsyang dapat bernilai null: tamu mungkin memiliki permintaan khususDateTime? checkInTimeyang dapat bernilai null: waktu kedatangan yang tepat mungkin belum diketahui- Sebuah constructor yang menggunakan parameter bernama dengan
requireduntukguestNamedanroomNumber, sedangkannightsharus opsional dengan nilai defaultnya - Sebuah method
getRequestsSummary()yang mengembalikan permintaan khusus jika diberikan, atau'No special requests'menggunakan operator?? - Sebuah method
getArrivalInfo()yang mengembalikan representasi string waktu check-in menggunakan?., ataunulljika belum diatur - Sebuah method
printConfirmation()yang menampilkan detail pemesanan
main.dart: Impor class pemesananmu dan buat pemesanan yang menunjukkan berbagai kombinasi data wajib dan opsional:- Buat pemesanan untuk tamu
'Sarah Johnson'di kamar101selama3malam, dengan permintaan khusus'Late checkout'dan waktu check-in diatur keDateTime(2024, 6, 15, 14, 30) - Buat pemesanan untuk tamu
'Mike Chen'di kamar205(gunakan jumlah malam default), dengan hanya permintaan khusus yang diatur ke'Extra pillows' - Buat pemesanan untuk tamu
'Emma Davis'di kamar310selama2malam (biarkan kedua field opsional bernilai null) - Untuk setiap pemesanan secara berurutan, panggil
printConfirmation(), lalu cetakArrival: [result]menggunakangetArrivalInfo()
- Buat pemesanan untuk tamu
Method printConfirmation() harus mencetak dalam format ini:
=== Reservation Confirmed ===
Guest: [guestName]
Room: [roomNumber]
Nights: [nights]
Requests: [getRequestsSummary()]Output yang diharapkan:
=== Reservation Confirmed ===
Guest: Sarah Johnson
Room: 101
Nights: 3
Requests: Late checkout
Arrival: 2024-06-15 14:30:00.000
=== Reservation Confirmed ===
Guest: Mike Chen
Room: 205
Nights: 1
Requests: Extra pillows
Arrival: null
=== Reservation Confirmed ===
Guest: Emma Davis
Room: 310
Nights: 2
Requests: No special requests
Arrival: nullCoba sendiri
import 'reservation.dart';
void main() {
// TODO: Buat reservasi untuk 'Sarah Johnson'
// Kamar 101, 3 malam, permintaan khusus: 'Late checkout'
// Waktu check-in: DateTime(2024, 6, 15, 14, 30)
// TODO: Buat reservasi untuk 'Mike Chen'
// Kamar 205, gunakan jumlah malam default, permintaan khusus: 'Extra pillows'
// Waktu check-in tidak ditentukan
// TODO: Buat reservasi untuk 'Emma Davis'
// Kamar 310, 2 malam, tanpa permintaan khusus, tanpa waktu check-in
// TODO: Untuk setiap reservasi sesuai urutan:
// 1. Panggil printConfirmation()
// 2. Cetak 'Arrival: [result]' menggunakan getArrivalInfo()
}
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