Records (Dart 3)
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 86 dari 110.
Dart 3 memperkenalkan records, cara ringan untuk menggabungkan beberapa nilai tanpa membuat class lengkap. Records bersifat immutable, memiliki kesetaraan bawaan, dan cocok untuk mengembalikan beberapa nilai dari fungsi atau mengelompokkan data terkait untuk sementara.
Buat record dengan membungkus nilai dalam tanda kurung:
void main() {
// Record sederhana dengan dua nilai
var point = (10, 20);
print(point.$1); // 10: akses elemen pertama
print(point.$2); // 20: akses elemen kedua
// Record dengan field bernama
var person = (name: 'Alice', age: 30);
print(person.name); // Alice
print(person.age); // 30
}Field posisi diakses dengan $1, $2, dan seterusnya, sedangkan field bernama menggunakan namanya secara langsung. Kamu bisa mencampur kedua gaya dalam satu record.
Record sangat berguna saat mengembalikan beberapa nilai dari fungsi, kamu tidak perlu membuat class hanya untuk mengembalikan dua bagian data:
(int, int) divideWithRemainder(int a, int b) {
return (a ~/ b, a % b);
}
(String name, int age) getUser() {
return ('Bob', 25);
}
void main() {
var (quotient, remainder) = divideWithRemainder(17, 5);
print('$quotient remainder $remainder'); // 3 remainder 2
var (name, age) = getUser();
print('$name is $age'); // Bob is 25
}Record secara otomatis mendukung kesetaraan berdasarkan nilainya, sehingga memudahkan perbandingan tanpa perlu mengimplementasikan == sendiri. Gunakan record saat kamu memerlukan pengelompokan data sederhana yang tidak dapat diubah; gunakan class saat kamu memerlukan method, kemampuan untuk mengubah data, atau perilaku yang lebih kompleks.
Tantangan
MudahMari buat sistem koordinat menggunakan record! Kamu akan membuat fungsi yang bekerja dengan titik 2D yang direpresentasikan sebagai record, untuk menunjukkan bagaimana record memudahkan pengembalian dan penggunaan beberapa nilai terkait tanpa membuat class lengkap.
Kamu akan mengatur kodemu dalam dua file:
geometry.dart: Buat fungsi yang menggunakan record untuk mengolah data koordinat:- Fungsi
createPoint(int x, int y)yang mengembalikan record dengan field bernamaxdany. Tipe nilai kembaliannya harus({int x, int y}) - Fungsi
midpoint(({int x, int y}) p1, ({int x, int y}) p2)yang menghitung dan mengembalikan titik tengah antara dua titik sebagai record dengan field bernama. Gunakan pembagian bilangan bulat (~/) untuk perhitungannya - Fungsi
distance(({int x, int y}) p1, ({int x, int y}) p2)yang mengembalikan record dengan field posisional: jarak horizontal (selisih x) dan jarak vertikal (selisih y). Tipe nilai kembaliannya harus(int, int). Hitung denganp2.x - p1.xdanp2.y - p1.y
- Fungsi
main.dart: Impor file geometri kamu dan tunjukkan penggunaan record:- Buat dua titik menggunakan
createPoint: titik A di(2, 4)dan titik B di(10, 8) - Cetak
Point A: ([x], [y])menggunakan field bernama - Cetak
Point B: ([x], [y])menggunakan field bernama - Hitung titik tengah dan cetak
Midpoint: ([x], [y]) - Hitung jarak dan gunakan destructuring untuk mengambil nilai ke dalam variabel
dxdandy, lalu cetakDistance: dx=[dx], dy=[dy]
- Buat dua titik menggunakan
Perhatikan bagaimana record memungkinkan kamu mengembalikan beberapa nilai dengan rapi: gunakan field bernama agar maknanya jelas, dan field posisional saat konteksnya sudah jelas!
Output yang diharapkan:
Point A: (2, 4)
Point B: (10, 8)
Midpoint: (6, 6)
Distance: dx=8, dy=4Coba sendiri
import 'geometry.dart';
void main() {
// TODO: Buat titik A di (2, 4) menggunakan createPoint
// TODO: Buat titik B di (10, 8) menggunakan createPoint
// TODO: Cetak Point A menggunakan field bernama: Point A: ([x], [y])
// TODO: Cetak Point B menggunakan field bernama: Point B: ([x], [y])
// TODO: Hitung titik tengah dan cetak: Midpoint: ([x], [y])
// TODO: Hitung jarak dan gunakan destructuring untuk memisahkan nilainya ke dx dan dy
// Lalu cetak: Distance: dx=[dx], dy=[dy]
}
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 Generik13Konsep OOP Lanjutan
Komposisi vs PewarisanExtension methodClass yang Dapat DipanggilSealed class (Dart 3)Records (Dart 3)Pola dan Pencocokan (3.0)Enum dengan method2Konstruktor 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