Kata Kunci late dan Keamanan Null
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 26 dari 110.
Terkadang kamu membutuhkan variabel yang tidak boleh bernilai null, tetapi kamu belum bisa langsung menetapkan nilainya. Kata kunci late memberi tahu Dart, "Saya berjanji akan menginisialisasi ini sebelum menggunakannya."
late String description;
void setup() {
description = 'Initialized later';
}
void main() {
setup();
print(description); // Berfungsi, diinisialisasi sebelum digunakan
}Tanpa late, Dart akan mengeluh karena description belum diinisialisasi. Dengan late, kamu bertanggung jawab untuk memastikan variabel tersebut memiliki nilai sebelum diakses. Jika kamu mencoba membacanya sebelum diinisialisasi, kamu akan mendapatkan error saat program berjalan.
Kasus penggunaan yang umum adalah komputasi mahal yang ingin kamu tunda sampai benar-benar diperlukan:
class DataProcessor {
late List<int> data = _loadData();
List<int> _loadData() {
print('Loading data...');
return [1, 2, 3, 4, 5];
}
}
DataProcessor processor = DataProcessor();
// 'Loading data...' belum tercetak
print(processor.data); // Sekarang datanya dimuat dan dicetakmethod _loadData() hanya dijalankan saat data pertama kali diakses, bukan saat object dibuat. Inisialisasi tertunda ini dapat meningkatkan performa ketika nilainya mungkin tidak pernah diperlukan.
Gunakan late saat kamu yakin sebuah variabel akan diinisialisasi sebelum digunakan, tetapi kamu tidak bisa melakukannya saat deklarasi. Ini adalah janji kepada compiler. Jika kamu mengingkari janji itu, programmu akan crash.
Tantangan
MudahMari buat pengelola konfigurasi yang menunjukkan manfaat variabel late untuk inisialisasi tertunda. Kamu akan membuat sistem yang hanya menjalankan operasi penyiapan yang mahal saat konfigurasi benar-benar dibutuhkan.
Kamu akan mengatur kodemu ke dalam dua file:
config_manager.dart: Definisikan classConfigManageryang menangani pengaturan aplikasi. Class ini harus memiliki:String appNameyang diberikan melalui konstruktorlate String databaseUrlyang akan diinisialisasi nanti melalui method penyiapanlate int maxConnectionsdengan inisialisasi malas yang mencetakCalculating max connections...saat pertama kali diakses dan mengembalikan100- Method
setupDatabase(String url)yang menginisialisasidatabaseUrl - Method
displayConfig()yang mencetak konfigurasi saat ini
main.dart: Impor pengelola konfigurasi dan tunjukkan cara kerja variabellate:- Buat
ConfigManagerdengan nama aplikasi'MyApp' - Cetak
Config created - Panggil
setupDatabasedengan URL'localhost:5432/mydb' - Cetak
Accessing max connections... - Cetak nilai
maxConnections - Cetak
Accessing max connections again... - Cetak nilai
maxConnectionslagi (perhatikan bahwa pesan perhitungan tidak muncul lagi) - Panggil
displayConfig()
- Buat
Method displayConfig() harus mencetak dalam format berikut:
--- Configuration ---
App: [appName]
Database: [databaseUrl]
Max Connections: [maxConnections]Perhatikan bahwa perhitungan malas maxConnections hanya dijalankan sekali, yaitu saat pertama kali kamu mengaksesnya. Inilah manfaat late dengan inisialisator!
Output yang diharapkan:
Config created
Accessing max connections...
Calculating max connections...
100
Accessing max connections again...
100
--- Configuration ---
App: MyApp
Database: localhost:5432/mydb
Max Connections: 100Coba sendiri
import 'config_manager.dart';
void main() {
// TODO: Buat ConfigManager dengan nama aplikasi 'MyApp'
// TODO: Cetak 'Config created'
// TODO: Panggil setupDatabase dengan URL 'localhost:5432/mydb'
// TODO: Cetak 'Accessing max connections...'
// TODO: Cetak nilai maxConnections
// TODO: Cetak 'Accessing max connections again...'
// TODO: Cetak lagi nilai maxConnections
// (perhatikan bahwa pesan perhitungan tidak muncul lagi)
// TODO: Panggil displayConfig()
}
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