File Kotlin tidak harus berisi class seperti di Java; sebuah file .kt dapat berisi langsung function, property, dan class di level paling atas. Pada chapter ini kita akan membedah struktur menyeluruh sebuah file Kotlin, mulai dari deklarasi package, import, hingga posisi function main di antara deklarasi top-level lainnya. Kita juga akan melihat bagaimana Kotlin mengurus titik koma opsional dan blok kurung kurawal sebagai pembatas struktur.

Tampilan Menyeluruh File Kotlin #

Sebuah file Kotlin tipikal memiliki empat zona yang muncul berurutan dari atas ke bawah. Berikut contoh file lengkap yang memuat keempat zona:

kotlin
// Deklarasi package — biasanya mengikuti struktur folder
package contoh.dasar

// Import dari standard library Kotlin
import kotlin.math.sqrt

// Top-level property (properti di luar class/function)
val PENGGUNA: String = "Budi"

// Top-level function
fun sapa(nama: String): String {
    return "Halo, $nama! Selamat datang."
}

// Top-level class
class Hitung(private val nilai: Double) {
    fun akar(): Double = sqrt(nilai)
}

// Titik masuk program Kotlin
fun main() {
    println(sapa(PENGGUNA))
    val h = Hitung(144.0)
    println("Akar dari ${h.akar()}")
}

Output yang Dihasilkan:

text
Halo, Budi! Selamat datang.
Akar dari 12.0

Mari kita petakan empat zona pada file di atas:

  1. Package declaration (package contoh.dasar) — menyatakan namespace tempat deklarasi di dalam file bernaung. Bila baris ini dihilangkan, file tetap valid dan isinya berada di package default.
  2. Import statements (import kotlin.math.sqrt) — membawa simbol dari package lain agar dapat dipakai tanpa menyebut nama package panjang.
  3. Top-level declarations — property PENGGUNA, function sapa, dan class Hitung semuanya berada pada level paling atas file, tidak perlu dibungkus class.
  4. fun main() — titik masuk program. Posisinya boleh di mana saja di antara deklarasi top-level lain, namun kebiasaan umum menempatkannya paling bawah.

Deklarasi Top-Level: Function, Property, dan Class #

Kotlin memungkinkan tiga jenis deklarasi utama di luar class: function, property, dan class. Deklarasi tersebut tidak perlu membungkus satu sama lain — sebuah file dapat berisi puluhan function dan class berdampingan.

  • Top-level function: fun sapa(nama: String): String dapat dipanggil langsung dari main tanpa membuat instance.
  • Top-level property: val PENGGUNA disimpan sebagai field statis pada class sintetik yang dibuat kompilator untuk file tersebut.
  • Top-level class: class Hitung berperilaku sama seperti class Java tingkat atas.

Konsekuensi praktis dari deklarasi top-level adalah kode Kotlin jauh lebih ringkas untuk skrip kecil dan utilitas. Tidak ada kewajiban menulis class wrapper hanya untuk menampung satu function.

Posisi main di dalam File #

Function main adalah titik masuk yang dicari runtime Kotlin saat program dijalankan. Kotlin tidak peduli posisi main di dalam file — boleh paling atas, paling bawah, atau di tengah antar deklarasi. Yang penting adalah tanda tangannya: fun main() atau fun main(args: Array<String>).

File boleh berisi beberapa deklarasi top-level lain, dan salah satunya adalah main. Berikut dua layout yang sama-sama valid:

text Layout A: main di akhir
package demo

fun helper() { /* ... */ }

fun main() { helper() }
text Layout B: main di awal
package demo

fun main() { helper() }

fun helper() { /* ... */ }

Pilihan layout adalah soal gaya tim. Banyak proyek Kotlin menempatkan main di bagian bawah karena pembaca biasanya mencari detail implementasi dulu, lalu titik masuk di akhir.

Titik Koma Opsional #

Kotlin tidak mengwajibkan titik koma di akhir statement. Kompilator menentukan akhir statement dari baris baru dan aturan leksikal. Kode berikut sama-sama valid:

kotlin Tanpa titik koma (idiomatic Kotlin)
val a = 1
val b = 2
println(a + b)
kotlin Dengan titik koma (boleh, namun jarang dipakai)
val a = 1;
val b = 2;
println(a + b);

Titik koma dibutuhkan hanya bila dua statement berada pada baris yang sama. Kasus ini jarang muncul dan biasanya dihindari demi keterbacaan:

kotlin Dua statement di satu baris — butuh titik koma
val a = 1; val b = 2

Blok Kurung Kurawal #

Struktur blok di Kotlin memakai pasangan kurung kurawal { dan } seperti Java, C++, dan Go — bukan indentasi seperti Python. Berikut pasangan yang umum ditemui:

KonstruksiPembukaPenutup
Body function{ setelah daftar parameter}
Body class{ setelah nama class}
Body control flow (if, for, while){ setelah kondisi}
Body lambda{ setelah -> atau parameter}

Saat sebuah function body hanya berisi satu expression, kita dapat memakai bentuk expression body dengan tanda = tanpa kurung kurawal:

kotlin Expression body vs block body
fun kuadrat(x: Int): Int = x * x        // expression body

fun kuadratBlok(x: Int): Int {          // block body
    return x * x
}

Kedua bentuk menghasilkan bytecode yang setara; pilihan jatuh pada keterbacaan. Body satu baris biasanya memakai expression body, sementara body yang membutuhkan beberapa statement memakai block body.

Referensi Lanjutan #

  • Kotlin basic syntax — ringkasan sintaks dasar Kotlin untuk memahami struktur package, import, dan fun main()

Struktur file Kotlin sebenarnya ringkas: package, import, dan deklarasi top-level yang dibungkus kurung kurawal. Setelah memahami kerangka ini, kita siap membedah secara spesifik titik masuk program — yaitu function main dalam berbagai bentuk dan argumennya — pada chapter main() Function.