JavaScript - Objek WeakSet

Hai, para pemrogram yang sedang belajar! Hari ini, kita akan mengexplore fitur menarik namun seringkali dilewatkan di JavaScript: objek WeakSet. Jangan khawatir jika Anda baru saja memulai pemrograman; saya akan mengajarkan konsep ini secara langkah demi langkah, sama seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Jadi, ambil minuman favorit Anda, duduk nyaman, dan mari kita masuk ke dalamnya!

JavaScript - WeakSet

Apa Itu WeakSet?

Sebelum kita masuk ke detailnya, mari kita pahami apa itu WeakSet. Bayangkan Anda punya sebuah kotak khusus tempat Anda hanya dapat memasukkan mainan unik, tapi mainan itu secara magis menghilang ketika tidak ada yang lagi bermain dengannya. Itu agak seperti WeakSet di JavaScript!

WeakSet adalah sebuah koleksi objek, namun dengan beberapa karakteristik khusus:

  1. Itu hanya dapat menyimpan objek, bukan nilai primitif.
  2. Objek di WeakSet direferensikan lemah, artinya mereka dapat dihapus oleh pengumpulan sampah jika tidak ada referensi lain ke mereka.
  3. WeakSet tidak dapat dienumerasi, jadi Anda tidak dapat melooping melalui mereka.

Sekarang, mari kita lihat bagaimana membuat dan menggunakan WeakSet.

Sintaks

Membuat WeakSet sangat mudah. Berikut adalah cara Anda melakukannya:

let myWeakSet = new WeakSet();

Itu saja! Anda telah membuat WeakSet kosong. Sekarang, mari kita tambahkan beberapa objek ke dalamnya.

let obj1 = { name: "Alice" };
let obj2 = { name: "Bob" };

myWeakSet.add(obj1);
myWeakSet.add(obj2);

console.log(myWeakSet.has(obj1)); // Output: true
console.log(myWeakSet.has(obj2)); // Output: true

Dalam contoh ini, kita membuat dua objek dan menambahkannya ke WeakSet kita. Metode has() memeriksa apakah objek berada di dalam WeakSet.

Properti WeakSet

Sekarang, Anda mungkin berpikir, "WeakSet punya properti apa saja?" Well, ini adalah fakta menarik: WeakSet tidak punya properti! Ya benar, nol, nihil, ada yang lainnya! Hal ini karena WeakSet dirancang untuk ringan dan tidak mencatat ukuran atau isi.

Metode WeakSet

Meskipun WeakSet tidak punya properti, mereka punya beberapa metode yang berguna. Mari kita lihat mereka dalam tabel:

Metode Deskripsi
add(value) Menambahkan objek baru ke WeakSet
delete(value) Menghapus objek tertentu dari WeakSet
has(value) Memeriksa apakah objek tertentu ada di WeakSet

Mari kita lihat metode ini dalam aksi:

let weakSet = new WeakSet();
let obj = { id: 1 };

// Menambahkan objek
weakSet.add(obj);
console.log(weakSet.has(obj)); // Output: true

// Mencoba menghapus objek
weakSet.delete(obj);
console.log(weakSet.has(obj)); // Output: false

// Mencoba menambahkan nilai non-objek (akan melempar kesalahan)
try {
weakSet.add(1);
} catch(error) {
console.log("Error:", error.message);
}
// Output: Error: Invalid value used in weak set

Dalam contoh ini, kita menggunakan semua tiga metode WeakSet. Perhatikan bagaimana mencoba menambahkan nilai non-objek (seperti angka 1) melempar kesalahan. Ingat, WeakSet hanya untuk objek!

Contoh

Sekarang kita telah melihat dasar-dasar, mari kita lihat beberapa contoh praktis saat Anda mungkin menggunakan WeakSet.

Contoh 1: Melacak Kunjungan Objek

Bayangkan Anda sedang membuat website dan ingin melacak halaman mana yang dikunjungi pengguna, tapi hanya selama mereka sedang menjelajahi:

let visitedPages = new WeakSet();

class Page {
constructor(url) {
this.url = url;
}

visit() {
visitedPages.add(this);
console.log(`Visited: ${this.url}`);
}

hasVisited() {
return visitedPages.has(this);
}
}

let homePage = new Page("https://example.com");
let aboutPage = new Page("https://example.com/about");

homePage.visit(); // Output: Visited: https://example.com
console.log(homePage.hasVisited()); // Output: true
console.log(aboutPage.hasVisited()); // Output: false

Dalam contoh ini, kita menggunakan WeakSet untuk melacak objek Page yang dikunjungi. WeakSet memungkinkan objek Page untuk dihapus oleh pengumpulan sampah saat mereka tidak lagi diperlukan, yang bagus untuk manajemen memori!

Contoh 2: Mencegah Proses Duplikat

Katakanlah Anda menulis program yang memproses data pengguna, tapi Anda ingin memastikan bahwa setiap pengguna hanya diproses sekali:

let processedUsers = new WeakSet();

function processUser(user) {
if (processedUsers.has(user)) {
console.log(`User ${user.name} has already been processed.`);
return;
}

// Proses pengguna...
console.log(`Processing user: ${user.name}`);
processedUsers.add(user);
}

let user1 = { name: "Alice" };
let user2 = { name: "Bob" };

processUser(user1); // Output: Processing user: Alice
processUser(user2); // Output: Processing user: Bob
processUser(user1); // Output: User Alice has already been processed.

Dalam contoh ini, kita menggunakan WeakSet untuk melacak pengguna yang telah diproses. Ini mencegah proses duplikat dan efisien dalam memori karena jika objek pengguna tidak lagi direferensikan di kode Anda, mereka dapat dihapus bersamaan dengan entri mereka di WeakSet.

Kesimpulan

Dan begitu, teman-teman! Kita telah mengeksplor dunia mistik WeakSet di JavaScript. Ingat, WeakSets adalah seperti teman yang keren dan minimalistik yang tidak suka menahan barang untuk waktu yang lama. Mereka sempurna saat Anda ingin mengkaitkan objek dengan suatu keadaan atau perilaku, tapi Anda tidak ingin menghalangi pengumpulan sampah atas objek itu.

WeakSets mungkin bukan sesuatu yang Anda gunakan setiap hari, tetapi memahaminya menambahkan alat yang kuat ke dalam peralatan pemrograman JavaScript Anda. Siapa tahu? Suatu hari, Anda mungkin menemukan diri Anda dalam situasi di mana WeakSet adalah hal yang tepat untuk memecahkan masalah yang sulit.

Tetap coding, tetap curiga, dan ingat: di dunia pemrograman, ada selalu sesuatu yang baru untuk belajar!

Credits: Image by storyset