Setiap variabel, function, class, dan package yang kita tulis butuh nama — yaitu identifier. Pada chapter ini kita akan membedah aturan penamaan identifier, daftar hard keywords yang tidak boleh dipakai sebagai nama, soft keywords dan modifier keywords yang kontekstual, serta trik escape memakai backtick ketika kita terpaksa harus memakai keyword sebagai identifier. Pemahaman ini mencegah kesalahan kompilasi yang sering muncul saat bekerja dengan library Java.
Aturan Identifier #
Identifier Kotlin adalah urutan karakter dengan aturan berikut:
- Diawali huruf (
a–z,A–Z), garis bawah_, atau tanda dolar$. - Karakter berikutnya boleh huruf, digit (
0–9), garis bawah, atau tanda dolar. - Tidak boleh sama dengan hard keyword bila tidak di-escape.
- Boleh mengandung spasi dan karakter Unicode lain bila diapit backtick.
Contoh identifier yang valid:
nama
umurPengguna
MAX_RETRY
_konfigurasi
$debug
nilai2Contoh identifier yang tidak valid (tanpa escape):
2nilai // diawali digit
fun // hard keyword
class // hard keyword
nama-pengguna // mengandung tanda hubungHard Keywords #
Hard keywords adalah kata yang selalu ditafsirkan sebagai keyword dan tidak boleh dipakai sebagai identifier kecuali diapit backtick. Daftar hard keywords utama Kotlin mencakup:
as break class continue do
fun if in interface is
typealias typeof val var when
while return throw try catch
finally for object package importDaftar di atas tidak persis sama dengan Java; Kotlin menambahkan beberapa keyword baru (when, object, is, as, typealias, typeof) dan menghapus keyword yang sudah tidak relevan.
fun main() {
val x = 5
val y = if (x > 0) "positif" else "negatif"
when (x) {
0 -> println("nol")
else -> println(y)
}
}Soft Keywords dan Modifier Keywords #
Berbeda dengan hard keywords, soft keywords hanya berfungsi sebagai keyword pada konteks tertentu; di luar konteks tersebut, kata yang sama dapat dipakai sebagai identifier. Contoh soft keywords:
by get set field
import init constructor receiver
param property set varargSebagai contoh, kata field hanya menjadi keyword di dalam accessor property; di luar situasi tersebut, field dapat dipakai sebagai nama variabel biasa:
var jumlah: Int = 0
get() = field
set(value) { field = if (value >= 0) value else 0 }Modifier keywords adalah kata yang dipakai sebagai modifier deklarasi — public, private, protected, internal, abstract, open, final, override, lateinit, companion, data, inline, operator, infix, tailrec, external, suspend. Modifier ini tidak menghalangi pemakaian kata yang sama sebagai identifier pada konteks lain.
Escape dengan Backtick #
Ketika kita terpaksa memakai keyword sebagai identifier — misalnya karena memanggil method Java bernama in atau is — Kotlin menyediakan escape dengan backtick (`):
// Identifier yang valid dan idiomatik
fun main() {
val nama = "Budi"
val umurPengguna = 25
val MAX_RETRY = 3
println("Pengguna: $nama, umur: $umurPengguna, retry: $MAX_RETRY")
// Identifier dengan backtick — escape keyword yang ingin dipakai sebagai nama
val `in` = "posisi dalam daftar"
val `is` = "boolean flag"
println("in = $`in`, is = $`is`")
// Function dengan nama yang mengandung spasi (diapit backtick)
val hasil = `hitung total`(100, 5)
println("Hasil: $hasil")
}
// Function identifier boleh mengandung spasi bila diapit backtick
fun `hitung total`(harga: Int, qty: Int): Int {
return harga * qty
}Output yang Dihasilkan:
Pengguna: Budi, umur: 25, retry: 3
in = posisi dalam daftar, is = boolean flag
Hasil: 500Mari kita amati bagian penting:
- Baris 9 (
valin= ...) — keywordindiapit backtick sehingga kompilator menafsirkannya sebagai identifier, bukan keyword. Variabelinmenyimpan string biasa. - Baris 10 (
valis= ...) — pola yang sama untuk keywordis. Variabelistetap valid karena di-escape. - Baris 14 (
funhitung total(...)) — identifier function mengandung spasi karena diapit backtick. Kotlin mengizinkan ini untuk keperluan khusus seperti nama test yang ekspresif. - Baris 15-17 — saat memanggil function
hitung total, kita tetap memakai backtick:`hitung total`(100, 5).
Kapan Memakai Backtick #
Backtick sebaiknya dipakai secara selektif, bukan sebagai kebiasaan. Skenario yang umum:
| Skenario | Contoh |
|---|---|
| Memanggil method Java yang namanya sama dengan keyword Kotlin | System.in`` , obj.is(value) |
| Nama function test yang ekspresif | fun `saat input kosong, harus kembalikan 0`() |
| Interoperabilitas dengan library Java lawas | val `class` = "com.example.Foo" |
Backtick tidak mengubah runtime behavior — hanya memengaruhi parsing kompilator. Saat di-compile menjadi bytecode JVM, identifier in tetap disimpan apa adanya; getIn() pada method getter tidak terpengaruh. Bytecode JVM tidak mengenal konsep keyword, sehingga identifier yang di-escape di Kotlin tetap menjadi nama field/method biasa pada level bytecode. Ini berarti kode Kotlin yang memakai keyword sebagai identifier tetap kompatibel dengan library Java yang memanggil method tersebut.
Identifier Unicode dan Karakter Khusus #
Kotlin mendukung karakter Unicode pada identifier, sehingga kita dapat memakai huruf non-Latin:
val nama = "Budi" // sudah biasa
val ñoño = "Siti" // identifier dengan diakritik
val Π = 3.14159 // huruf Yunani untuk konstanta matematikaWalaupun kompiler menerima identifier Unicode, praktik industri cenderung membatasi diri pada ASCII agar mudah dipertukarkan antar tim internasional. Library standar Kotlin sendiri hanya memakai identifier ASCII.
Daftar Lengkap Keywords #
Untuk referensi cepat, berikut ringkasan tiga kategori keyword Kotlin:
| Kategori | Contoh | Boleh jadi identifier? |
|---|---|---|
| Hard keywords | fun, val, var, class, interface, object, package, import, if, when, for, while, do, return, break, continue, throw, try, catch, finally, in, is, as, typealias, typeof | Tidak (kecuali di-escape) |
| Soft keywords | by, get, set, field, init, constructor, receiver, param, property, vararg, tailrec, suspend, data, inline, noinline, crossinline, reified, external | Ya, tergantung konteks |
| Modifier keywords | public, private, protected, internal, abstract, open, final, override, lateinit, companion, sealed, enum, annotation, const, operator, infix | Ya, sebagai modifier deklarasi |
Referensi Lanjutan #
- Kotlin keyword reference — daftar lengkap keyword keras dan lunak Kotlin beserta konteks pemakaiannya
- Kotlin basic syntax — ringkasan sintaks dasar Kotlin untuk aturan identifier yang valid
Memahami identifier dan keyword membangun fondasi penamaan kode yang sehat. Setelah mengetahui kata apa yang boleh dan tidak boleh dipakai sebagai nama, kita siap mengikuti konvensi penamaan resmi Kotlin — pembahasan lengkap menanti pada chapter Aturan Penamaan.