Bahasa pemrograman menetapkan aturan sintaks — kata apa yang boleh dipakai sebagai nama. Namun di atas aturan sintaks, terdapat konvensi yang membantu kode dapat dibaca konsisten oleh banyak developer. Pada chapter ini kita akan membedah konvensi penamaan resmi Kotlin: camelCase untuk variabel dan function, PascalCase untuk class, UPPER_SNAKE_CASE untuk konstanta, serta lowercase untuk package. Kita juga akan melihat kapan konvensi ini boleh dilanggar dengan alasan kuat.
Empat Konvensi Utama #
Kotlin Coding Conventions mengelompokkan penamaan ke dalam empat aturan utama:
| Konteks | Konvensi | Contoh |
|---|---|---|
| Variabel, property, function | camelCase | namaPengguna, hitungTotal() |
| Class, interface, object, enum | PascalCase | class Pengguna, interface DapatDiskon |
| Konstanta compile-time | UPPER_SNAKE_CASE | const val MAX_PESERTA = 50 |
| Package | lowercase tanpa underscore | com.example.demo |
Berikut contoh kode yang menerapkan keempat konvensi:
package contoh.konvensi
// Konstanta compile-time: UPPER_SNAKE_CASE dengan const val
const val MAX_PESERTA: Int = 50
const val NAMA_APLIKASI: String = "BelajarKotlin"
// Top-level property immutable: camelCase
val versiDefault = "1.0.0"
// Function: camelCase, kata kerja
fun hitungTotalBelanja(harga: Int, qty: Int): Int {
return harga * qty
}
// Class: PascalCase
class Pengguna(val namaPengguna: String, val umur: Int)
// Object: PascalCase
object Konfigurasi {
val pathDatabase = "/data/app.db"
}
// Interface: PascalCase, biasanya kata sifat
interface DapatDiskon {
fun terapkanDiskon(persen: Int): Double
}
// Backing property private: underscore prefix
class Penyimpanan {
private var _data: String = ""
val data: String get() = _data
}
fun main() {
val pengguna = Pengguna("Budi", 25)
println("$NAMA_APLIKASI v$versiDefault")
println("Pengguna: ${pengguna.namaPengguna}, umur: ${pengguna.umur}")
val total = hitungTotalBelanja(harga = 5000, qty = 4)
println("Total: $total (maks peserta: $MAX_PESERTA)")
val penyimpanan = Penyimpanan()
println("Penyimpanan awal: '${penyimpanan.data}'")
}Output yang Dihasilkan:
BelajarKotlin v1.0.0
Pengguna: Budi, umur: 25
Total: 20000 (maks peserta: 50)
Penyimpanan awal: ''Mari kita amati penamaan pada kode di atas:
- Baris 4-5 (
MAX_PESERTA,NAMA_APLIKASI) — konstanta compile-time denganconst val, memakaiUPPER_SNAKE_CASE. Penggunaanconstwajib agar nilai disematkan langsung ke bytecode sebagai konstanta. - Baris 8 (
versiDefault) — top-level propertyvalbiasa (bukanconst) tetap memakaicamelCase, karena hanyaconst valyang memakaiUPPER_SNAKE_CASE. - Baris 11 (
hitungTotalBelanja) — function diawali kata kerjahitung, diikuti objekTotalBelanja. Pola kata-kerja + objek memudahkan pembaca memahami aksi function. - Baris 16 (
class Pengguna) — PascalCase tunggal; class biasanya kata benda. - Baris 21 (
object Konfigurasi) — singleton memakai PascalCase seperti class. - Baris 26 (
interface DapatDiskon) — interface sering memakai kata sifat yang diawaliDapat-(Can-) atau-able/-ibleagar polimorfisme terbaca alami. - Baris 31-34 (
_data,data) — backing property private memakai underscore prefix_data, sedangkan property publik tetapcamelCase. Ini adalah konvensi khusus untuk pola backing field.
Aturan camelCase #
camelCase memulai kata pertama dengan huruf kecil dan kata berikutnya dengan huruf besar. Beberapa pedoman khusus:
- Variabel lokal singkat boleh satu kata:
i,nama,total. - Variabel yang merepresentasikan koleksi jamak:
daftarPengguna,itemTerpilih. - Boolean diawali
is,has,can:isAktif,hasPermission,canEdit. - Hindari singkatan tidak jelas: gunakan
konfigurasi, bukancfg.
// Baik
val daftarPeserta = listOf<Pengguna>()
var isCompleted = false
fun prosesPesanan(pesanan: Pesanan): Hasil { /* ... */ }
// Buruk
val dftPsrta = listOf<Pengguna>() // singkatan tidak jelas
var selesai = false // boolean tanpa prefix
fun proses(p: Pesanan): Hasil { /* ... */ } // nama function terlalu umumAturan PascalCase #
PascalCase mirip camelCase tetapi kata pertama juga diawali huruf besar. Pakai untuk class, interface, object, enum class, annotation class, dan typealias:
class PelangganTetap(val id: String)
interface DapatDipulihkan
object CacheMemori
enum class StatusPesan { BARU, TERKIRIM, GAGAL }
annotation class Experiment(val nama: String)
typealias DaftarPengguna = List<Pengguna>Enum constant sendiri memakai UPPER_SNAKE_CASE seperti konstanta compile-time — lihat BARU, TERKIRIM, GAGAL di atas.
Konstanta: UPPER_SNAKE_CASE dengan const val #
Konstanta yang nilainya diketahui saat kompilasi dideklarasikan dengan const val di top-level atau di companion object. Nama memakai UPPER_SNAKE_CASE:
const val MAX_PESERTA = 50
const val NAMA_APLIKASI = "BelajarKotlin"
const val TIMEOUT_DETIK = 30Tanpa modifier const, property val biasa tidak dianggap konstanta compile-time meskipun tidak pernah berubah — kompilator menyimpannya sebagai field statik biasa. Aturan UPPER_SNAKE_CASE hanya berlaku untuk const val; property val lain tetap camelCase.
Nama Package #
Nama package di Kotlin sepenuhnya lowercase, tanpa underscore, dan mengikuti konvensi domain terbalik seperti Java:
com.example.demo // benar
com.example.belajarkotlin // benar
com.example.BelajarKotlin // salah: huruf besar
com.example.belajar_kotlin // salah: underscoreBacking Property dengan Underscore #
Pola backing property memakai underscore prefix pada variabel private dan menyediakan property publik tanpa underscore:
class Penyimpanan {
private var _data: String = ""
val data: String get() = _data
}Konvensi ini eksplisit memberi tahu pembaca bahwa _data hanya pengiring internal untuk property data. Backing field wajib dijelaskan dengan KDoc bila perilakunya tidak trivial.
Referensi Lanjutan #
- Kotlin coding conventions — konvensi resmi penamaan variable, function, class, dan package di Kotlin
Konvensi penamaan menjaga kode tetap dapat dibaca lintas tim. Setelah nama variabel, function, dan class konsisten, kita siap melihat bagaimana Kotlin mengelompokkan kode ke dalam package dan mengimpor simbol dari package lain — pembahasan lengkap menanti pada chapter Package dan Import.