REPL memungkinkan kita mengevaluasi kode baris demi baris tanpa harus menyimpan file dan mengompilasi ulang setiap kali ada perubahan. JDK sendiri menyertakan JShell sejak versi 9, dan Kotlin menyertakan REPL bawaan ketika kita memanggil kotlinc tanpa argumen. Pada chapter ini kita akan memakai kedua REPL tersebut, mendefinisikan function multi-baris, lalu membandingkan kapan memakai JShell dan kapan memakai REPL Kotlin.

Apa itu JShell #

JShell adalah REPL resmi untuk Java, didistribusikan sebagai bagian dari JDK sejak versi 9. JShell membaca cuplikan kode Java, mengevaluasinya, dan menyimpan state di antara cuplikan. Berbeda dengan program Java biasa yang wajib membungkus kode dalam class dan public static void main, JShell menerima statement lepas.

Untuk masuk ke JShell, jalankan perintah berikut di terminal.

bash
jshell

Sesi JShell umumnya terlihat seperti berikut:

text
|  Welcome to JShell -- Version 21
|  For an introduction type: /help intro

jshell> int tahun = 2026
tahun ==> 2026

jshell> System.out.println("Tahun belajar: " + tahun)
Tahun belajar: 2026

jshell> /exit

Perintah /exit mengakhiri sesi JShell. Berbeda dengan REPL Kotlin yang memakai :quit, JShell memakai tanda garis miring untuk perintah meta.

Apa itu REPL Kotlin #

REPL Kotlin dipanggil dengan menjalankan kotlinc tanpa argumen. Berbeda dari JShell yang menerima sintaks Java, REPL Kotlin menerima sintaks Kotlin penuh: function level tinggi, lambda, extension function, dan coroutines.

bash
kotlinc

Mendefinisikan Function Multi-baris #

Salah satu kegunaan paling sering dari REPL adalah mendefinisikan function untuk diuji secara cepat. Kita dapat mengetik function multi-baris dengan menekan Enter setelah kurung kurawal pembuka; REPL akan menunggu baris-baris berikutnya sampai kurung kurawal penutup diketik.

text
>>> fun sapa(nama: String) {
...     val waktu = "pagi"
...     println("Selamat $waktu, $nama")
... }
>>> sapa("Budi")
Selamat pagi, Budi

Tanda ... di awal baris menandakan REPL masih menunggu kelengkapan blok. Kita bebas menambahkan baris sampai kurung kurawal penutup.

Keluar dari REPL #

REPL Kotlin mengakhiri sesi dengan perintah :quit atau singkatnya :q. Sebelum keluar, REPL tidak menyimpan state; cuplikan yang sudah diketik akan hilang setelah sesi berakhir.

text
>>> :quit

Program Simulasi Sesi REPL #

Karena output sesi REPL tergantung input yang diketik, mari kita simulasikan sebuah sesi lengkap dengan program Kotlin biasa. Program ini mencetak baris-baris yang akan muncul jika kita mengetik cuplikan tertentu di REPL.

kotlin
fun main() {
    println("== Sesi REPL Kotlin ==")
    println("ketik: val nama = \"Budi\"")
    println("ketik: println(\"Halo, \$nama\")")
    println()
    println("Halo, Budi")
    println()
    println("ketik: :quit")
    println("Sesi REPL selesai")
}

Output yang Dihasilkan:

text
== Sesi REPL Kotlin ==
ketik: val nama = "Budi"
ketik: println("Halo, $nama")

Halo, Budi

ketik: :quit
Sesi REPL selesai

Mari kita bedah beberapa bagian kode di atas:

  1. println("ketik: val nama = \"Budi\""): tanda \" di dalam string literal adalah escape sequence untuk tanda kutip ganda. Tanpa escape, tanda kutip akan menutup string terlalu cepat.
  2. println("ketik: println(\"Halo, \$nama\")"): tanda \$ di dalam string adalah escape sequence untuk tanda dolar. Tanpa escape, Kotlin akan mencoba menafsirkan $nama sebagai string template yang merujuk ke variabel nama.
  3. println(): memanggil println tanpa argumen mencetak baris kosong untuk memberi jarak visual pada output sesi.

Perbandingan JShell vs REPL Kotlin #

Kedua REPL memang mirip secara konsep, tetapi ada perbedaan praktis yang memengaruhi pilihan kita sehari-hari.

AspekJShellREPL Kotlin
BahasaJava (sejak JDK 9)Kotlin
Perintah meta/exit, /help, /list:quit, :help, :type
Definisi classWajib class wrapperTidak perlu class
String templateTidak ada (Java klasik)Ada ($nama, ${expr})
State sesiTidak persistenTidak persisten
Cocok untukMenguji API Java murniEksperimen sintaks Kotlin

Kapan Memilih Mana #

Pilih JShell ketika kita ingin menguji perilaku method java.time, java.util.stream, atau library Java yang baru saja kita pelajari tanpa harus memikirkan sintaks Kotlin. Pilih REPL Kotlin ketika kita ingin mengeksplorasi fitur Kotlin seperti lambda, scope function, atau extension function yang tidak ada padanannya di Java.

bash
# Mulai JShell untuk uji Java
jshell

# Mulai REPL Kotlin untuk uji Kotlin
kotlinc

Referensi Resmi #

Dokumentasi resmi untuk REPL Kotlin dan JShell tersedia di:

Referensi Lanjutan #

Selanjutnya #

REPL sangat berguna untuk eksperimen cepat, tetapi untuk menulis program nyata kita memerlukan editor yang lebih lengkap dengan navigasi kode, refactoring, dan debugger. Pada chapter berikutnya, Konfigurasi IntelliJ IDEA, kita akan memasang IDE resmi dari JetBrains yang menjadi standar industri untuk pengembangan Kotlin.