Setelah kompilator terpasang, kita perlu memahami cara memanggil kotlinc secara langsung dari command-line. Memahami baris perintah kotlinc penting karena langkah yang sama dijalankan di balik layar oleh IDE dan Gradle. Pada chapter ini kita akan mengompilasi file .kt menjadi .jar mandiri, menjalankannya dengan java -jar, lalu masuk ke mode REPL untuk eksperimen interaktif tanpa menyimpan file.
Mode Kompilasi: file ke .jar #
Penggunaan kotlinc yang paling dasar adalah mengompilasi satu file .kt menjadi berkas .jar. Flag -include-runtime menyertakan Kotlin standard library ke dalam berkas .jar akhir, sehingga berkas tersebut dapat dijalankan tanpa classpath tambahan.
# Bentuk umum
kotlinc <file>.kt -include-runtime -d <output>.jar
# Contoh konkret
kotlinc halo.kt -include-runtime -d halo.jarPenjelasan setiap flag:
| Flag | Kegunaan |
|---|---|
halo.kt | Berkas sumber Kotlin yang akan dikompilasi |
-include-runtime | Menyertakan Kotlin stdlib ke dalam .jar akhir |
-d halo.jar | Menentukan berkas output (atau direktori output) |
Setelah kompilasi berhasil, berkas halo.jar akan muncul di direktori saat ini. Jalankan berkas tersebut dengan perintah java -jar.
java -jar halo.jarKode Sumber: halo.kt #
Mari kita lihat kode sumber yang akan kita kompilasi. Simpan kode berikut sebagai halo.kt.
fun main() {
println("== Kompilasi dengan kotlinc ==")
println("Perintah : kotlinc halo.kt -include-runtime -d halo.jar")
println("Eksekusi : java -jar halo.jar")
println()
println("Halo dari Kotlin!")
println("File .jar berhasil dibuat dan dijalankan")
}Output yang Dihasilkan:
== Kompilasi dengan kotlinc ==
Perintah : kotlinc halo.kt -include-runtime -d halo.jar
Eksekusi : java -jar halo.jar
Halo dari Kotlin!
File .jar berhasil dibuat dan dijalankanMari kita bedah kode di atas:
fun main() { ... }: titik masuk program Kotlin. Tidak seperti Java, functionmaintidak perlu berada di dalamclass, dan tidak perlu membungkus kode dalampublic static void main.println("== Kompilasi dengan kotlinc =="): function bawaanprintlnmencetak string ke stdout diikuti newline. Tanda sama dengan di sini hanya bagian dari teks yang dicetak, bukan operator.println(): memanggilprintlntanpa argumen mencetak baris kosong. Ini berguna untuk memberi jarak visual pada output.
Tanpa -include-runtime #
Jika kita tidak menyertakan flag -include-runtime, berkas .jar akhir hanya berisi kelas hasil kompilasi, tanpa Kotlin stdlib. Untuk menjalankan berkas seperti itu, kita perlu menyertakan path ke kotlin-stdlib.jar di classpath.
# Tanpa runtime
kotlinc halo.kt -d halo-no-runtime.jar
# Jalankan dengan classpath ke stdlib
java -cp halo-no-runtime.jar:$KOTLIN_HOME/lib/kotlin-stdlib.jar \
HaloKtMode REPL #
kotlinc tanpa argumen apa pun akan masuk ke mode REPL (Read-Eval-Print Loop). REPL membaca baris kode yang kita ketik, mengevaluasinya, mencetak hasil, lalu menunggu baris berikutnya. REPL cocok untuk eksperimen cepat tanpa harus menyimpan file.
# Masuk ke REPL
kotlincSesi REPL umumnya terlihat seperti berikut:
Welcome to Kotlin version 2.0.21 (JRE 21)
Type :help for help, :quit for quit
>>> val nama = "Budi"
>>> println("Halo, $nama")
Halo, Budi
>>> 1 + 2 * 3
res0: kotlin.Int = 7
>>> :quitPerhatikan beberapa hal penting:
>>>adalah prompt REPL yang menunggu kita mengetik baris kode.res0: kotlin.Int = 7: REPL memberi nama otomatis (res0,res1, dst.) ke setiap hasil ekspresi dan menampilkan tipe serta nilainya.:quit(atau:q) mengakhiri sesi REPL.
Perintah Meta di REPL #
REPL menerima sejumlah perintah khusus yang diawali tanda titik dua. Perintah ini tidak dievaluasi sebagai kode Kotlin, melainkan sebagai instruksi REPL itu sendiri.
| Perintah | Kegunaan |
|---|---|
:help | Menampilkan daftar perintah meta yang tersedia |
:quit | Keluar dari REPL |
:history | Menampilkan riwayat baris yang sudah diketik |
:type <expr> | Menampilkan tipe dari sebuah ekspresi tanpa mengevaluasinya |
Mendefinisikan Function di REPL #
REPL tidak hanya menerima statement satu baris. Kita dapat mendefinisikan function multi-baris dengan mengetik kurung kurawal pembuka, menambahkan baris-baris isi, lalu menutup dengan kurung kurawal penutup.
>>> fun sapa(nama: String) {
... println("Halo, $nama!")
... println("Selamat belajar Kotlin")
... }
>>> sapa("Siti")
Halo, Siti!
Selamat belajar KotlinTanda ... di awal baris menandakan bahwa REPL masih menunggu kelengkapan blok yang sedang didefinisikan. Baris baru di dalam blok dapat diketik bebas sampai kurung kurawal penutup diketik.
Mengompilasi ke Direktori #
Selain menghasilkan .jar, kotlinc juga dapat mengompilasi ke direktori output. Mode ini berguna ketika kita ingin melihat class hasil kompilasi secara individual atau mengelola classpath secara manual.
# Kompilasi ke direktori out/
kotlinc halo.kt -d out/
# Lihat isi direktori output
ls out/
# HaloKt.class META-INF/
# Jalankan dengan classpath
java -cp out/ HaloKtReferensi Resmi #
Dokumentasi resmi untuk kompilator command-line dan REPL tersedia di:
Referensi Lanjutan #
- Kotlin command-line compiler
— rujukan
kotlincdankotlinc-jvmuntuk kompilasi serta eksekusi berkas.kt
Selanjutnya #
Mode REPL kotlinc memberi kita lingkungan interaktif untuk Kotlin. Tetapi kadang kita ingin membandingkan dengan REPL Java yang sudah ada sejak JDK 9. Pada chapter berikutnya, Menggunakan JShell dan REPL, kita akan memakai JShell untuk cuplikan Java, lalu membandingkannya dengan REPL Kotlin untuk memahami kapan memilih salah satu.