Day 9 — JavaScript Operators, Precedence, Naming, and Constants
Catatan dari materi Operator. Materi membahas operator JavaScript secara lebih utuh: unary/binary/ternary berdasarkan jumlah operand, numeric dan relational operator, string comparison berdasarkan Unicode point, operator precedence dan associativity, naming convention variabel, const vs let, runtime constant, compile-time constant, serta Q&A tentang increment, ISO date string comparison, AI untuk belajar, dan template literal.
Bug notes
Output salah karena precedence dan associativity
Developer mengira JavaScript membaca expression murni dari kiri ke kanan tanpa melihat precedence.
Solusi: Pelajari precedence dasar, gunakan tanda kurung untuk memperjelas, dan cek hasil expression kecil dengan console.log.
Bug karena memakai == saat butuh strict comparison
Kondisi bisa true karena type coercion, bukan karena value dan tipe datanya benar-benar sama.
Solusi: Gunakan === dan !== sebagai default, lalu lakukan konversi eksplisit jika memang perlu.
Bug karena salah memahami jumlah operand
Klasifikasi operator menjadi keliru, misalnya menganggap ++ sama seperti + biasa padahal jumlah operand berbeda.
Solusi: Identifikasi operand terlebih dahulu, lalu tentukan operator bekerja pada satu, dua, atau tiga operand.
Komentar pembaca
Komentar akan muncul setelah disetujui admin.
Belum ada komentar yang disetujui.
Tulis komentar
Hari ini aku belajar materi Operator - Cohort 2 secara lebih lengkap. Materinya ternyata bukan hanya tentang simbol matematika seperti +, -, *, atau /, tetapi juga tentang cara JavaScript membaca expression, membandingkan nilai, menentukan urutan eksekusi operator, memberi nama variabel, dan memakai const dengan benar.
Bagian awal menjelaskan bahwa operator adalah simbol atau bentuk syntax yang melakukan operasi terhadap operand. Contoh sederhananya 2 + 3. Simbol + adalah operator, sedangkan 2 dan 3 adalah operand. Dari sini operator bisa diklasifikasikan berdasarkan jumlah operand: unary, binary, dan ternary. Unary berasal dari uni yang berarti satu, binary dari bi yang berarti dua, dan ternary/tri mengarah ke tiga. Jadi addition operator pada 2 + 3 adalah binary operator karena bekerja pada dua operand. Assignment operator pada name = 'Edward' juga binary operator karena ada operand kiri dan operand kanan.
Materi juga menekankan perbedaan antara nama operator dan klasifikasi operator. Simbol + bernama addition operator, tetapi klasifikasinya bisa binary jika dipakai seperti 2 + 3. Sementara bentuk increment seperti number++ adalah unary operator karena hanya bekerja pada satu operand, yaitu variabel number. Assignment shorthand seperti number += 1 adalah bentuk ringkas dari number = number + 1, sedangkan number++ adalah bentuk lebih ringkas lagi khusus untuk menambah satu.
Numeric operator bekerja pada number. Contohnya addition, subtraction, multiplication, division, exponentiation, dan modulo/remainder. Di JavaScript, exponent memakai **, bukan tanda ^. Tanda ^ di JavaScript bukan pangkat, tetapi bitwise operator. Ini penting karena simbol matematika di kertas tidak selalu sama dengan simbol di programming language.
Setelah numeric operator, materi masuk ke relational operator. Relational operator dipakai untuk membandingkan nilai dan hasil akhirnya selalu boolean: true atau false. Contohnya <, <=, >, >=, ==, ===, !=, dan !==. Di dunia kerja, materi menekankan agar memakai strict equality === dan strict inequality !== karena == melakukan type coercion. Triple equal dibuat untuk memperbaiki masalah dari double equal, sehingga lebih aman dipakai sebagai default.
Perbandingan string dibahas cukup detail. Komputer tidak benar-benar memahami huruf sebagai huruf, tetapi membandingkan decimal representation atau Unicode point dari karakter. Karena itu 'A' dan 'a' tidak sama: A besar punya nilai Unicode berbeda dari a kecil. Saat membandingkan string lebih dari satu karakter seperti 'cat' dan 'car', JavaScript membandingkan karakter satu per satu dari kiri ke kanan. Kalau karakter pertama sama, lanjut ke karakter berikutnya; begitu ada hasil yang menentukan, proses berhenti. Karena t punya nilai lebih besar daripada r, maka 'cat' > 'car' bernilai true.
Ada demo memakai terminal dan Visual Studio Code. Materi memperkenalkan bahwa file JavaScript bisa dibuat lewat terminal, lalu diedit memakai code editor seperti VS Code. Terminal di dalam VS Code bisa dipakai untuk menjalankan node index.js. Ada juga pesan penting agar pemula tidak bergantung pada AI untuk mengerjakan assignment. AI boleh dipakai untuk belajar konsep, tetapi bukan untuk menghasilkan jawaban coding assignment, karena tujuan utama belajar coding adalah membangun skill, bukan sekadar mendapat nilai.
Bagian operator precedence menjelaskan kenapa 1 + 1 * 2 menghasilkan 3, bukan 4. JavaScript punya aturan tingkat kepentingan operator. Multiplication punya precedence lebih tinggi daripada addition, sehingga 1 * 2 dihitung dulu, lalu hasilnya ditambah 1. Grouping operator dengan tanda kurung punya precedence sangat tinggi, sehingga (1 + 1) * 2 menghasilkan 4. Assignment operator punya precedence rendah, sehingga hasil expression dihitung dulu sebelum dimasukkan ke variabel.
Selain precedence, ada associativity. Jika dua operator punya precedence yang sama, JavaScript melihat arah evaluasinya. Untuk additive operator seperti + dan -, associativity-nya left-to-right. Karena itu expression 2 + 2 + '1' diproses dari kiri ke kanan: 2 + 2 menjadi 4, lalu 4 + '1' menjadi string '41'. Ini mengingatkan bahwa operator + bisa menjadi penjumlahan number atau string concatenation tergantung tipe datanya.
Materi kemudian masuk ke variable naming. Penamaan variabel harus jelas supaya tidak ambigu. Contoh expertsexchange bisa dibaca sebagai experts exchange atau expert sex change. Untuk menghindari ambiguitas, developer memakai naming convention. Ada camelCase, PascalCase, snake_case, kebab-case, dan flatcase. Untuk variable name di JavaScript, standar yang dipakai adalah camelCase, misalnya firstName atau lastName. Kalau nama terdiri dari tiga kata atau lebih, kata pertama kecil dan kata berikutnya diawali huruf besar.
Bagian terakhir membahas constant. Constant ditulis memakai const dan value-nya tidak bisa di-reassign. Jika const name = 'John' lalu dipaksa diganti, JavaScript akan memberi error. const berguna untuk proteksi supaya value tidak berubah tanpa sengaja. Selain itu, const bisa memberi benefit optimisasi karena binding bisa ditandai read-only oleh compiler/runtime. Karena itu default terbaik adalah mulai dengan const, lalu ganti ke let hanya jika value memang perlu berubah.
Ada dua konsep constant yang dibedakan: runtime constant dan compile-time constant. Runtime constant adalah value yang baru diketahui saat program berjalan, tetapi setelah disimpan tidak perlu diubah. Penamaannya tetap camelCase. Compile-time constant adalah value yang sudah diketahui sebelum program dijalankan, seperti PI, EARTH_RADIUS, GRAVITY, atau SPEED_OF_LIGHT. Untuk compile-time constant, convention yang dipakai adalah UPPER_SNAKE_CASE.
Q&A di akhir memperjelas beberapa hal. Increment number++ berarti menambah value variabel sebesar satu. String date dalam format ISO 8601 bisa dibandingkan sebagai string karena urutan karakter dan Unicode point-nya membuat tanggal yang lebih baru tersusun lebih besar secara lexical, meskipun best practice pengelolaan tanggal tetap perlu dibahas lebih lanjut. AI boleh dipakai sebagai alat belajar konsep, tetapi bukan untuk membuat kode assignment. Terakhir, backtick atau template literal memungkinkan string multi-line dan interpolation, berbeda dari string biasa dengan quote yang membutuhkan escape sequence seperti
untuk baris baru.
Kesimpulannya, operator bukan sekadar simbol kecil. Operator menentukan bagaimana value diproses, dibandingkan, digabungkan, dan dimasukkan ke variabel. Untuk menulis JavaScript yang rapi dan aman, aku perlu memahami operand, klasifikasi operator, numeric dan relational operator, string comparison, precedence, associativity, naming convention, serta kapan memakai const atau let.
• Strict equality adalah default yang lebih aman === dan !== lebih aman daripada == dan != karena menghindari type coercion otomatis.
• Operator precedence menentukan urutan eksekusi Multiplication lebih penting daripada addition, sedangkan grouping dengan tanda kurung punya prioritas sangat tinggi.
• Assignment operator juga termasuk binary name = "Edward" punya operand kiri dan kanan, sehingga assignment operator termasuk binary operator.
• Naming convention mengurangi ambiguitas kode Variable name JavaScript umumnya memakai camelCase; PascalCase, snake_case, kebab-case, dan flatcase punya konteks lain.
• Gunakan const sebagai default const melindungi value dari reassignment dan bisa membantu optimisasi; gunakan let hanya saat value memang perlu berubah.
• Shorthand assignment dan increment membuat update lebih ringkas number += 1 setara dengan number = number + 1, sedangkan number++ adalah unary operator untuk menambah satu.
• Compile-time constant memakai UPPER_SNAKE_CASE Value yang sudah diketahui sebelum runtime seperti PI atau SPEED_OF_LIGHT ditulis sebagai compile-time constant dengan UPPER_SNAKE_CASE.
• Unary, binary, dan ternary dibedakan dari jumlah operand Unary bekerja pada satu operand, binary pada dua operand, dan ternary pada tiga operand.
• Nama operator berbeda dari klasifikasinya + bernama addition operator, tetapi klasifikasinya binary saat dipakai pada dua operand seperti 2 + 3.
• Associativity menyelesaikan operator dengan precedence sama Jika precedence sama, seperti pada additive operator, JavaScript mengikuti associativity left-to-right.
• Operator bekerja pada operand Pada expression 2 + 3, tanda + adalah operator, sedangkan 2 dan 3 adalah operand yang dikenai operasi.
Bug karena salah memilih let dan const
Value bisa berubah tanpa sengaja dan membuat state program sulit dilacak.
Solusi: Mulai dengan const. Ganti ke let hanya jika ada kebutuhan reassignment yang jelas.