Saat menyusun kerangka program, kita sering ingin menulis dulu kerangkanya — judul function, header if, isi class — lalu mengisi logikanya belakangan. Masalahnya, Python mensyaratkan setiap blok berindentasi memiliki minimal satu pernyataan; blok yang dibiarkan kosong menolak untuk dieksekusi. Di sinilah pernyataan pass berperan: pass adalah placeholder sah yang memberi tahu interpreter Python “belum ada yang perlu dilakukan di sini”. Chapter ini membahas kenapa blok kosong ditolak, cara memakai pass, dan perbandingannya dengan ... (Ellipsis).
Blok Kosong Memicu Galat #
Setiap struktur kontrol Python — if, for, while, def, class — diakhiri titik dua dan wajib diikuti blok berindentasi. Blok yang kosong membuat interpreter Python kehabisan tebakan tentang isi struktur tersebut:
suhu = 31
if suhu > 30:Simpan kode di atas sebagai file lalu jalankan dengan python3 nama_file.py; interpreter Python menolak mengeksekusinya (path file pada pesan galat akan menyesuaikan komputer Anda):
File "nama_file.py", line 3
if suhu > 30:
IndentationError: expected an indented block after 'if' statement on line 3Galat IndentationError tersebut muncul sebelum satu baris pun dieksekusi — pemeriksaan ini terjadi pada tahap parsing, bukan saat runtime.
pass: Placeholder yang Sah #
Pernyataan pass tidak melakukan apa pun — dan justru itu fungsinya. Kehadiran pass memenuhi syarat “blok minimal satu pernyataan” sehingga program tetap sah dijalankan. Bahasa seperti PHP atau C memperbolehkan blok kosong karena tanda kurung kurawal {} sudah menandai batas blok; Python tidak punya penanda semacam itu, sehingga interpreter Python mengandalkan isi blok untuk mengenali struktur — dan blok tanpa isi membuat parsing gagal:
suhu = 31
if suhu > 30:
pass # logika peringatan panas ditulis menyusul
else:
print("Cuaca normal")
print("Program tetap berjalan sampai akhir")Output yang Dihasilkan:
Program tetap berjalan sampai akhirMari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 4 (
pass): syarat “blok berisi minimal satu pernyataan” terpenuhi meskipun belum ada logika; eksekusi langsung melewatinya. - Baris 5-6 (
else:): karena cabangifyang terpilih (kondisi31 > 30bernilaiTrue), blokelsetidak dieksekusi. - Baris 8 (
print(...)): program berlanjut dan selesai tanpa galat — bandingkan dengan versi kosong yang langsung ditolak.
Stub untuk Kerangka Program #
Kegunaan pass yang paling umum di dunia nyata adalah stub: kerangka function atau class yang isinya menyusul. Program utuh tetap bisa dijalankan dan diuji per bagian:
def kirim_email(penerima, isi):
pass # TODO: integrasi dengan layanan email
def hitung_pajak(total_belanja):
pass
kirim_email("[email protected]", "Halo, pesanan Anda diproses")
print("Hasil hitung_pajak:", hitung_pajak(150000))Output yang Dihasilkan:
Hasil hitung_pajak: NoneKedua function dipanggil tanpa galat, tetapi kirim_email() dan hitung_pajak() belum mengembalikan nilai — function tanpa return secara implisit mengembalikan None. Kerangka seperti ini memungkinkan kita menyusun alur besar program dulu, lalu mengisi tiap bagian satu per satu tanpa memecah eksekusi.
pass vs … (Ellipsis) #
Python punya kandidat placeholder lain: tiga titik ... yang dievaluasi menjadi object Ellipsis.
>>> ...
Ellipsis
>>> type(...)
<class 'ellipsis'>Karena ... adalah expression bernilai (bukan pernyataan khusus), ... juga sah dipakai sebagai satu-satunya isi blok:
def fitur_baru(): ...
print(fitur_baru())
print(... is Ellipsis)
print(type(...))Output yang Dihasilkan:
None
True
<class 'ellipsis'>Perbedaan praktis keduanya:
| Aspek | pass | ... |
|---|---|---|
| Jenis | pernyataan khusus yang tak berbuat apa-apa | expression bernilai Ellipsis |
| Nilai | tidak punya nilai | object Ellipsis |
| Konvensi pemakaian | placeholder umum untuk blok sementara | stub pada kode modern dan type hints |
Perhatikan bahwa pass bukan cara menonaktifkan kode — untuk itu, komentar # lebih tepat karena isinya tetap terbaca sebagai dokumentasi. Dengan pass, kerangka program Python tetap dapat dijalankan sejak hari pertama.