Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 bernama x dan y. 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 dengan p2.x - p1.x dan p2.y - p1.y
  • 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 dx dan dy, lalu cetak Distance: dx=[dx], dy=[dy]

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=4

Coba 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]
}
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