Indentasi dan pengenal

Aturan whitespace signifikan serta gaya penamaan pengenal yang tidak peka terhadap kapitalisasi.

Daftar isi

Nim menjadikan whitespace, yaitu karakter spasi di awal baris, sebagai bagian dari struktur bahasa. Jumlah spasi pada awal baris menentukan susunan blok kode, sedangkan nama variabel, proc, dan tipe mengikuti aturan pengenal (identifier) yang tersendiri. Topik ini membahas pembentukan blok melalui indentasi, larangan tab, aturan penulisan pengenal, serta perbandingan pengenal yang tidak peka terhadap gaya huruf. Setelah aturan-aturan ini dipahami, berkas .nim dapat dibaca dan ditulis sesuai bentuk dasar yang ditetapkan compiler.

Blok kode dan indentasi#

Nim tidak menggunakan kurung kurawal untuk mengelompokkan pernyataan. Pengelompokan dilakukan melalui indentasi, yaitu jumlah spasi di awal baris. Kata kunci yang membuka blok, seperti if, proc, dan for, ditutup dengan titik dua, lalu baris-baris anggota blok ditulis lebih menjorok daripada baris pembukanya. Semua baris di dalam satu blok wajib memakai jumlah spasi yang sama, dan blok yang bersarang menjorok lebih dalam lagi.

Program berikut menentukan kategori sebuah nilai ujian. Indentasi dua spasi dipakai untuk blok pertama, dan blok di dalamnya menjorok menjadi empat spasi. Lebar indentasi boleh dipilih bebas selama seragam, dan dua spasi merupakan pilihan yang umum pada kode Nim.

nim kategori_nilai.nim
# Menentukan kategori nilai ujian

let nilai = 86

if nilai >= 0 and nilai <= 100:
  if nilai >= 80:
    echo "kategori: A"
  elif nilai >= 70:
    echo "kategori: B"
  elif nilai >= 60:
    echo "kategori: C"
  else:
    echo "kategori: D"
else:
  echo "nilai di luar rentang 0 sampai 100"
bash
# kompilasi dan jalankan program, hint kompilasi disembunyikan
nim c --hints:off -r kategori_nilai.nim
text Keluaran
kategori: A

Baris if pertama membuka blok pada kedalaman dua spasi, sedangkan elif dan else sejajar dengan if tersebut. Perbandingan di dalam blok membuka blok baru pada kedalaman empat spasi. Keluaran menampilkan kategori A karena nilai 86 berada pada rentang 80 ke atas, dan perubahan nilai 86 menjadi 70 akan menjadikan cabang elif pertama yang terpilih.

Satu ekspresi juga boleh dipecah ke beberapa baris. Apabila sebuah baris diakhiri dengan operator, compiler membaca baris berikutnya sebagai kelanjutan ekspresi tersebut.

nim Contoh: ekspresi yang dilanjutkan ke baris berikutnya
let total = 10 +
            20 +
            30
echo total
text Keluaran
60

Pemecahan semacam ini menjaga baris tetap pendek tanpa mengubah makna program. Indentasi pada baris lanjutan tidak membentuk blok baru, karena blok hanya terbentuk setelah kata kunci yang diakhiri titik dua.

Spasi wajib, tab dilarang#

Indentasi pada Nim hanya boleh terdiri atas spasi. Manual Nim menyatakan aturan ini secara tegas, yaitu indentasi terdiri atas spasi saja dan tabulator tidak diizinkan. Aturan tersebut menghilangkan perbedaan tampilan antara editor yang menggambar tab dengan lebar berbeda, sehingga struktur program terlihat sama di mana saja.

Berkas yang diindentasi dengan tab gagal dikompilasi dengan pesan Error: tabs are not allowed, use spaces instead. Campuran tab dan spasi pada satu berkas memicu pesan yang sama, sedangkan jumlah spasi yang tidak seragam di dalam satu blok memicu pesan Error: invalid indentation. Kedua pesan tersebut menunjuk baris yang menjadi sumber masalahnya, sehingga perbaikan dapat dilakukan langsung pada baris itu.

