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);
// → 5

Petunjuk: 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));
// → false

Petunjuk: 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
// → c

Petunjuk: 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