Variabel Late
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 19 dari 110.
Kata kunci late memberi tahu Dart bahwa variabel yang tidak dapat bernilai null akan diinisialisasi sebelum digunakan, meskipun tidak langsung diberi nilai. Ini berguna saat kamu tidak dapat menginisialisasi field dalam deklarasi atau constructor, tetapi yakin field tersebut akan memiliki nilai sebelum diakses.
class User {
late String username;
void initialize(String name) {
username = name;
}
void greet() {
print('Hello, $username!');
}
}
User user = User();
user.initialize('Alice');
user.greet(); // Halo, Alice!Tanpa late, Dart akan mengeluhkan bahwa username belum diinisialisasi. Modifier late menjanjikan bahwa kamu akan menetapkan nilai sebelum membacanya.
Manfaat lain dari late adalah inisialisasi tertunda. Variabel late dengan inisialisator tidak akan menghitung nilainya sampai pertama kali diakses:
class Config {
late String settings = loadSettings();
String loadSettings() {
print('Loading...');
return 'default';
}
}
Config config = Config();
print('Config created');
print(config.settings); // "Loading..." dicetak di sini, lalu "default"method loadSettings() hanya berjalan saat settings pertama kali diakses, bukan saat object dibuat. Namun, berhati-hatilah, mengakses variabel late sebelum diinisialisasi akan menyebabkan error saat program berjalan.
Tantangan
MudahMari kita buat pengelola koneksi database yang menunjukkan inisialisasi tertunda dan inisialisasi malas menggunakan variabel late.
Kamu akan membuat dua file untuk mengatur kodemu:
database.dart: Definisikan classDatabaseyang menyimulasikan koneksi database. Class-mu harus memiliki:late String connectionStringyang akan diatur setelah object dibuatlate String statusdengan penginisialisasi malas yang mencetakChecking connection...dan mengembalikan'Connected'- method
connect(String connStr)yang mengaturconnectionStringdan mencetakConnection configured: [connectionString] - method
query(String sql)yang mencetakExecuting on [connectionString]: [sql] - method
checkStatus()yang mencetakStatus: [status](ini akan memicu inisialisasi malas saat pertama kali dipanggil)
main.dart: Impor class database-mu dan tunjukkan kedua penggunaanlate:- Buat instance
Database - Cetak
Database object created - Panggil
connect()dengan string koneksi'localhost:5432/mydb' - Panggil
query()dengan'SELECT * FROM users' - Panggil
checkStatus()untuk memicu inisialisasi malas
- Buat instance
Perhatikan bahwa connectionString diatur secara manual setelah object dibuat, sedangkan status menghitung nilainya hanya saat pertama kali diakses.
Output yang diharapkan:
Database object created
Connection configured: localhost:5432/mydb
Executing on localhost:5432/mydb: SELECT * FROM users
Checking connection...
Status: ConnectedCoba sendiri
import 'database.dart';
void main() {
// TODO: Buat instance Database
// TODO: Cetak 'Database object created'
// TODO: Panggil connect() dengan 'localhost:5432/mydb'
// TODO: Panggil query() dengan 'SELECT * FROM users'
// TODO: Panggil checkStatus() untuk memicu inisialisasi tertunda
}
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