Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 class Database yang menyimulasikan koneksi database. Class-mu harus memiliki:
    • late String connectionString yang akan diatur setelah object dibuat
    • late String status dengan penginisialisasi malas yang mencetak Checking connection... dan mengembalikan 'Connected'
    • method connect(String connStr) yang mengatur connectionString dan mencetak Connection configured: [connectionString]
    • method query(String sql) yang mencetak Executing on [connectionString]: [sql]
    • method checkStatus() yang mencetak Status: [status] (ini akan memicu inisialisasi malas saat pertama kali dipanggil)
  • main.dart: Impor class database-mu dan tunjukkan kedua penggunaan late:
    • 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

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

Coba 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
}
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