Ini terjemahan bab pengenalan dari buku Eloquent JavaScript edisi ke-4 karya Marijn Haverbeke. Daftar isi lengkapnya ada di Eloquent JavaScript. Bab berikutnya: 01 Nilai, Tipe, dan Operator.
Kita pikir kita lagi bikin sistem buat tujuan kita sendiri. Kita percaya kita bikin dia sesuai citra diri kita… Tapi komputer itu sebenernya gak kaya kita. Dia cuma proyeksi dari sebagian kecil diri kita: bagian yang ngurusin logika, keteraturan, aturan, dan kejelasan.
— Ellen Ullman, Close to the Machine: Technophilia and Its Discontents

Ini buku tentang ngasih perintah ke komputer. Komputer sekarang udah seumum obeng, tapi jauh lebih rumit, dan bikin dia ngelakuin apa yang kamu mau itu gak selalu gampang.
Kalau tugas yang kamu kasih ke komputer itu tugas umum yang udah jelas, kaya nampilin email atau jadi kalkulator, kamu tinggal buka aplikasi yang cocok dan langsung kerja. Tapi buat tugas yang unik atau gak ada batasan jelasnya, sering kali gak ada aplikasi yang pas.
Nah, di situlah pemrograman masuk. Pemrograman (programming) itu kegiatan nyusun sebuah program, yaitu sekumpulan instruksi yang presisi buat ngasih tahu komputer harus ngapain. Karena komputer itu makhluk bodoh dan kaku banget, pemrograman pada dasarnya itu melelahkan dan bikin frustrasi.
Untungnya, kalau kamu bisa nerima fakta itu, bahkan mungkin malah menikmati ketatnya berpikir dengan cara yang bisa dipahami mesin bodoh, pemrograman bisa jadi sangat memuaskan. Dia bikin kamu bisa ngelakuin hal dalam hitungan detik yang kalau dikerjain manual bakal makan waktu selamanya. Ini cara bikin komputermu bisa ngelakuin hal yang sebelumnya gak bisa dia lakuin. Selain itu, ini juga jadi permainan yang asik buat ngasah pemecahan teka-teki dan berpikir abstrak.
Kebanyakan pemrograman dilakuin pakai bahasa pemrograman. Bahasa pemrograman itu bahasa yang dibikin secara buatan buat ngasih instruksi ke komputer. Menariknya, cara paling efektif yang kita temukan buat berkomunikasi sama komputer ternyata banyak banget minjem dari cara kita berkomunikasi satu sama lain. Kaya bahasa manusia, bahasa komputer bikin kata dan frasa bisa dikombinasikan dengan cara baru, jadi kita bisa terus mengekspresikan konsep-konsep baru.
Dulu, antarmuka berbasis bahasa, kaya prompt BASIC dan DOS di tahun 1980-an dan 1990-an, adalah cara utama buat berinteraksi sama komputer. Buat pemakaian komputer sehari-hari, ini udah banyak digantiin sama antarmuka visual, yang lebih gampang dipelajari tapi ngasih kebebasan yang lebih sedikit. Tapi kalau kamu tahu harus nyari ke mana, bahasa-bahasa itu masih ada. Salah satunya, JavaScript, udah tertanam di setiap browser web modern, jadi tersedia di hampir semua perangkat.
Buku ini bakal nyoba bikin kamu cukup akrab sama bahasa ini biar bisa bikin hal-hal yang berguna dan menyenangkan pakai dia.
Soal Pemrograman
Selain ngejelasin JavaScript, saya bakal ngenalin prinsip-prinsip dasar pemrograman. Pemrograman, ternyata, itu susah. Aturan dasarnya simpel dan jelas, tapi program yang dibangun di atas aturan-aturan itu cenderung jadi cukup rumit sampai ngenalin aturan dan kerumitannya sendiri. Kamu kaya lagi bangun labirin sendiri, dan bisa dengan gampang tersesat di dalamnya.
Bakal ada saat-saat baca buku ini terasa sangat bikin frustrasi. Kalau kamu baru di dunia pemrograman, bakal ada banyak banget materi baru yang harus dicerna. Banyak dari materi itu kemudian bakal digabung dengan cara yang nuntut kamu bikin koneksi-koneksi tambahan.
Semua tergantung kamu buat ngeluarin usaha yang dibutuhin. Waktu kamu kesusahan ngikutin buku ini, jangan buru-buru ngambil kesimpulan soal kemampuan dirimu sendiri. Kamu baik-baik aja, kamu cuma perlu terus lanjut. Istirahat dulu, baca ulang beberapa materi, dan pastiin kamu baca dan paham program contoh serta latihannya. Belajar itu kerja keras, tapi semua yang kamu pelajari itu jadi milikmu dan bakal bikin belajar berikutnya lebih gampang.
Kalau bertindak udah gak menguntungkan, kumpulkan informasi; kalau informasi udah gak menguntungkan, tidur.
— Ursula K. Le Guin, The Left Hand of Darkness
Program itu banyak hal. Dia adalah sepotong teks yang diketik programmer, dia adalah kekuatan pengarah yang bikin komputer ngelakuin apa yang dia lakuin, dia adalah data di memori komputer, dan, di saat yang sama, dia ngendaliin aksi-aksi yang dilakuin ke memori itu. Analogi yang nyoba ngebandingin program sama benda-benda yang kita kenal cenderung gagal. Salah satu yang secara permukaan cocok adalah ngebandingin program sama mesin, biasanya ada banyak bagian terpisah yang terlibat, dan biar semuanya jalan, kita harus mikirin cara bagian-bagian itu saling terhubung dan nyumbang ke operasi keseluruhannya.
Komputer itu mesin fisik yang jadi tempat tinggal buat mesin-mesin gak berwujud ini. Komputer sendiri cuma bisa ngelakuin hal-hal yang bodoh dan lugu. Alasan kenapa dia begitu berguna adalah karena dia ngelakuin hal-hal itu dengan kecepatan yang luar biasa tinggi. Sebuah program bisa dengan cerdik ngegabungin jumlah aksi-aksi sederhana yang sangat banyak buat ngelakuin hal-hal yang sangat rumit.
Program itu bangunan dari pikiran. Gak ada biaya buat ngebangunnya, gak ada beratnya, dan dia tumbuh dengan gampang di bawah tangan kita yang ngetik. Tapi seiring program tumbuh, kerumitannya juga ikut tumbuh. Keahlian pemrograman itu keahlian ngebangun program yang gak bikin bingung programmernya. Program terbaik itu program yang berhasil ngelakuin sesuatu yang menarik sambil tetap gampang dipahami.
Beberapa programmer percaya kerumitan ini paling baik dikelola dengan cuma pakai sekumpulan kecil teknik yang udah dipahami dengan baik di program mereka. Mereka nyusun aturan ketat (“best practices”) yang menentukan bentuk yang harus dimiliki program dan dengan hati-hati tetap di dalam zona aman kecil mereka.
Ini bukan cuma membosankan, tapi juga gak efektif. Masalah baru sering butuh solusi baru. Bidang pemrograman masih muda dan masih berkembang cepat, dan cukup beragam sampai punya ruang buat pendekatan-pendekatan yang sangat berbeda. Ada banyak kesalahan mengerikan yang bisa dibuat waktu ngedesain program, dan kamu sebaiknya bikin kesalahan-kesalahan itu setidaknya sekali biar kamu paham. Rasa tentang seperti apa program yang bagus itu dikembangin lewat latihan, bukan dipelajari dari daftar aturan.
Kenapa Bahasa itu Penting
Di awal, waktu komputasi baru lahir, gak ada bahasa pemrograman. Program keliatannya kaya gini:
00110001 00000000 00000000
00110001 00000001 00000001
00110011 00000001 00000010
01010001 00001011 00000010
00100010 00000010 00001000
01000011 00000001 00000000
01000001 00000001 00000001
00010000 00000010 00000000
01100010 00000000 00000000Ini program buat ngejumlahin angka dari 1 sampai 10 dan nyetak hasilnya: 1 + 2 + ... + 10 = 55. Dia bisa jalan di sebuah mesin hipotetis yang sederhana. Buat memprogram komputer jaman dulu, orang harus nyetel deretan besar saklar ke posisi yang benar atau ngelubangin strip kardus dan masukin ke komputer. Bisa kamu bayangin betapa melelahkan dan rawan salahnya prosedur ini. Bahkan nulis program sederhana aja butuh banyak kecerdikan dan disiplin. Program yang rumit hampir gak terbayangkan.
Tentu aja, masukin pola bit yang misterius ini (angka satu dan nol) secara manual ngasih programmer perasaan mendalam kaya jadi penyihir yang perkasa. Dan itu pasti ada harganya dalam hal kepuasan kerja.
Tiap baris dari program di atas berisi satu instruksi. Kalau ditulis dalam bahasa manusia jadinya kaya gini:
- Simpan angka 0 di lokasi memori 0.
- Simpan angka 1 di lokasi memori 1.
- Simpan nilai dari lokasi memori 1 ke lokasi memori 2.
- Kurangi nilai di lokasi memori 2 dengan angka 11.
- Kalau nilai di lokasi memori 2 adalah angka 0, lanjut ke instruksi 9.
- Tambahkan nilai dari lokasi memori 1 ke lokasi memori 0.
- Tambahkan angka 1 ke nilai di lokasi memori 1.
- Lanjut ke instruksi 3.
- Keluarkan nilai dari lokasi memori 0.
Walaupun itu udah lebih gampang dibaca daripada sup bit tadi, tetap aja masih agak gak jelas. Pakai nama, bukan angka, buat instruksi dan lokasi memori bakal ngebantu.
Set “total” ke 0.
Set “count” ke 1.
[loop]
Set “compare” ke “count”.
Kurangi “compare” dengan 11.
Kalau “compare” adalah 0, lanjut di [end].
Tambahkan “count” ke “total”.
Tambahkan 1 ke “count”.
Lanjut di [loop].
[end]
Keluarkan “total”.Bisa kamu lihat gimana program ini jalan sekarang? Dua baris pertama ngasih dua lokasi memori nilai awalnya: total bakal dipakai buat ngebangun hasil perhitungan, dan count bakal ngelacak angka yang lagi kita lihat sekarang. Baris-baris yang pakai compare mungkin yang paling bikin bingung. Program mau ngecek apakah count sama dengan 11 buat mutusin apakah dia bisa berhenti jalan. Karena mesin hipotetis kita agak primitif, dia cuma bisa ngetes apakah sebuah angka itu nol dan ngambil keputusan berdasarkan itu. Makanya dia pakai lokasi memori yang dilabeli compare buat ngitung nilai count - 11 dan ngambil keputusan berdasarkan nilai itu. Dua baris berikutnya nambahin nilai count ke hasil dan naikin count sebanyak 1 tiap kali program mutusin bahwa count belum 11.
Ini program yang sama di JavaScript:
let total = 0, count = 1;
while (count <= 10) {
total += count;
count += 1;
}
console.log(total);
// → 55Versi ini ngasih kita beberapa perbaikan lagi. Yang paling penting, gak perlu lagi nyebutin cara kita mau program lompat maju-mundur, konstruksi while yang ngurusin itu. Dia terus ngejalanin blok (yang dibungkus kurung kurawal) di bawahnya selama kondisi yang dikasih ke dia masih terpenuhi. Kondisinya adalah count <= 10, yang artinya “count kurang dari atau sama dengan 10”. Kita gak perlu lagi bikin nilai sementara dan ngebandinginnya sama nol, yang cuma detail gak penting. Sebagian dari kekuatan bahasa pemrograman adalah dia bisa ngurusin detail-detail gak penting buat kita.
Di akhir program, setelah konstruksi while selesai, operasi console.log dipakai buat nulisin hasilnya.
Terakhir, ini bentuk program kalau kebetulan kita punya operasi praktis range dan sum, yang masing-masing bikin kumpulan angka dalam sebuah rentang dan ngitung jumlah dari kumpulan angka:
console.log(sum(range(1, 10)));
// → 55Pesan moral dari cerita ini adalah program yang sama bisa diekspresikan dengan cara yang panjang maupun pendek, yang gak bisa dibaca maupun yang bisa dibaca. Versi pertama program itu sangat gak jelas, sedangkan yang terakhir ini hampir kaya bahasa Inggris biasa: log (catat) sum (jumlah) dari range (rentang) angka 1 sampai 10. (Kita bakal lihat di bab-bab berikutnya gimana cara mendefinisikan operasi kaya sum dan range.)
Bahasa pemrograman yang bagus ngebantu programmer dengan ngebolehin mereka ngomongin aksi-aksi yang harus dilakuin komputer di level yang lebih tinggi. Dia ngebantu ngilangin detail, nyediain blok bangunan yang praktis (kaya while dan console.log), ngebolehin kamu mendefinisikan blok bangunanmu sendiri (kaya sum dan range), dan bikin blok-blok itu gampang digabungin.
Apa itu JavaScript?
JavaScript diperkenalkan tahun 1995 sebagai cara buat nambahin program ke halaman web di browser Netscape Navigator. Sejak itu bahasanya diadopsi sama semua browser web grafis besar lainnya. Dia bikin aplikasi web modern jadi mungkin, yaitu aplikasi yang bisa kamu ajak interaksi langsung tanpa harus reload halaman buat tiap aksi. JavaScript juga dipakai di website yang lebih tradisional buat nyediain berbagai bentuk interaktivitas dan kecerdikan.
Penting buat dicatat bahwa JavaScript hampir gak ada hubungannya sama bahasa pemrograman bernama Java. Nama yang mirip itu terinspirasi dari pertimbangan marketing, bukan penilaian yang bagus. Waktu JavaScript diperkenalkan, bahasa Java lagi dipasarin gede-gedean dan lagi naik popularitasnya. Seseorang mikir ini ide bagus buat nyoba numpang di kesuksesan itu. Sekarang kita terjebak sama namanya.
Setelah diadopsi di luar Netscape, sebuah dokumen standar ditulis buat ngejelasin cara kerja bahasa JavaScript yang seharusnya, biar berbagai software yang ngaku mendukung JavaScript bisa mastiin mereka beneran nyediain bahasa yang sama. Ini disebut standar ECMAScript, dari nama organisasi Ecma International yang ngelakuin standardisasinya. Dalam praktiknya, istilah ECMAScript dan JavaScript bisa dipakai bergantian, keduanya adalah dua nama buat bahasa yang sama.
Ada orang-orang yang bakal ngomong hal-hal mengerikan soal JavaScript. Banyak dari hal-hal itu benar. Waktu saya pertama kali diharuskan nulis sesuatu di JavaScript, saya cepat banget jadi benci. Dia nerima hampir apa pun yang saya ketik tapi nafsirinnya dengan cara yang sama sekali beda dari yang saya maksud. Ini banyak hubungannya sama fakta bahwa saya gak tahu apa yang saya lakuin, tentu aja, tapi ada masalah nyata di sini: JavaScript itu sangat longgar dalam apa yang dia bolehin. Ide di balik desain ini adalah biar pemrograman di JavaScript lebih gampang buat pemula. Kenyataannya, ini malah bikin nyari masalah di programmu jadi lebih susah karena sistemnya gak bakal nunjukin ke kamu.
Tapi fleksibilitas ini juga ada untungnya. Dia ngasih ruang buat teknik-teknik yang gak mungkin di bahasa yang lebih kaku dan bikin gaya pemrograman yang menyenangkan dan informal. Setelah belajar bahasanya dengan benar dan kerja pakai dia selama beberapa waktu, saya jadi beneran suka JavaScript.
Udah ada beberapa versi JavaScript. ECMAScript versi 3 adalah versi yang didukung luas selama masa JavaScript naik jadi dominan, kira-kira antara 2000 dan 2010. Selama masa ini, ada pengerjaan versi 4 yang ambisius, yang ngerencanain sejumlah perbaikan dan perluasan radikal ke bahasanya. Ngubah bahasa yang hidup dan dipakai luas dengan cara seradikal itu ternyata susah secara politik, dan pengerjaan versi 4 ditinggalin tahun 2008. Versi 5 yang jauh lebih gak ambisius, yang cuma bikin beberapa perbaikan yang gak kontroversial, keluar tahun 2009. Tahun 2015, versi 6 keluar, sebuah update besar yang nyertain beberapa ide yang direncanain buat versi 4. Sejak itu kita dapet update kecil baru tiap tahun.
Fakta bahwa JavaScript terus berkembang berarti browser harus terus ngikutin. Kalau kamu pakai browser lama, mungkin dia gak mendukung semua fitur. Para perancang bahasanya hati-hati buat gak bikin perubahan yang bisa ngerusak program yang udah ada, jadi browser baru tetap bisa ngejalanin program lama. Di buku ini, saya pakai JavaScript versi 2024.
Browser web bukan satu-satunya platform tempat JavaScript dipakai. Beberapa database, kaya MongoDB dan CouchDB, pakai JavaScript sebagai bahasa scripting dan query mereka. Beberapa platform buat pemrograman desktop dan server, yang paling terkenal proyek Node.js (bahasan Bab 20), nyediain lingkungan buat memprogram JavaScript di luar browser.
Kode, dan Mau Diapain
Kode itu teks yang nyusun program. Kebanyakan bab di buku ini berisi cukup banyak kode. Saya percaya baca kode dan nulis kode itu bagian yang gak bisa dipisahin dari belajar memprogram. Coba jangan cuma sekilas ngelihat contohnya, baca dengan teliti dan pahami. Ini mungkin lambat dan bikin bingung di awal, tapi saya janji kamu bakal cepat nangkep. Sama juga buat latihannya. Jangan anggap kamu paham sebelum kamu beneran nulis solusi yang jalan.
Saya nyaranin kamu nyoba solusi latihanmu di interpreter JavaScript beneran. Dengan begitu, kamu langsung dapet umpan balik apakah yang kamu lakuin jalan, dan, saya harap, kamu bakal tergoda buat bereksperimen dan ngelampauin latihannya.
Waktu baca buku ini di browser, kamu bisa ngedit (dan ngejalanin) semua program contoh dengan ngeklik mereka. (Catatan: ini fitur website aslinya di https://eloquentjavascript.net, di catatan Obsidian ini kamu bisa copy kodenya ke console browser atau Node.js.)
Ngejalanin program yang didefinisikan di buku ini di luar website bukunya butuh sedikit kehati-hatian. Banyak contoh yang berdiri sendiri dan seharusnya jalan di lingkungan JavaScript mana pun. Tapi kode di bab-bab belakangan sering ditulis buat lingkungan tertentu (browser atau Node.js) dan cuma bisa jalan di situ. Selain itu, banyak bab yang mendefinisikan program yang lebih besar, dan potongan kode yang muncul di dalamnya saling bergantung satu sama lain atau ke file eksternal. Sandbox di website nyediain link ke file ZIP yang berisi semua script dan file data yang dibutuhin buat ngejalanin kode buat bab tertentu.
Gambaran Buku Ini
Buku ini kurang lebih berisi tiga bagian. 12 bab pertama ngebahas bahasa JavaScript. Tujuh bab berikutnya soal browser web dan cara JavaScript dipakai buat memprogramnya. Terakhir, dua bab dikhususkan buat Node.js, lingkungan lain buat memprogram JavaScript. Ada lima bab proyek di buku ini yang ngejelasin program contoh yang lebih besar buat ngasih kamu rasa pemrograman yang sebenernya.
Bagian bahasa dari buku ini dimulai dengan empat bab yang ngenalin struktur dasar bahasa JavaScript. Mereka ngebahas struktur kontrol (kaya kata while yang kamu lihat di pengenalan ini), fungsi (nulis blok bangunanmu sendiri), dan struktur data. Setelah ini, kamu bakal bisa nulis program dasar. Berikutnya, Bab 5 dan 6 ngenalin teknik pakai fungsi dan objek buat nulis kode yang lebih abstrak dan ngejaga kerumitan tetap terkendali.
Setelah bab proyek pertama yang ngebangun robot pengantar sederhana, bagian bahasa dari buku ini lanjut dengan bab-bab tentang penanganan error dan perbaikan bug, regular expression (alat penting buat kerja sama teks), modularitas (pertahanan lain terhadap kerumitan), dan pemrograman asinkron (nanganin event yang butuh waktu). Bab proyek kedua, tempat kita ngimplementasiin sebuah bahasa pemrograman, nutup bagian pertama buku ini.
Bagian kedua buku ini, Bab 13 sampai 19, ngejelasin alat-alat yang bisa diakses JavaScript di browser. Kamu bakal belajar nampilin sesuatu di layar (Bab 14 dan 17), merespons input pengguna (Bab 15), dan berkomunikasi lewat jaringan (Bab 18). Ada dua bab proyek lagi di bagian ini: ngebangun game platformer dan program gambar pixel.
Bab 20 ngejelasin Node.js, dan Bab 21 ngebangun website kecil pakai alat itu.
Konvensi Tipografi
Di buku ini, teks yang ditulis dengan font monospace mewakili elemen-elemen program. Kadang ini potongan yang berdiri sendiri, dan kadang cuma nunjuk ke bagian dari program di dekatnya. Program (yang udah kamu lihat beberapa) ditulis kaya gini:
function factorial(n) {
if (n == 0) {
return 1;
} else {
return factorial(n - 1) * n;
}
}Kadang, buat nunjukin output yang dihasilkan program, output yang diharapkan ditulis setelahnya, dengan dua garis miring dan panah di depannya.
console.log(factorial(8));
// → 40320Semoga beruntung!
Ringkasan
- Pemrograman itu nyusun instruksi presisi buat komputer, karena komputer itu bodoh tapi sangat cepat.
- Bahasa pemrograman ngebantu kita ngomong di level lebih tinggi: ngilangin detail gak penting, nyediain blok bangunan (
while,console.log), dan ngebolehin kita bikin blok sendiri (sum,range). - JavaScript lahir tahun 1995 di Netscape, gak ada hubungannya sama Java, dan distandarkan sebagai ECMAScript. Buku ini pakai versi 2024.
- JavaScript itu longgar: gampang buat pemula tapi bikin bug lebih susah ketemu. Setelah dipelajari dengan benar, dia jadi bahasa yang menyenangkan.
- Baca dan tulis kode dengan teliti, kerjain latihannya di interpreter beneran, dan jangan ngerasa paham sebelum solusimu jalan.
- Buku ini punya tiga bagian: bahasa (Bab 1–12), browser (Bab 13–19), dan Node.js (Bab 20–21), dengan lima bab proyek di antaranya.