Setelah lingkungan Kotlin siap, langkah pertama yang paling produktif adalah menulis program kecil yang benar-benar berjalan. Pada chapter ini kita akan menulis program Kotlin pertama, membongkar setiap bagian dari fun main(), dan memahami perbedaan antara println dan print. Kita juga akan menjalankan kode tersebut melalui kotlinc (kompilasi penuh) dan kotlin (mode script) agar terbiasa dengan dua alur kerja utama di ekosistem Kotlin.

Anatomi fun main() #

Program Kotlin terkecil yang dapat dijalankan hanya butuh satu function bernama main. Berikut contoh program pertama yang akan kita bedah:

kotlin
fun main() {
    print("Halo, ")
    print("Kotlin!")
    println()
    println("Selamat datang di belajar Kotlin")
    val nama = "Budi"
    println("Halo, $nama!")
}

Output yang Dihasilkan:

text
Halo, Kotlin!
Selamat datang di belajar Kotlin
Halo, Budi!

Mari kita amati setiap baris kode di atas:

  1. Baris 1 (fun main() { ... }) — keyword fun mendeklarasikan sebuah function. Nama main adalah titik masuk yang dicari oleh runtime Kotlin. Kita tidak perlu membungkus main di dalam sebuah class seperti di Java.
  2. Baris 2 (print("Halo, ")) — function print menulis teks ke standard output tanpa menambahkan karakter newline. Kursor tetap berada di akhir teks.
  3. Baris 3 (print("Kotlin!")) — teks kedua langsung menempel pada teks sebelumnya karena print tidak menambah newline.
  4. Baris 4 (println()) — println tanpa argumen hanya mencetak newline, sehingga baris berikutnya muncul di baris baru.
  5. Baris 5 (println("Selamat datang ...")) — println mencetak teks dan menambahkan newline di akhir.
  6. Baris 6 (val nama = "Budi") — val mendeklarasikan variabel read-only bernama nama. Kompilator menyimpulkan tipe String dari nilai "Budi".
  7. Baris 7 (println("Halo, $nama!")) — $nama di dalam string literal adalah string template; Kotlin mengganti $nama dengan nilai variabel saat runtime.

println vs print #

Kedua function ini berasal dari standard library Kotlin dan berjalan di atas System.out JVM. Perbedaannya sederhana namun penting:

FunctionNewline di akhir?Cocok untuk
println(x)YaMencetak satu nilai per baris (log, prompt terpisah)
print(x)TidakMencetak sebagian teks pada baris yang sama (prompt, progress)

println() tanpa argumen hanya menulis newline — berguna untuk menyisipkan baris kosong pemisah. print sebaliknya tidak akan pernah menambah newline secara otomatis, jadi pemanggilan print berturut-turut menghasilkan teks yang menempel.

Mengompilasi dengan kotlinc #

Kompiler kotlinc mengubah file .kt menjadi bytecode JVM. Untuk menghasilkan JAR yang berdiri sendiri lengkap dengan runtime Kotlin, gunakan opsi -include-runtime:

bash Kompilasi menjadi JAR mandiri
kotlinc halo.kt -include-runtime -d halo.jar
java -jar halo.jar

Langkah pertama menghasilkan file halo.jar di direktori kerja. Langkah kedua menjalankan JAR tersebut dengan perintah java -jar seperti aplikasi Java pada umumnya. Pendekatan ini cocok untuk mendistribusikan program Kotlin ke mesin lain yang hanya memiliki JRE.

Bila kita tidak memakai -include-runtime, hasilnya adalah JAR tanpa pustaka Kotlin; JAR tersebut butuh Kotlin runtime di classpath saat dijalankan. Opsi ini dipakai ketika runtime sudah disediakan oleh container aplikasi seperti Tomcat atau Spring Boot.

Menjalankan sebagai Script dengan kotlin #

Kotlin mendukung eksekusi langsung file .kt melalui perintah kotlin. File tersebut dievaluasi sebagai Kotlin script — tidak perlu mendefinisikan fun main secara eksplisit karena seluruh isi file dianggap body script.

bash Menjalankan langsung tanpa kompilasi eksplisit
kotlin halo.kt

Untuk skenario ad-hoc seperti uji coba cuplikan kode, jalankan REPL kotlinc (tanpa argumen) lalu ketik kode langsung. Untuk file script khusus berakhiran .kts, gunakan kotlin file.kts. Perintah kotlin memerlukan file yang berisi fun main() agar dapat menemukan titik masuknya.

Referensi Lanjutan #

Ringkasan Alur Kerja #

Kita dapat memilih dua alur utama sesuai kebutuhan:

  • Kompilasi penuh dengan kotlinc -include-runtime untuk distribusi; menghasilkan JAR mandiri.
  • Eksekusi langsung dengan kotlin halo.kt untuk iterasi cepat selama pengembangan.

Kedua alur tersebut memakai kompilator yang sama di balik layar, sehingga pesan kesalahan sintaks dan aturan tipe tetap konsisten. Pilihan hanya soal kapan kompilasi dilakukan: eksplisit oleh kita, atau implisit oleh runner.

Setelah memahami bentuk terkecil program Kotlin dan cara menjalankannya, langkah berikutnya adalah melihat struktur menyeluruh sebuah file Kotlin — mulai dari deklarasi package, import, hingga posisi main di dalam file — yang akan kita bedah pada chapter Struktur Program Kotlin.