Setiap program Kotlin yang dapat dijalankan sebagai aplikasi CLI memerlukan satu titik masuk: function main. Pada chapter ini kita akan membedah dua bentuk tanda tangan main yang didukung Kotlin, membaca argumen command-line yang diteruskan ke program, dan mengatur exit code melalui kotlin.system.exitProcess. Pemahaman ini menjadi dasar saat kita menulis alat CLI yang berinteraksi dengan shell dan skrip otomatisasi.
Dua Bentuk Tanda Tangan main #
Kotlin mendukung dua tanda tangan resmi untuk function main:
fun main() // bentuk tanpa argumen
fun main(args: Array<String>) // bentuk yang menerima argumen command-lineBentuk pertama dipakai ketika program tidak perlu membaca argumen dari shell. Bentuk kedua dipakai ketika program membaca parameter dari command-line, misalnya path file atau opsi --output. Kompilator Kotlin mengenali kedua tanda tangan ini sebagai titik masuk yang valid.
Berikut contoh bentuk paling sederhana:
fun main() {
val daftar = listOf("Budi", "Siti", "Andi")
println("Peserta pelatihan:")
daftar.forEach { println("- $it") }
}Output yang Dihasilkan:
Peserta pelatihan:
- Budi
- Siti
- AndiProgram tersebut tidak membaca argumen apa pun dari shell; semua data sudah ada di dalam kode.
Membaca Argumen Command-Line #
Bentuk main(args: Array<String>) menerima daftar argumen yang diberikan shell saat menjalankan program. Setiap argumen menjadi satu elemen String di dalam array. Berikut contoh program yang membaca dan mencetak argumen:
fun main(args: Array<String>) {
println("Jumlah argumen: ${args.size}")
if (args.isEmpty()) {
println("Tidak ada argumen yang diberikan.")
return
}
println("Daftar argumen:")
for ((index, value) in args.withIndex()) {
println(" args[$index] = $value")
}
val kode = prosesKode(args.first())
println("Kode keluar proses: $kode")
kotlin.system.exitProcess(kode)
}
fun prosesKode(input: String): Int {
return if (input == "ok") 0 else 1
}Output yang Dihasilkan:
Jumlah argumen: 0
Tidak ada argumen yang diberikan.Mari kita bedah baris penting di atas:
- Baris 1 (
fun main(args: Array<String>)) — parameterargsbertipeArray<String>, bukanArray<String>?. Kotlin menjamin array tidak pernahnull, sehingga kita bisa langsung memanggilargs.sizetanpa pengecekan null. - Baris 3 (
args.size) — propertysizemengembalikan jumlah elemen argumen. Property ini miriplengthdi Java, namun Kotlin menggunakan namasizeuntuk koleksi dan array. - Baris 4-7 (
if (args.isEmpty()) { ... return }) — guard clause yang keluar lebih awal ketika tidak ada argumen. Kata kuncireturnpada functionmainmengakhiri program dengan exit code default0. - Baris 9-11 (
for ((index, value) in args.withIndex())) — destructuring loop yang mengekstrak pasangan indeks dan nilai sekaligus, miripenumeratedi Python. - Baris 13 (
args.first()) — mengembalikan elemen pertama; melemparNoSuchElementExceptionbila array kosong. Guard clause di atas memastikan baris ini aman dijalankan. - Baris 15 (
kotlin.system.exitProcess(kode)) — menghentikan JVM dan mengembalikankodeke shell sebagai exit code.
Mengatur Exit Code dengan exitProcess #
Shell dan sistem operasi membaca exit code untuk menentukan apakah program selesai dengan sukses (0) atau mengalami kegagalan (selain 0). Kotlin menyediakan function kotlin.system.exitProcess(kode: Int) untuk mengatur nilai tersebut secara eksplisit.
import kotlin.system.exitProcess
fun main(args: Array<String>) {
if (args.isEmpty()) {
System.err.println("Penggunaan: program <input>")
exitProcess(2) // 2 = kesalahan penggunaan
}
// ... logika utama ...
exitProcess(0) // 0 = sukses
}Konvensi exit code yang umum dipakai di ekosistem Unix:
| Kode | Arti |
|---|---|
0 | Sukses |
1 | Kegagalan umum (input tidak valid, logika bisnis menolak) |
2 | Kesalahan penggunaan (argumen kurang atau salah format) |
126 | Perintah tidak dapat dieksekusi (izin) |
130 | Dihentikan oleh pengguna (Ctrl+C) |
Tanpa exitProcess, function main kembali secara normal dan JVM mengembalikan exit code 0. Oleh karena itu, kita hanya perlu memanggil exitProcess ketika ingin menyatakan kondisi khusus.
Menjalankan dengan Argumen #
Untuk menguji program yang menerima argumen, kita jalankan JAR dengan menambahkan argumen setelah nama file:
java -jar main_args.jar ok extraOutput yang dihasilkan akan menampilkan args[0] = ok dan args[1] = extra. Bila argumen pertama bukan "ok", function prosesKode mengembalikan 1, dan exitProcess(1) menyebabkan shell melaporkan exit code 1. Shell seperti bash menyimpan exit code terakhir di variabel $?:
java -jar main_args.jar ok
echo "Exit: $?" # mencetak 0
java -jar main_args.jar gagal
echo "Exit: $?" # mencetak 1Referensi Lanjutan #
- Kotlin basic syntax
— panduan resmi
fun main()sebagai pintu masuk program Kotlin - Kotlin command-line compiler
— rujukan kompilator Kotlin CLI untuk menjalankan
main()dari berkas.kt
Function main adalah jembatan antara shell dan logika program Kotlin. Setelah memahami cara menerima argumen dan mengatur exit code, kita siap menambahkan lapisan dokumentasi di atas kode melalui komentar, yang akan kita bahas pada chapter Komentar.