Latihan buat 06 Kehidupan Rahasia Objek. Konsep: class, method, getter, static, properti private, dan protokol iterator. Jawaban di 06 Kunci Jawaban Objek.
6.1 Tipe Vektor
Tulis class Vec yang mewakili vektor 2D (x, y). Beri method plus dan minus yang menerima vektor lain dan mengembalikan Vec baru hasil penjumlahan/pengurangan. Tambahkan getter length yang menghitung jarak titik (x, y) dari (0, 0).
Kode awal:
// tulis kodemu di sini
console.log(new Vec(1, 2).plus(new Vec(2, 3)));
// → Vec{x: 3, y: 5}
console.log(new Vec(1, 2).minus(new Vec(2, 3)));
// → Vec{x: -1, y: -1}
console.log(new Vec(3, 4).length);
// → 5Petunjuk: getter ditulis dengan get length(). Jarak pakai Pythagoras: Math.sqrt(x ** 2 + y ** 2). Konsep di 06 Kehidupan Rahasia Objek > Class.
→ Jawaban: 06 Kunci Jawaban Objek > 6.1 Tipe Vektor
6.2 Group
Buat class Group (mirip Set bawaan) dengan method add, delete, dan has. Constructor bikin group kosong; sebuah nilai hanya boleh jadi anggota sekali. Tambahkan method static from(iterable) yang membuat group berisi semua nilai dari objek iterable.
Kode awal:
class Group {
// tulis kodemu di sini
}
let g = Group.from([10, 20]);
console.log(g.has(10));
// → true
console.log(g.has(30));
// → false
g.add(10);
g.delete(10);
console.log(g.has(10));
// → falsePetunjuk: simpan anggota dalam array (properti private #members). add cek dulu dengan includes sebelum push. delete pakai filter untuk bikin array baru tanpa nilai itu. from loop for/of lalu add. Konsep di 06 Kehidupan Rahasia Objek > Properti Private.
→ Jawaban: 06 Kunci Jawaban Objek > 6.2 Group
6.3 Group yang Bisa Diiterasi
Buat class Group dari soal 6.2 bisa dipakai di loop for/of. Jangan sekadar mengembalikan iterator dari array-nya — tulis iterator sendiri.
Kode awal:
// tambahkan ke class Group dari 6.2
for (let nilai of Group.from(["a", "b", "c"])) {
console.log(nilai);
}
// → a
// → b
// → cPetunjuk: beri Group method bernama [Symbol.iterator]() yang mengembalikan objek iterator dengan method next() yang mengembalikan {value, done}. Iteratornya melacak posisi sekarang di array anggota. Konsep di 06 Kehidupan Rahasia Objek > Antarmuka Iterator.
→ Jawaban: 06 Kunci Jawaban Objek > 6.3 Group yang Bisa Diiterasi