Kalau kamu baru mulai belajar ngoding, pemandangan pertama yang mungkin kamu temui bukan program yang jalan mulus, melainkan layar penuh teks merah. Komputer sebenernya nggak marah; dia cuma nggak paham apa yang kamu tulis. Di situlah syntax alias aturan sintaks memegang peran.
Bagian ini sering bikin pemula frustrasi, padahal masalahnya bukan soal logika. Seringnya cuma ada satu karakter yang kurang atau salah tempat. Yuk, kita bongkar aturan syntax satu-satu. Tiap aturan bakal kita temani dengan kode yang benar-benar dijalankan.
Poin Penting
- Sintaks adalah aturan tata bahasa yang menentukan bentuk kode yang sah, terpisah dari semantik yang menentukan maknanya.
- Penutup statement, indentasi, dan huruf besar-kecil termasuk aturan sintaks yang beda-beda antar bahasa.
- Nama (identifier) tidak boleh memakai kata kunci bahasa dan tidak boleh diawali angka.
- Kesalahan terbagi tiga: syntax error, runtime error, dan logic error yang paling sulit dilacak.
Grammar dulu, makna kemudian
Syntax itu aturan tata bahasa sebuah bahasa pemrograman: bentuk dan urutan tulisan yang dianggap sah. Kalau kamu sudah tahu istilah ini, lewati saja bagian ini. Lawannya adalah semantics, yaitu makna dari tulisan yang sudah sah tadi. Dua hal ini beda, dan bedanya penting buat dipahami lebih dulu.
Sederhananya, kode kamu dibaca lewat dua tahap. Pertama tokenizing: teks dipotong jadi satuan bermakna seperti nama, angka, dan simbol. Kedua parsing: satuan-satuan itu dirangkai sesuai grammar bahasanya. Begitu grammar-nya dilanggar, prosesnya berhenti di situ dan keluar yang namanya syntax error.
Aturan syntax cuma soal bentuk. Program yang bentuknya sudah sah belum tentu melakukan apa yang kamu mau; itu urusan semantics.
Contoh paling gampang buat ngeliat grammar bekerja nih soal penutup statement, dan itu yang jadi bahasan berikutnya.
Titik koma: satu karakter yang bikin kompilator ngamuk
Banyak bahasa menandai akhir sebuah statement dengan titik koma. C, C++, Java, dan JavaScript termasuk keluarga ini. Kode berikut niatnya mengalikan harga dengan jumlah:
#include <stdio.h>
int main(void) {
int harga = 20000;
int jumlah = 3;
int total = harga * jumlah;
printf("total bayar: %d\n", total);
return 0;
}
Jalanin lewat gcc, dan hasilnya:
total bayar: 60000
Sekarang hapus satu titik koma di baris int total = harga * jumlah. Proses compile langsung berhenti dan compiler-nya nunjuk lokasi masalahnya:
error: expected ',' or ';' before 'printf'
Perhatikan: yang dikeluhkan bukan baris yang kehilangan titik koma, melainkan baris sesudahnya. Compiler baru sadar ada yang aneh ketika sampai ke printf dan baris sebelumnya belum ditutup. Kalau kamu heran kok error-nya nunjuk baris yang kelihatan udah benar, ingat kebiasaan ini.
Python jalan dengan cara lain. Di sana akhir baris alias newline sudah cukup jadi penanda, jadi titik koma nggak wajib. Yang jadi penentu struktur malah indentasi. Itulah kenapa topik ini butuh bagian sendiri.
Kurung kurawal atau indentasi?
Di C, Java, dan JavaScript, blok kode dibatasi kurung kurawal { }. Mau kamu tulis menjorok ke dalam atau rata kiri, selama kurungnya seimbang, programnya tetap sah. Python justru kebalikannya: indentasi bukan sekadar hiasan, tapi bagian dari syntax yang nggak bisa ditawar.
total_belanja = 150000
if total_belanja > 100000:
print("dapat diskon 10%")
print("total bayar:", int(total_belanja * 0.9))
print("terima kasih sudah berbelanja")
Dijalankan, hasilnya:
dapat diskon 10%
total bayar: 135000
terima kasih sudah berbelanja
Sekarang hapus indentasi di baris print("dapat diskon 10%"):
IndentationError: expected an indented block after 'if' statement on line 3
Ada versi yang lebih berbahaya lagi: indentasinya sah, tapi salah tempat.
total_belanja = 50000
if total_belanja > 100000:
print("dapat diskon 10%")
print("terima kasih sudah berbelanja")
Kalau dijalankan, layarnya kosong π
. Jumlah statement-nya sama dengan versi benar, tapi baris print("terima kasih sudah berbelanja") ikut masuk ke dalam blok if. Artinya kalimat itu cuma dicetak kalau dapat diskon, padahal niatnya selalu tercetak. Tuh, bentuk error yang paling licin: tanpa pesan kesalahan sama sekali, tapi artinya sudah bergeser.
Jadi, indentasi di Python itu syntax, bukan gaya penulisan. Urusan bentuk sudah beres; sekarang kita masuk ke soal penamaan, dan di sini huruf besar-kecil ikut bermain.
Huruf besar-kecil dan nama yang boleh dipakai
Sebagian bahasa case-sensitive alias membedakan huruf besar dan kecil. Python adalah salah satunya:
Total = 10
print(total)
Output:
NameError: name 'total' is not defined. Did you mean: 'Total'?
Total dan total dianggap dua wadah yang beda. Di dalam satu program, kamu bebas memakai keduanya, dan itu juga berarti gampang salah ketik π kalau penamaannya nggak konsisten.
Ada juga bahasa yang case-insensitive. SQLite contohnya; nama tabel, nama kolom, dan keyword-nya nggak peduli huruf besar-kecil:
import sqlite3
conn = sqlite3.connect(":memory:")
cur = conn.cursor()
cur.execute("create TABLE laporan (total_belanja INTEGER);")
cur.execute("insert into LAPORAN values (150000);")
print(cur.execute("select TOTAL_BELANJA from Laporan;").fetchone())
Output:
(150000,)
Kamu nulis create kecil, TABLE besar, LAPORAN besar-besar semuaβtetap jalan. Sebaliknya di Python, huruf besar-kecil itu emang harga mati.
Selain soal besar-kecil, ada dua batas lain buat nama yang kamu bikin sendiri (identifier). Kata kunci bahasa nggak boleh dipakai jadi nama, dan nama nggak boleh diawali angka:
class = "matematika"
β SyntaxError: invalid syntax
2total = 5
β SyntaxError: invalid decimal literal
Kata seperti class, if, dan for sudah "dipesan" buat bahasa, jadi kamu tinggal pilih nama lain, seperti kategori, total_belanja, atau jumlah_data. Urusan penamaan sudah kamu pegang; pertanyaan berikutnya, apa sih bedanya statement dan expression?
Statement dan expression, apa bedanya?
Statement adalah perintah lengkap yang melakukan sebuah aksi. Expression adalah potongan yang menghasilkan nilai begitu dievaluasi. Baris total_belanja = 150000 itu statement: dia menyuruh komputer menyimpan sesuatu. Sedangkan total_belanja >= 100000 itu expression: dia cuma nilai, dan nilai itu bisa kamu pakai atau cetak:
total_belanja = 150000
print(total_belanja >= 100000)
True
Di JavaScript pembedaannya sama:
const total_belanja = 150000;
console.log(total_belanja >= 100000);
console.log("total bayar: " + total_belanja * 0.9);
true
total bayar: 135000
Perhatikan baris terakhir: total_belanja * 0.9 dievaluasi jadi 135000, baru dirangkai ke teks. Expression-nya dihitung lebih dulu, statement-nya yang mengantar hasil ke layar. Pembagian ini bakal kepakai terus, terutama pas kamu baca pesan error. Karena bentuk dan makna tadi bisa diuji terpisah, jenis kesalahannya pun bisa kita kelompokkan.
Sintaks salah, program jalan, hasil keliru
Sekarang bagian yang paling berguna buat nge-debug: mengenali tiga jenis error. Ketiganya muncul di waktu yang beda, jadi petunjuknya juga beda.
Syntax error terjadi paling awal. Kode nggak sampai dijalankan karena bentuknya melanggar grammar, seperti titik koma yang hilang di C tadi. Tool-nya bakal kasih tahu baris dan karakter yang dia tersangka.
Runtime error muncul saat kode sudah sah dan mulai jalan, tapi ada yang nggak beres di tengah proses. Contohnya membuka file yang nggak ada atau membagi angka dengan nol. Kodenya lolos parsing, tapi berhenti saat eksekusi.
Logic error yang paling diam-diam. Program jalan sampai selesai tanpa pesan apa pun, tapi hasilnya salah. Perhatikan potongan ini:
harga = 20000
jumlah = 3
total = harga * jumlah / 100
print("total bayar:", total)
Output:
total bayar: 600.0
Syntax-nya sempurna, nggak ada yang berhenti, tapi ada / 100 nyasar yang bikin totalnya jadi 100 kali lebih kecil dari yang seharusnya. Compiler dan interpreter nggak bisa menangkap yang seperti ini; cuma kamu yang tahu 60000 itu angka yang dimaksud. Karena itu, menguasai syntax memang baru langkah pertama.
Kalau kamu sudah bisa ngebedain bentuk yang salah dari makna yang salah, pesan error berhenti jadi sumber panik dan mulai jadi petunjuk. Berikutnya, coba baca balik empat artikel sebelumnya di seri ini dengan mata baru: tiap contoh di sana tunduk pada aturan yang baru saja kamu pelajari. Selamat ngoprek, dan semoga layar merahmu makin jarang! π
Baru mendarat di seri ini? Mulainya dari Konsep Dasar Pemrograman β di situ konsep-konsep lain di seri ini dibahas satu per satu.