Tipe Data: symbol
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu akan mampu:
- Menjelaskan arti nilai unik pada
symbol - Membuat symbol dengan
Symbol() - Memahami contoh penggunaan symbol sebagai identitas internal
Pendahuluan
Section titled “Pendahuluan”Ada kalanya program membutuhkan sebuah tanda pengenal yang benar-benar unik. Bukan unik karena namanya berbeda, tetapi unik karena TypeScript menjamin tidak ada symbol lain yang sama dengannya.
Tipe data untuk kebutuhan itu adalah symbol.
Penjelasan Materi
Section titled “Penjelasan Materi”Setiap kali kamu memanggil Symbol(), JavaScript membuat nilai symbol baru. Bahkan jika dua symbol diberi deskripsi teks yang sama, keduanya tetap berbeda.
const idPertama: symbol = Symbol("id")const idKedua: symbol = Symbol("id")
console.log(idPertama === idKedua) // falseDeskripsi "id" hanya membantu manusia saat membaca kode. Deskripsi itu bukan nilai symbolnya.
Analogi: Nomor Seri Gelang Acara
Section titled “Analogi: Nomor Seri Gelang Acara”Bayangkan dua siswa datang ke sebuah acara. Keduanya boleh memakai gelang dengan tulisan “PESERTA”, tetapi masing-masing gelang punya nomor seri yang tidak pernah sama.
Gelang 1: PESERTA #A8X2Gelang 2: PESERTA #Q7M9Tulisan depannya boleh sama. Namun nomor seri memastikan dua gelang itu bukan benda yang sama.
symbol bekerja seperti nomor seri tersebut: selalu unik.
Visual Illustration
Section titled “Visual Illustration”Symbol("id") pertama Symbol("id") kedua┌───────────────────┐ ┌───────────────────┐│ label: "id" │ │ label: "id" ││ identitas: unik A │ │ identitas: unik B │└───────────────────┘ └───────────────────┘ │ │ └────── tidak sama ───────┘Mari Mencoba
Section titled “Mari Mencoba”Buat file src/bab1/symbol.ts:
const idSiswaPertama: symbol = Symbol("idSiswa")const idSiswaKedua: symbol = Symbol("idSiswa")
console.log("Apakah ID sama?", idSiswaPertama === idSiswaKedua)console.log("ID pertama:", idSiswaPertama.toString())console.log("ID kedua:", idSiswaKedua.toString())
const dataSiswa = { nama: "Putra", [idSiswaPertama]: "ID-INTERNAL-001",}
console.log("Nama:", dataSiswa.nama)console.log("ID internal:", dataSiswa[idSiswaPertama])Jalankan:
tsx src/bab1/symbol.tsOutput utama:
Apakah ID sama? falseID pertama: Symbol(idSiswa)ID kedua: Symbol(idSiswa)Nama: PutraID internal: ID-INTERNAL-001Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”const idSiswaPertama: symbol = Symbol("idSiswa")const— symbol ini tidak diganti dengan symbol lainidSiswaPertama— nama variabel: symbol— tipe nilainya adalah symbolSymbol("idSiswa")— membuat symbol unik baru
[idSiswaPertama]: "ID-INTERNAL-001"Tanda kurung siku berarti symbol dipakai sebagai nama properti object. Untuk saat ini, cukup pahami bahwa symbol bisa menjadi “kunci rahasia” yang tidak mudah bentrok dengan nama properti biasa.
Kapan symbol Dipakai?
Section titled “Kapan symbol Dipakai?”symbol lebih sering dipakai di library, framework, atau object kompleks. Contohnya:
- Membuat nama properti internal yang tidak bentrok
- Memberi identitas unik pada data
- Membuat aturan khusus pada object
Untuk biodata siswa biasa, gunakan string atau number sebagai ID. symbol bukan pengganti nomor absen atau NISN, karena symbol tidak mudah disimpan ke database atau dikirim sebagai JSON.
Kesalahan Umum
Section titled “Kesalahan Umum”❌ Menganggap symbol dengan deskripsi sama adalah sama
Section titled “❌ Menganggap symbol dengan deskripsi sama adalah sama”const a = Symbol("nilai")const b = Symbol("nilai")console.log(a === b) // falseMengapa? Setiap pemanggilan Symbol() selalu membuat identitas baru.
❌ Menggabungkan symbol langsung dengan string
Section titled “❌ Menggabungkan symbol langsung dengan string”const id = Symbol("id")// console.log("ID: " + id)// Error saat runtimePerbaikan: ubah ke teks dengan .toString():
console.log("ID: " + id.toString())Latihan
Section titled “Latihan”Buat file src/bab1/latihan-symbol.ts:
- Buat dua symbol dengan deskripsi
"kode" - Bandingkan keduanya dengan
=== - Tampilkan keduanya menggunakan
.toString() - Tuliskan komentar yang menjelaskan mengapa hasil perbandingannya
false
Ringkasan
Section titled “Ringkasan”symboladalah tipe data untuk identitas yang unikSymbol("label")selalu membuat symbol baru- Dua symbol dengan label sama tetap tidak sama
- Symbol sering digunakan sebagai kunci properti internal
- Dalam project pemula, symbol cukup dipahami dulu — belum harus sering dipakai