Kunci jawaban 06 Latihan Objek.
6.1 Tipe Vektor
class Vec {
constructor(x, y) {
this.x = x;
this.y = y;
}
plus(lain) {
return new Vec(this.x + lain.x, this.y + lain.y);
}
minus(lain) {
return new Vec(this.x - lain.x, this.y - lain.y);
}
get length() {
return Math.sqrt(this.x ** 2 + this.y ** 2);
}
}Kenapa: plus dan minus gak mengubah this, mereka mengembalikan Vec baru — jadi murni dan aman dirangkai. get length() bikin length bisa dibaca seperti properti biasa (v.length) padahal sebenarnya memanggil method. Class ini dipakai lagi di game platform 16 Proyek Game Platform.
→ Soal: 06 Latihan Objek > 6.1 Tipe Vektor
6.2 Group
class Group {
#members = [];
add(nilai) {
if (!this.has(nilai)) this.#members.push(nilai);
}
delete(nilai) {
this.#members = this.#members.filter(m => m !== nilai);
}
has(nilai) {
return this.#members.includes(nilai);
}
static from(iterable) {
let g = new Group();
for (let nilai of iterable) g.add(nilai);
return g;
}
}Kenapa: #members private, jadi tersembunyi dari luar; diinisialisasi [] langsung sehingga gak perlu constructor. add cek dulu supaya gak ada duplikat. delete menimpa #members dengan array baru tanpa nilai itu. from adalah method static (jalan di Group, bukan di instance) yang bikin group baru dari iterable apa pun.
→ Soal: 06 Latihan Objek > 6.2 Group
6.3 Group yang Bisa Diiterasi
class Group {
#members = [];
add(nilai) {
if (!this.has(nilai)) this.#members.push(nilai);
}
delete(nilai) {
this.#members = this.#members.filter(m => m !== nilai);
}
has(nilai) {
return this.#members.includes(nilai);
}
static from(iterable) {
let g = new Group();
for (let nilai of iterable) g.add(nilai);
return g;
}
[Symbol.iterator]() {
return new GroupIterator(this.#members);
}
}
class GroupIterator {
#members;
#posisi = 0;
constructor(members) {
this.#members = members;
}
next() {
if (this.#posisi >= this.#members.length) {
return {done: true};
}
let value = this.#members[this.#posisi];
this.#posisi++;
return {value, done: false};
}
}Kenapa: for/of mengharapkan objek punya method [Symbol.iterator]() yang mengembalikan iterator — objek dengan next() yang memberi {value, done}. GroupIterator menyimpan referensi array anggota dan sebuah #posisi yang naik tiap next; begitu posisi melewati panjang, ia mengembalikan {done: true} dan loop berhenti. Strukturnya sama dengan iterator list di bab.