nim Contoh: indentasi dengan karakter tab
# tidak-dijalankan
if true:
	echo "baris ini menjorok dengan tab"

Potongan di atas gagal dikompilasi karena baris echo menjorok dengan satu karakter tab. Perbaikannya sederhana, yaitu mengganti tab dengan spasi, misalnya dua atau empat spasi sesuai lebar yang dipakai berkas itu.

Aturan penulisan pengenal#

Pengenal (identifier) adalah nama yang diberikan kepada variabel, proc, tipe, dan hal bernama lainnya. Pengenal pada Nim harus diawali huruf, boleh memuat huruf, angka, dan garis bawah tunggal, serta tidak boleh diakhiri garis bawah. Dua garis bawah berurutan juga tidak diizinkan, sehingga nilai_maks sah, sedangkan nilai__maks dan nilai_ ditolak compiler dengan pesan invalid token: trailing underscore.

Kata kunci (keyword) seperti let, var, dan if tidak dapat dipakai sebagai pengenal. Usaha menulis let type = 3 dihentikan compiler dengan pesan Error: identifier expected, but got 'keyword type'. Apabila sebuah nama yang bentrok dengan kata kunci memang diperlukan, nama itu ditulis di dalam tanda aksen grave sehingga kehilangan sifat kata kuncinya.

nim Contoh: kata kunci dipakai sebagai pengenal
var `type` = 10
echo `type`
text Keluaran
10

Perbandingan pengenal yang tidak peka gaya huruf#

Nim membandingkan dua pengenal dengan aturan yang dalam dokumentasinya disebut style insensitivity. Huruf pertama dibandingkan dengan memperhatikan kapitalisasi, huruf-huruf setelahnya dibandingkan tanpa memandang kapitalisasi, dan garis bawah diabaikan sama sekali. Dengan aturan itu, myProc, myproc, my_proc, dan myPROC merupakan pengenal yang sama, sedangkan MyProc merupakan pengenal yang berbeda karena huruf pertamanya berbeda kapitalisasi.

Program berikut memanggil satu proc yang sama melalui tiga penulisan berbeda. Ketiga pemanggilan menunjuk ke proc yang sama, sehingga keluarannya sama semua.

nim penghitung_gaya.nim
# Menunjukkan bahwa penulisan pengenal yang berbeda tetap menunjuk satu proc

proc hitungTotal(a: int, b: int): int =
  result = a + b

echo hitungTotal(10, 20)
echo hitungtotal(10, 20)
echo hitung_total(10, 20)
text Keluaran
30
30
30

Sebaliknya, pemanggilan HitungTotal(1, 2) terhadap proc hitungTotal gagal dikompilasi dengan pesan undeclared identifier: 'HitungTotal', karena huruf pertamanya berbeda kapitalisasi. Aturan huruf pertama ini bermanfaat pada penulisan var foo: Foo, yaitu variabel foo dan tipe Foo tetap dapat dibedakan compiler.

Di atas aturan bahasa, gaya penulisan baku Nim ditetapkan dalam NEP 1. Tipe ditulis PascalCase, pengenal lainnya ditulis camelCase, sedangkan konstanta boleh ditulis PascalCase. Konvensi ini tidak ditegakkan compiler, tetapi patut diikuti agar kode Nim terbaca konsisten di seluruh proyek.

Ringkasan#

  • Blok kode dibentuk dari indentasi spasi, bukan kurung kurawal, dan kata kunci pembuka blok diakhiri titik dua.
  • Tab tidak diizinkan pada indentasi dan memicu error tabs are not allowed, use spaces instead saat kompilasi.
  • Pengenal diawali huruf, boleh memuat angka dan garis bawah tunggal, serta tidak boleh diakhiri garis bawah.
  • Perbandingan pengenal memperhatikan kapitalisasi huruf pertama saja, sehingga myProc dan myproc sama, sedangkan MyProc berbeda.

Referensi#