Menu
CoddyTech

Field Final dan Const

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 18 dari 110.

Saat mendeklarasikan field dalam class, kamu dapat menggunakan final atau const untuk mengatur apakah nilainya dapat berubah setelah inisialisasi. Keduanya membuat nilai yang tidak dapat diubah, tetapi cara kerjanya berbeda.

Field final hanya dapat ditetapkan sekali, tetapi nilainya ditentukan saat runtime. Kamu dapat menetapkannya dalam deklarasi atau melalui constructor:

class Person {
  final String name;
  final DateTime createdAt = DateTime.now();
  
  Person(this.name);
}

Person p = Person('Alice');
// p.name = 'Bob';  // error: field final tidak bisa diberi nilai ulang

name ditetapkan saat object dibuat, dan createdAt mencatat waktu saat ini. Kedua nilai dikunci setelah inisialisasi.

Field static const harus memiliki nilai yang diketahui saat kompilasi. Field ini menjadi milik class itu sendiri dan digunakan bersama oleh semua instans:

class Circle {
  static const double pi = 3.14159;
  final double radius;
  
  Circle(this.radius);
  
  double get area => Circle.pi * radius * radius;
}

Perbedaan utamanya: field final dapat menyimpan nilai yang dihitung saat runtime (seperti DateTime.now()), sedangkan const memerlukan konstanta waktu kompilasi. Field instance tidak dapat langsung menggunakan const, hanya static const yang diizinkan di tingkat class.

challenge icon

Tantangan

Mudah

Mari kita bangun sistem katalog produk yang menunjukkan perbedaan antara field final dan static const. Kamu akan membuat produk dengan property yang tidak dapat diubah dan nilai konfigurasi bersama.

Kamu akan mengatur kodemu dalam dua file:

  • product.dart: Definisikan class Product yang merepresentasikan barang di toko. Class-mu harus memiliki:
    • static const double taxRate yang ditetapkan ke 0.08 (tarif pajak 8% yang berlaku untuk semua produk)
    • static const String currency yang ditetapkan ke 'USD'
    • final String name untuk nama produk (ditetapkan melalui constructor)
    • final double basePrice untuk harga dasar produk (ditetapkan melalui constructor)
    • final String sku (unit penyimpanan stok) yang menggabungkan prefiks dengan nama produk, dihitung dalam daftar inisialisasi sebagai 'SKU-' diikuti nama dalam huruf kapital
    • Constructor yang menerima name dan basePrice
    • Getter priceWithTax yang menghitung harga termasuk pajak
    • Method display() yang mencetak informasi produk
  • main.dart: Impor class produkmu dan buat dua produk:
    • 'Laptop' dengan harga dasar 999.99
    • 'Mouse' dengan harga dasar 29.99
    Panggil display() pada setiap produk sesuai urutan di atas.

Method display() harus mencetak dengan format persis seperti ini:

[sku] - [name]: [basePrice] [currency] (with tax: [priceWithTax] [currency])

Bulatkan priceWithTax menjadi 2 angka desimal menggunakan toStringAsFixed(2) saat ditampilkan.

Output yang diharapkan:

SKU-LAPTOP - Laptop: 999.99 USD (with tax: 1079.99 USD)
SKU-MOUSE - Mouse: 29.99 USD (with tax: 32.39 USD)

Coba sendiri

import 'product.dart';

void main() {
  // TODO: Buat Product bernama 'Laptop' dengan harga dasar 999.99
  
  // TODO: Buat Product bernama 'Mouse' dengan harga dasar 29.99
  
  // TODO: Panggil display() pada setiap produk secara berurutan (Laptop terlebih dahulu, lalu Mouse)
  
}
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