Mencetak output ke layar adalah langkah paling dasar dalam setiap program interaktif. Kotlin menyediakan dua function utama dari standard library untuk kebutuhan ini: println dan print. Keduanya menulis ke standard output (stdout), tetapi memiliki perilaku yang berbeda pada karakter newline. Pada chapter ini kita akan membongkar perbedaan keduanya, melihat bagaimana println menerima berbagai tipe argumen, lalu menjelaskan interop dengan System.out.println dari Java.
println vs print #
Function println mencetak argumen yang diberikan dan otomatis menambahkan karakter newline (\n) di akhir baris. Sebaliknya, function print mencetak argumen tanpa menambahkan newline, sehingga pemanggilan print berikutnya akan menyambung pada baris yang sama. Pemilihan antara keduanya bergantung pada apakah kita ingin pindah baris setelah mencetak.
| Function | Newline otomatis | Cocok untuk |
|---|---|---|
println(x) | Ya | Mencetak baris utuh, log baris-per-baris |
print(x) | Tidak | Menyambung beberapa fragmen dalam satu baris |
println() | Ya (newline kosong) | Baris kosong pemisah |
Keduanya menerima argumen bertipe Any?, sehingga kita dapat mencetak String, Int, Double, Boolean, Char, bahkan List atau null tanpa konversi eksplisit.
Contoh Mencetak Berbagai Tipe #
fun main() {
println("Halo, Kotlin!")
println("Selamat datang di bab mencetak output")
print("Baris ini ")
print("menyatu ")
print("menjadi satu baris")
println()
val nama = "Budi"
val umur = 25
println("Nama: $nama, Umur: $umur")
println(2026)
println(3.14)
println('A')
println(true)
println("Kota: " + "Jakarta, " + "Indonesia")
println(listOf("A", "B", "C"))
printSystemOut()
}
fun printSystemOut() {
System.out.println("Dicetak lewat System.out.println")
System.out.print("Bagian ini tanpa newline. ")
System.out.println("Lanjutan di baris yang sama.")
}Output yang Dihasilkan:
Halo, Kotlin!
Selamat datang di bab mencetak output
Baris ini menyatu menjadi satu baris
Nama: Budi, Umur: 25
2026
3.14
A
true
Kota: Jakarta, Indonesia
[A, B, C]
Dicetak lewat System.out.println
Bagian ini tanpa newline. Lanjutan di baris yang sama.Mari kita telaah baris-baris kode di atas:
- Baris 2 dan 3 (
println("Halo, Kotlin!")): functionprintlndari standard library Kotlin mencetak string lalu menambahkan newline. Tidak perlu import apa pun karenaprintlnmerupakan bagian dari package defaultkotlin.ioyang otomatis tersedia. - Baris 5–7 (
print(...)): tiga pemanggilanprintmenyambut fragmen teks tanpa newline. Output ketiganya akan menyatu pada satu baris hinggaprintln()kosong pada baris 8 memaksa pindah baris. - Baris 10 dan 11 (
val nama,val umur): variabelnamabertipeString,umurbertipeInt. Pada baris 12, string template"Nama: $nama, Umur: $umur"mengganti$namadan$umurdengan nilai variabel saat runtime. - Baris 14–17 (
println(2026), dst.):printlnmenerimaInt,Double,Char, danBoolean. Standard library memilih overload yang sesuai berdasarkan tipe argumen, lalu mengonversinya ke representasi teks. - Baris 19 (
println("Kota: " + "Jakarta, " + "Indonesia")): operator+padaStringmelakukan string concatenation. Hasilnya adalah satu string utuh yang dicetak dalam satu baris. - Baris 20 (
println(listOf("A", "B", "C"))): ketika diberikan objek bertipeList,printlnmemanggil methodtoString()pada objek tersebut sehingga menghasilkan format[A, B, C]. - Baris 24 dan 25 (
System.out.println,System.out.print): Kotlin/JVM dapat memanggil API Java langsung.System.outadalah field statikjava.lang.Systembertipejava.io.PrintStream. FunctionprintlndanprintpadaSystem.outberperilaku identik denganprintln/printmilik Kotlin — keduanya menulis ke stdout.
Mencetak Banyak Nilai Sekaligus #
Berbeda dengan printf di bahasa C atau System.out.printf di Java, function println di Kotlin hanya menerima satu argumen. Pernyataan println("a", "b") tidak akan terkompilasi karena tidak ada overload println(String, String). Untuk mencetak banyak nilai dalam satu baris, kita memiliki tiga cara idiomatis.
Cara pertama adalah string template dengan tanda $:
val nama = "Budi"
val umur = 25
println("$nama berumur $umur tahun")Cara kedua adalah string concatenation menggunakan operator +:
val kota = "Jakarta"
val tahun = 2026
println("Kota: " + kota + ", Tahun: " + tahun)Cara ketiga adalah System.out.printf jika kita ingin format gaya C dengan placeholder:
val nama = "Siti"
val umur = 30
System.out.printf("%s berumur %d tahun%n", nama, umur)printf mengembalikan objek PrintStream dan tidak menambahkan newline secara otomatis, sehingga kita perlu menyertakan %n (atau \n) pada format string. Untuk sebagian besar kasus, string template adalah cara yang paling idiomatis di Kotlin.
Karakter Khusus dan Escape Sequence #
Saat mencetak teks yang mengandung tanda kutip atau karakter kontrol, kita perlu menggunakan escape sequence yang diawali backslash:
| Escape | Arti | Contoh |
|---|---|---|
\n | Newline | "baris1\nbaris2" |
\t | Tab horizontal | "nama\tumur" |
\\ | Backslash literal | "C:\\data\\file" |
\" | Tanda kutip ganda | "kata \"halo\"" |
\$ | Tanda dolar literal | "harga \$10" |
\' | Tanda kutip tunggal | "karakter \'A\'" |
Escape \$ berguna ketika kita ingin menampilkan tanda dolar secara literal tanpa memicu interpolasi string template. Topik ini akan dibahas tuntas pada chapter String Template.
Menutup stdout dengan flush #
Function println dan print menulis ke System.out yang merupakan PrintStream dengan auto-flush. Pada program CLI biasa, output akan langsung terlihat di terminal. Namun ketika output di-redirect ke file atau pipe, kadang kita ingin memaksa flush buffer secara eksplisit dengan System.out.flush() setelah rangkaian print. Praktik ini umum dilakukan pada program yang berjalan lama atau interaktif.
Referensi Lanjutan #
- Kotlin stdlib kotlin.io
— paket
kotlin.ioyang menyediakanprintln,print, danSystem.out - Java SE 21 System
— dokumentasi
java.lang.SystemJava SE 21 untukSystem.outdanSystem.err
Dengan pemahaman tentang cara mencetak output, langkah berikutnya adalah belajar membaca input dari pengguna — materi yang akan kita bahas pada chapter Membaca Input.