Primary Constructors (konstruktor utama)

Pahami Konsep

Versi minimum bahasa Dart yang dibutuhkan: 3.13.

Fungsi: Deklarasikan field + konstruktor utama dalam satu baris di awal kelas, sehingga banyak menghapus kode boilerplate. Perilaku saat runtime sama persis dengan konstruktor tradisional, hanya sintaksnya yang disederhanakan.

  1. Declaring parameters (parameter deklaratif): Parameter di header kelas yang diberi var / final akan otomatis membuat field instansi dengan nama yang sama.
  2. Non-declaring parameters (parameter biasa): Parameter tanpa var/final hanya menjadi masukan konstruktor, tidak membuat field kelas.
  3. In-body constructors (konstruktor di dalam kelas): Konstruktor bernama, pabrik, dan pengalih yang ditulis di dalam kurung kurawal kelas.
  4. Aturan wajib: Kelas yang memiliki konstruktor utama tidak boleh memiliki konstruktor generatif lain yang bukan pengalih, agar semua instansi pasti melewati konstruktor utama saat dibuat.

Perbandingan sintaks lama vs singkatan konstruktor utama

// Sintaks lama (berulang-ulang)
class Point {
  int x;
  int y;
  Point(this.x, this.y);
}

// Singkatan konstruktor utama
class Point(var int x, var int y);Code language: JavaScript (javascript)

Aturan Pembuatan Field Otomatis

1. Menggunakan var / final

Field instansi akan dibuat secara otomatis.

Tulis variabel field langsung di dalam kurung setelah nama kelas.

// x dan y otomatis menjadi variabel anggota kelas
class Point(var int x, final int y);

void main() {
  final p = Point(10, 20);
  print(p.x); // 10
  print(p.y); // 20
  // p.y = 30; // Error, y bertipe final tidak bisa diubah
}Code language: JavaScript (javascript)

Kode di atas akan menghasilkan error saat dijalankan.

D:\dartdemo\firstdart\bin>dart run
Building package executable...
Failed to build firstdart:firstdart:
firstdart.dart:2:13: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
            ^^^
firstdart.dart:2:12: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
           ^
firstdart.dart:2:36: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);Code language: JavaScript (javascript)

Penyebab error: Singkatan sintaks class Point(var int x, final int y); bernama Primary Constructors (konstruktor utama) adalah fitur eksperimental Dart. Di versi stabil sekarang fitur ini dinonaktifkan secara bawaan, sehingga langsung jalankan akan muncul error sintaks.

Tanggal sekarang: 10 Juli 2026, pukul 14:55. Mungkin saat pembaca membaca artikel ini, Dart sudah merilis versi resmi baru yang mendukung sintaks ini secara default.

Gunakan perintah berikut untuk tes sementara:

dart run --enable-experiment=primary-constructors

2. Tanpa var / final

Hanya parameter sementara, tidak membuat field apa pun.

class User(String name) {
  // print(name); // Bisa akses parameter langsung di dalam kelas, tapi tidak membuat field this.name
  final String msg = "Hi $name"; // Error kompilasi
}

void main() {
  final u = User("Tom");
  // print(u.name); // Error kompilasi: field name tidak ada
}Code language: JavaScript (javascript)

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *