Constructor & Method

Constructor & Method 🔨

Constructor adalah fungsi khusus yang dipanggil otomatis saat membuat objek baru. Method adalah fungsi yang terdefinisi di dalam class dan menggambarkan perilaku objek.


Default Constructor

class Orang {
  String nama;
  int umur;

  // Constructor dengan initializer list (this.nama)
  Orang(this.nama, this.umur);

  void perkenalan() {
    print('Halo, nama saya $nama berumur $umur tahun.');
  }
}

void main() {
  Orang o = Orang('Budi', 25);
  o.perkenalan(); // Halo, nama saya Budi berumur 25 tahun.
}

Named Constructor

Dart mendukung beberapa constructor dengan nama berbeda:

class Titik {
  double x;
  double y;

  // Constructor utama
  Titik(this.x, this.y);

  // Named constructor — buat titik di posisi asal
  Titik.asal() : x = 0, y = 0;

  // Named constructor — dari Map
  Titik.dariMap(Map<String, double> map)
      : x = map['x'] ?? 0,
        y = map['y'] ?? 0;

  @override
  String toString() => 'Titik($x, $y)';
}

void main() {
  Titik t1 = Titik(3, 4);
  Titik t2 = Titik.asal();
  Titik t3 = Titik.dariMap({'x': 1.5, 'y': 2.5});

  print(t1); // Titik(3.0, 4.0)
  print(t2); // Titik(0.0, 0.0)
  print(t3); // Titik(1.5, 2.5)
}

Constructor dengan Named Parameters

class Produk {
  String nama;
  double harga;
  int stok;
  String? deskripsi;

  Produk({
    required this.nama,
    required this.harga,
    this.stok = 0,
    this.deskripsi,
  });

  void tampilkan() {
    print('$nama - Rp$harga (Stok: $stok)');
    if (deskripsi != null) print('  $deskripsi');
  }
}

void main() {
  Produk p1 = Produk(nama: 'Laptop', harga: 15000000, stok: 5);
  Produk p2 = Produk(
    nama: 'Mouse',
    harga: 200000,
    stok: 20,
    deskripsi: 'Mouse wireless ergonomis',
  );

  p1.tampilkan();
  p2.tampilkan();
}

Method dalam Class

class KalkBMI {
  String nama;
  double beratKg;
  double tinggiM;

  KalkBMI(this.nama, this.beratKg, this.tinggiM);

  double hitungBMI() {
    return beratKg / (tinggiM * tinggiM);
  }

  String kategoriBMI() {
    double bmi = hitungBMI();
    if (bmi < 18.5) return 'Kurus';
    if (bmi < 25.0) return 'Normal';
    if (bmi < 30.0) return 'Gemuk';
    return 'Obesitas';
  }

  void laporan() {
    double bmi = hitungBMI();
    print('=== Laporan BMI $nama ===');
    print('Berat : ${beratKg}kg');
    print('Tinggi: ${tinggiM * 100}cm');
    print('BMI   : ${bmi.toStringAsFixed(1)}');
    print('Status: ${kategoriBMI()}');
  }
}

void main() {
  KalkBMI k = KalkBMI('Budi', 70, 1.75);
  k.laporan();
}

Override toString()

Setiap class di Dart mewarisi metode toString() dari Object. Kita bisa menggantinya agar lebih informatif:

class Mahasiswa {
  String nim;
  String nama;
  double ipk;

  Mahasiswa(this.nim, this.nama, this.ipk);

  @override
  String toString() {
    return 'Mahasiswa{nim: $nim, nama: $nama, ipk: $ipk}';
  }
}

void main() {
  Mahasiswa m = Mahasiswa('12345', 'Budi', 3.75);
  print(m); // Mahasiswa{nim: 12345, nama: Budi, ipk: 3.75}

  List<Mahasiswa> daftar = [
    Mahasiswa('001', 'Ani', 3.80),
    Mahasiswa('002', 'Citra', 3.65),
  ];
  print(daftar);
}

Ringkasan OOP Dasar Dart

Konsep Keterangan
Class Cetak biru untuk membuat objek
Object Instansi dari sebuah class
Constructor Fungsi khusus saat membuat objek
Named Constructor Constructor dengan nama berbeda
Method Fungsi yang dimiliki objek
this Merujuk ke objek saat ini
@override Menandai method yang menimpa method induk
toString() Representasi String dari objek

💡 Tips: OOP bukan sekadar teknik, tapi cara berpikir tentang masalah. Mulailah dengan mengidentifikasi entitas dalam masalahmu — Mahasiswa, Produk, Pesanan — lalu tentukan data apa yang dimiliki dan aksi apa yang bisa dilakukan. Inilah fondasi untuk memahami Flutter widget yang semuanya berbasis class! 🎓

Sebelumnya

Informasi Kursus

Kursus

Dart Dasar

Kategori

OOP Dasar

Durasi Pelajaran

20 menit

Pelajaran dalam Kategori Ini