Day 7 — JavaScript Error Types: Compile Time and Runtime
Catatan materi Error Type. Materi membahas review variable, memory address, lexical environment, proses source code menjadi machine code, dua tipe error utama yaitu compile time error dan runtime error, contoh error karena string tidak ditutup, reserved keyword seperti let/switch, runtime crash saat program sudah berjalan, pentingnya testing manual, terminal path seperti ~, ., .., index.js sebagai default Node entry, serta Q&A tentang CLI, Linux/Mac/Unix, JIT compiler, dan cara membaca error.
Bug notes
Error menjalankan node . karena tidak ada index.js
node . gagal karena Node mencari entry default index.js dan tidak menemukannya.
Solusi: Rename file menjadi index.js atau jalankan file secara eksplisit dengan node nama-file.js.
Runtime error menghentikan baris setelahnya
Baris setelah error tidak dijalankan, sehingga program tidak mencapai output akhir seperti program selesai.
Solusi: Cari baris terakhir yang berhasil dieksekusi, lalu debug baris yang crash.
Compile time error karena string tidak ditutup
Parser menganggap karakter setelah quote masih bagian dari string sampai akhir file, lalu mengeluarkan pesan invalid or unexpected token.
Solusi: Pastikan setiap quote pembuka punya quote penutup dan struktur kurung/titik koma lengkap.
Komentar pembaca
Komentar akan muncul setelah disetujui admin.
Belum ada komentar yang disetujui.
Tulis komentar
Hari ini aku belajar materi Error Type. Materi dimulai dengan review konsep variable dari pertemuan sebelumnya. Ketika menulis let age = 20, source code dibaca karakter demi karakter sampai membentuk token. Value 20 disimpan di RAM dalam bentuk binary, lalu lokasi penyimpanan itu memiliki memory address. Supaya manusia tidak perlu mengingat alamat memori yang sulit, JavaScript memakai nama variable seperti age sebagai alias. Alias ini dikoneksikan ke memory address melalui lexical environment.
Review ini penting karena error sering terjadi saat JavaScript mencoba membaca source code, membentuk token, melakukan binding nama variable, lalu menjalankan program. Setelah memahami bahwa variable name hanya alias menuju memory address, materi masuk ke inti: error.
Error dalam materi ini dibagi menjadi dua jenis besar: compile time error dan runtime error. Compile time error terjadi saat source code gagal diterjemahkan menjadi machine code. Compiler mencoba membaca dan menerjemahkan kode, tetapi menemukan syntax atau struktur yang tidak valid, sehingga proses compile dibatalkan. Karena gagal di tahap compile, machine code tidak terbentuk dan program tidak bisa dijalankan.
Runtime error berbeda. Runtime error terjadi setelah proses compile berhasil. Source code sudah berhasil diterjemahkan menjadi machine code, lalu program mulai dijalankan. Namun saat execution mencapai baris tertentu, ada logic atau operasi yang gagal sehingga program crash atau berhenti. Jadi compile time error gagal sebelum program jalan, sedangkan runtime error gagal saat program sudah berjalan.
Demo pertama memakai file index.js yang dijalankan dengan node index.js. Ketika console.log('Hello world'); ditulis dengan benar, program berjalan normal. Lalu ditunjukkan contoh compile time error dengan menghapus quote penutup string. Karena string tidak ditutup, JavaScript menganggap semua karakter setelah quote pembuka masih bagian dari string. Akibatnya struktur program tidak lengkap dan compiler mengeluarkan error seperti invalid or unexpected token. Ini compile time error karena kode tidak bisa diterjemahkan menjadi machine code.
Contoh compile time error lain adalah memakai reserved keyword sebagai variable name. JavaScript punya kata kunci seperti let, switch, for, dan lain-lain yang tidak boleh dipakai sebagai identifier. Jika menulis let let = 20 atau let switch = 20, proses parsing/binding gagal. Nama seperti let sudah punya makna khusus di JavaScript, sehingga tidak boleh dipakai sebagai nama variable. Error ini juga terjadi sebelum program berjalan, jadi termasuk compile time error.
Materi juga menjelaskan bahwa error message bisa menyebut lexical atau lexically bound name karena proses alias variable ke memory address terjadi di lexical environment. Jika identifier yang dipakai tidak valid atau bentrok dengan reserved keyword, JavaScript tidak bisa melakukan binding dengan benar.
Untuk runtime error, demo memakai contoh program yang sebagian barisnya berhasil jalan sebelum crash. Misalnya ada console.log('program dimulai') di awal, lalu ada baris yang mencoba mengakses sesuatu yang tidak valid. Jika output 'program dimulai' sempat muncul sebelum error, itu tanda bahwa program berhasil dicompile dan mulai dieksekusi. Error muncul saat runtime ketika execution mencapai baris bermasalah. Baris setelah error, seperti console.log('program selesai'), tidak dijalankan karena program berhenti di titik error.
Materi menekankan bahwa runtime error lebih berbahaya daripada compile time error. Compile time error ketahuan saat developer menjalankan compile atau menjalankan file di lingkungan development, sehingga belum sampai ke customer. Runtime error bisa lolos compile dan baru muncul saat aplikasi dipakai user. Contohnya aplikasi Android/iPhone yang tiba-tiba tertutup sendiri saat digunakan. Produk sudah sampai ke user, tetapi crash saat runtime.
Cara mengurangi runtime error adalah testing dengan teliti. Developer perlu mencoba flow aplikasi secara manual: klik tombol, isi form, jalankan fitur, dan cek apakah ada crash. Di level lebih lanjut ada unit test dan UI test, tetapi untuk tahap awal yang penting adalah teliti menjalankan dan membaca output/error.
Sebagian besar materi juga berisi latihan terminal. Tanda ~ di terminal adalah alias untuk home directory user saat ini, misalnya /home/edwardanthony. Linux adalah multiuser operating system, sehingga tiap user punya folder home sendiri. Command pwd dipakai untuk melihat print working directory. Command cd dipakai untuk berpindah directory. Command ls dipakai untuk melihat isi folder. Command touch dipakai untuk membuat file. Command open dipakai untuk membuka file/folder dengan default application.
Titik . berarti current directory, sedangkan dua titik .. berarti parent directory. Jika berada di folder ~/Desktop/learn-console-log, maka open . membuka folder learn-console-log. Jika cd .. dijalankan, posisi naik ke parent directory. Materi juga menjelaskan bahwa di Node.js, menjalankan node . akan mencari file default bernama index.js. Jika index.js tidak ada, node . akan error. Jika file bernama 1.js atau hello.js, maka harus dijalankan secara eksplisit dengan node 1.js atau node hello.js.
Ada juga penjelasan tentang Linux, Mac, Unix, dan command line. MacOS dan Linux punya banyak command yang mirip karena sama-sama berada dalam keluarga/warisan Unix-like. Karena itu command seperti cd, ls, touch, dan open terasa serupa. Untuk coding, instructor menyarankan Mac sebagai environment terbaik, dengan Linux sebagai alternatif kuat, sedangkan Windows bukan pilihan utama untuk workflow yang diajarkan.
Q&A membahas bahwa JavaScript sekarang tidak lagi murni interpreted seperti dulu. Di browser modern seperti Chrome, engine V8 memakai JIT atau Just-In-Time compilation. Jadi JavaScript modern bisa dicompile ke machine code saat berjalan. Ini menjelaskan kenapa pembahasan compile time dan runtime tetap relevan dalam JavaScript modern.
Q&A lain membahas bahwa enter/baris baru bukan pemisah utama yang membuat program rapi secara mesin. JavaScript membaca karakter, token, dan statement. Titik koma dipakai untuk memisahkan statement. JavaScript modern bisa melakukan automatic semicolon insertion pada beberapa kondisi, tetapi tetap disarankan menulis titik koma agar kode jelas. Kode bisa saja ditulis satu baris panjang selama statement dipisahkan dengan benar, tetapi readability buruk. Coding yang rapi dianggap penting karena kode juga dibaca manusia, bukan hanya mesin.
Kesimpulannya, error adalah bagian normal dari belajar programming. Compile time error terjadi saat code tidak bisa diterjemahkan, biasanya karena syntax salah atau reserved keyword dipakai sebagai identifier. Runtime error terjadi saat program sudah berjalan lalu crash pada logic tertentu. Untuk menjadi developer yang lebih kuat, aku perlu membaca error message, membedakan jenis error, memahami tahap compile vs runtime, memakai terminal dengan benar, dan membiasakan testing manual dengan teliti sebelum fitur dianggap selesai.
error bisa lolos sampai produk dipakai customer lalu aplikasi crash pada flow tertentu.
• index.js adalah default entry untuk node . Saat menjalankan node ., Node mencari file index.js sebagai entry point default.
• Path terminal penting untuk workflow coding ~ adalah home directory, . adalah current directory, dan .. adalah parent directory.
• JavaScript modern memakai JIT compilation Engine seperti V8 di Chrome memakai Just-In-Time compiler sehingga JavaScript modern punya proses compilation saat runtime.
• Readability adalah bagian dari skill developer Kode bisa jalan meski ditulis satu baris panjang, tetapi kode rapi lebih mudah dibaca dan dirawat.
• String yang tidak ditutup memicu compile time error Quote pembuka tanpa quote penutup membuat parser gagal memahami akhir string dan struktur program.
• Compile time error membuat machine code gagal terbentuk Jika syntax tidak valid, compiler tidak bisa menerjemahkan source code menjadi machine code.
• File non-index harus dijalankan secara eksplisit Jika file bernama 1.js atau hello.js, jalankan dengan node 1.js atau node hello.js.
• Variable adalah alias ke memory address Nama variable seperti age memudahkan manusia mengakses value yang sebenarnya disimpan di memory.
• Titik koma membantu memisahkan statement Walau JavaScript modern bisa menebak semicolon dalam beberapa kondisi, titik koma membuat statement lebih eksplisit.
• Mac dan Linux punya command line yang mirip Keduanya Unix-like sehingga command seperti cd, ls, touch, dan perilaku path punya banyak kesamaan.
• Error terbagi menjadi compile time dan runtime Compile time error terjadi sebelum program berjalan, sedangkan runtime error terjadi saat program sudah dieksekusi.
Compile time error karena reserved keyword
JavaScript menolak identifier tersebut karena kata itu sudah menjadi keyword bahasa.
Solusi: Ganti variable name dengan nama deskriptif yang bukan reserved keyword.