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 ulangname 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.
Tantangan
MudahMari 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 classProductyang merepresentasikan barang di toko. Class-mu harus memiliki:static const double taxRateyang ditetapkan ke0.08(tarif pajak 8% yang berlaku untuk semua produk)static const String currencyyang ditetapkan ke'USD'final String nameuntuk nama produk (ditetapkan melalui constructor)final double basePriceuntuk 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
namedanbasePrice - Getter
priceWithTaxyang menghitung harga termasuk pajak - Method
display()yang mencetak informasi produk
main.dart: Impor class produkmu dan buat dua produk:'Laptop'dengan harga dasar999.99'Mouse'dengan harga dasar29.99
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)
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online