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.

bash
# Bentuk umum
kotlinc <file>.kt -include-runtime -d <output>.jar

# Contoh konkret
kotlinc halo.kt -include-runtime -d halo.jar

Penjelasan setiap flag:

FlagKegunaan
halo.ktBerkas sumber Kotlin yang akan dikompilasi
-include-runtimeMenyertakan Kotlin stdlib ke dalam .jar akhir
-d halo.jarMenentukan berkas output (atau direktori output)

Setelah kompilasi berhasil, berkas halo.jar akan muncul di direktori saat ini. Jalankan berkas tersebut dengan perintah java -jar.

bash
java -jar halo.jar

Kode Sumber: halo.kt #

Mari kita lihat kode sumber yang akan kita kompilasi. Simpan kode berikut sebagai halo.kt.

kotlin
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:

text
== 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 dijalankan

Mari kita bedah kode di atas:

  1. fun main() { ... }: titik masuk program Kotlin. Tidak seperti Java, function main tidak perlu berada di dalam class, dan tidak perlu membungkus kode dalam public static void main.
  2. println("== Kompilasi dengan kotlinc =="): function bawaan println mencetak string ke stdout diikuti newline. Tanda sama dengan di sini hanya bagian dari teks yang dicetak, bukan operator.
  3. println(): memanggil println tanpa 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.

bash
# 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 \
     HaloKt

Mode 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.

bash
# Masuk ke REPL
kotlinc

Sesi REPL umumnya terlihat seperti berikut:

text
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
>>> :quit

Perhatikan 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.

PerintahKegunaan
:helpMenampilkan daftar perintah meta yang tersedia
:quitKeluar dari REPL
:historyMenampilkan 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.

text
>>> fun sapa(nama: String) {
...     println("Halo, $nama!")
...     println("Selamat belajar Kotlin")
... }
>>> sapa("Siti")
Halo, Siti!
Selamat belajar Kotlin

Tanda ... 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.

bash
# 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/ HaloKt

Referensi Resmi #

Dokumentasi resmi untuk kompilator command-line dan REPL tersedia di:

Referensi Lanjutan #

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.