Menu
CoddyTech

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 dicetak

method _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.

challenge icon

Tantangan

Mudah

Mari 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 class ConfigManager yang menangani pengaturan aplikasi. Class ini harus memiliki:
    • String appName yang diberikan melalui konstruktor
    • late String databaseUrl yang akan diinisialisasi nanti melalui method penyiapan
    • late int maxConnections dengan inisialisasi malas yang mencetak Calculating max connections... saat pertama kali diakses dan mengembalikan 100
    • Method setupDatabase(String url) yang menginisialisasi databaseUrl
    • Method displayConfig() yang mencetak konfigurasi saat ini
  • main.dart: Impor pengelola konfigurasi dan tunjukkan cara kerja variabel late:
    • Buat ConfigManager dengan nama aplikasi 'MyApp'
    • Cetak Config created
    • Panggil setupDatabase dengan URL 'localhost:5432/mydb'
    • Cetak Accessing max connections...
    • Cetak nilai maxConnections
    • Cetak Accessing max connections again...
    • Cetak nilai maxConnections lagi (perhatikan bahwa pesan perhitungan tidak muncul lagi)
    • Panggil displayConfig()

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: 100

Coba 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()
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online