Kenapa ini penting
CPU hanya mengerti machine code, yaitu deretan angka biner seperti 10110000 01100001. Menulis program langsung dalam bentuk itu hampir mustahil bagi manusia. Bahasa pemrograman adalah jembatan: kamu menulis instruksi dalam bentuk yang mendekati bahasa manusia, lalu alat penerjemah mengubahnya menjadi sesuatu yang bisa dijalankan komputer. Memahami cara penerjemahan ini membantumu mengerti kenapa ada error yang muncul sebelum program jalan dan ada yang baru muncul di tengah jalan, serta kenapa JavaScript bisa jalan di browser sekaligus di server.
Konsep inti
Dari bahasa manusia ke bahasa mesin
Bahasa pemrograman bisa dibayangkan sebagai tangga:
| Tingkat | Contoh | Ciri |
|---|---|---|
| Machine code | 10110000 01100001 |
Langsung dimengerti CPU, tidak ramah manusia |
| Assembly | MOV AL, 61h |
Singkatan instruksi CPU, masih sangat teknis |
| Bahasa tingkat tinggi | JavaScript, Python, Java, C, Go | Mirip bahasa Inggris, fokus ke logika masalah |
Semakin tinggi tingkatnya, semakin mudah dibaca manusia, dan semakin banyak pekerjaan teknis (mengatur memori, register CPU) yang diurus otomatis.
Setiap bahasa punya syntax (aturan penulisan, seperti tata bahasa) dan semantics (makna dari tulisan itu). Kalimat console.log("Halo") benar secara syntax. Kalau kamu menulis console.log("Halo" tanpa kurung tutup, itu syntax error: komputer bahkan tidak bisa memahami kalimatmu.
Compiled vs interpreted
Ada dua cara besar menerjemahkan kode:
- Compiled (dikompilasi): seluruh kode diterjemahkan dulu oleh compiler menjadi file program jadi (misalnya
.exe), baru dijalankan. Contoh: C, C++, Go, Rust. Analogi: menerjemahkan seluruh buku ke bahasa Indonesia dulu, baru dicetak dan dibaca. - Interpreted (diinterpretasi): kode dibaca dan dijalankan baris demi baris oleh interpreter saat program berjalan. Analogi: penerjemah lisan yang menerjemahkan pidato kalimat demi kalimat secara langsung.
| Aspek | Compiled | Interpreted |
|---|---|---|
| Kapan diterjemahkan | Sebelum dijalankan | Saat dijalankan |
| Kecepatan eksekusi | Umumnya lebih cepat | Umumnya lebih lambat |
| Siklus coba-coba | Harus compile ulang setiap ada perubahan | Langsung jalankan |
| Distribusi | File program per sistem operasi | Butuh interpreter di mesin pengguna |
Kenyataannya, batas keduanya kini kabur. JavaScript modern memakai JIT (Just-In-Time) compilation. Mesin JavaScript seperti V8 (dipakai Chrome dan Node.js) mulai dengan menginterpretasi kode, lalu bagian kode yang sering dijalankan dikompilasi menjadi machine code saat program berjalan supaya cepat. Jadi JavaScript sering disebut "bahasa interpreted", tapi mesinnya sebenarnya juga melakukan kompilasi di belakang layar. Untuk pemula, cukup ingat: kamu menulis file .js, lalu langsung menjalankannya tanpa langkah build terpisah.
Posisi JavaScript: di browser dan di Node.js
JavaScript lahir tahun 1995 untuk membuat halaman web interaktif. Nama standarnya adalah ECMAScript, yang diperbarui setiap tahun (ES2015/ES6 adalah lompatan besar yang memperkenalkan let, const, dan arrow function).
Sekarang JavaScript hidup di dua "rumah" utama:
| Browser (Chrome, Firefox, Safari, Edge) | Node.js | |
|---|---|---|
| Mesin | V8 (Chrome/Edge), SpiderMonkey (Firefox), JavaScriptCore (Safari) | V8 |
| Kegunaan | Interaksi halaman web: klik tombol, animasi, form | Server, API, tool command line, script otomatisasi |
| Fasilitas khusus | document, window, alert, prompt |
fs (file), http, process, readline |
| Tidak tersedia | Akses bebas ke file komputer | document, window, alert |
Bahasanya sama, yaitu let, if, for, function, dan seterusnya. Yang berbeda adalah lingkungan (runtime) dan fasilitas tambahan yang disediakan. Analogi: kamu bisa berbahasa Indonesia di kantor maupun di pasar. Bahasanya sama, tapi alat yang tersedia berbeda. Di kantor ada printer, di pasar ada timbangan.
Bahasa lain yang mungkin kamu dengar: HTML (bukan bahasa pemrograman, tapi bahasa markup untuk struktur halaman), CSS (bahasa gaya tampilan), dan TypeScript (JavaScript dengan tambahan tipe data, diubah menjadi JavaScript sebelum dijalankan).
Jenis error berdasarkan waktu
- Syntax error: salah penulisan. Ketahuan sebelum kode dijalankan, saat mesin membaca kode.
- Runtime error: kode valid, tapi gagal saat dijalankan. Misalnya memanggil function yang tidak ada.
- Logic error: program jalan tanpa error, tapi hasilnya salah. Ini yang paling sulit dicari.
Contoh kode
Kode yang sama bisa jalan di browser maupun Node.js selama hanya memakai fitur bahasa inti:
// Fitur bahasa inti: jalan di browser DAN Node.js
const nama = "Rina";
const tahunLahir = 2005;
const umur = 2026 - tahunLahir;
console.log(`${nama} berumur ${umur} tahun`);
// → Rina berumur 21 tahun
// Mengecek kita sedang di lingkungan mana
const diBrowser = typeof window !== "undefined";
const diNode = typeof process !== "undefined" && process.versions?.node;
console.log(diBrowser ? "Jalan di browser" : `Jalan di Node.js versi ${diNode}`);
// → (di Node.js) Jalan di Node.js versi 24.x.x (angkanya mengikuti versi yang terpasang)
Contoh tiga jenis error. Jangan jalankan semuanya sekaligus, coba satu per satu:
// 1) Syntax error: kurung tutup hilang. Seluruh file GAGAL dibaca.
// console.log("Halo"
// → SyntaxError: missing ) after argument list
// 2) Runtime error: kode valid, tapi function-nya tidak ada
// hitungTotal();
// → ReferenceError: hitungTotal is not defined
// 3) Logic error: jalan normal tapi hasilnya salah
const panjang = 5;
const lebar = 3;
const luas = panjang + lebar; // seharusnya dikali, bukan ditambah
console.log("Luas:", luas); // → Luas: 8 (salah, seharusnya 15)
Kesalahan umum
- Mengira JavaScript sama dengan Java. Namanya mirip karena strategi pemasaran tahun 1995, tapi keduanya bahasa yang sangat berbeda.
- Memakai
documentataualertdi Node.js. Itu fasilitas browser. Di Node.js hasilnyaReferenceError: document is not defined. - Menganggap HTML adalah bahasa pemrograman. HTML tidak punya logika seperti percabangan atau perulangan. HTML adalah bahasa markup untuk struktur konten.
- Panik melihat error. Pesan error adalah petunjuk, bukan hukuman. Baca jenis error-nya (SyntaxError, ReferenceError, TypeError) dan nomor barisnya.
Latihan
- Mudah, Kelompokkan bahasa berikut ke "umumnya compiled" atau "umumnya interpreted/JIT": C, JavaScript, Go, Python, Rust.
- Sedang, Tentukan jenis error (syntax, runtime, logic) dari tiga kasus ini: (a)
let x = ;(b) program menghitung rata-rata nilai tapi membagi dengan angka yang salah (c) memanggilcetakLaporan()yang belum pernah dibuat. - Menantang, Tulis kode yang mencetak "Halo dari browser" kalau dijalankan di browser dan "Halo dari Node.js" kalau dijalankan di Node.js.
Lihat solusi
1. Umumnya compiled: C, Go, Rust. Umumnya interpreted/JIT: JavaScript, Python.
2. (a) Syntax error, karena nilai setelah = kosong. (b) Logic error, karena program jalan tapi hasilnya salah. (c) Runtime error (ReferenceError), karena function tidak ditemukan saat dijalankan.
3.
if (typeof window !== "undefined") {
console.log("Halo dari browser");
} else if (typeof process !== "undefined") {
console.log("Halo dari Node.js");
}
// → (di Node.js) Halo dari Node.js
Ringkasan
- Bahasa pemrograman menjembatani bahasa manusia dan machine code yang dimengerti CPU.
- Compiled: diterjemahkan semua sebelum jalan. Interpreted: diterjemahkan saat jalan. JavaScript modern memakai JIT lewat mesin seperti V8.
- JavaScript (standar ECMAScript) berjalan di browser dan di Node.js. Bahasanya sama, fasilitas lingkungannya berbeda.
- Ada tiga jenis error: syntax, runtime, dan logic.
document,window, danalerthanya ada di browser.fsdanprocesshanya ada di Node.js.