Teks dibangun dari karakter. Di Kotlin, satu karakter direpresentasikan oleh tipe Char. Berbeda dari beberapa bahasa seperti C atau Go, Kotlin memperlakukan Char sebagai tipe terpisah dari Int — kita tidak dapat menjumlahkan Char dengan Int langsung. Pada chapter ini kita akan membedah literal Char, escape sequence, akses ke kode Unicode melalui property .code, serta iterasi range karakter.

Literal Char #

Literal Char ditulis di antara tanda kutip tunggal: 'A', '1', ' '. Beberapa karakter khusus memerlukan escape sequence dengan backslash:

LiteralKarakter
'\n'newline (baris baru)
'\t'tab horizontal
'\r'carriage return
'\b'backspace
'\\'backslash itu sendiri
'\''tanda kutip tunggal
'\"'tanda kutip ganda
'\$'tanda dolar (mencegah string template)
'\u03A9'karakter Unicode (huruf Omega Ω)
kotlin Literal Char
val huruf: Char = 'A'
val angka: Char = '1'
val barisBaru: Char = '\n'
val tab: Char = '\t'
val omega: Char = '\u03A9'

Char bukan Int #

Kotlin secara eksplisit memisahkan Char dari Int. Operasi charA + 1 tidak menghasilkan Char berikutnya — kompilator menolak. Untuk mendapatkan nilai numerik dari Char, gunakan property .code. Untuk mengubah Int menjadi Char, gunakan .toChar().

kotlin Char vs Int
val huruf: Char = 'A'
val kode: Int = huruf.code      // 65
val kembali: Char = kode.toChar()  // 'A'

// val salah: Int = huruf       // galat: type mismatch
// val salah2: Char = 65        // galat: type mismatch

Pemisahan ini sengaja dilakukan untuk mencegah kesalahan logika — membandingkan karakter secara numerik memerlukan langkah eksplisit.

Demonstrasi Char #

Berikut program lengkap yang memperlihatkan literal, escape, konversi, dan iterasi karakter:

kotlin
fun main() {
    val huruf: Char = 'A'
    val angka: Char = '1'
    val barisBaru: Char = '\n'
    val tab: Char = '\t'
    val omega: Char = '\u03A9'
    val sigma: Char = '\u03A3'
    val hakCipta: Char = '\u00A9'

    println("huruf    = $huruf    (code = ${huruf.code})")
    println("angka    = $angka    (code = ${angka.code})")
    println("omega    = $omega    (code = ${omega.code})")
    println("sigma    = $sigma    (code = ${sigma.code})")
    println("hakCipta = $hakCipta (code = ${hakCipta.code})")
    print("barisBaru = [$barisBaru]")
    println(" (setelah penanda)")
    print("tab = [$tab]")
    println(" (setelah penanda)")

    println()
    val inisial = 'K'
    val selisih = inisial - 'A'
    println("inisial = $inisial")
    println("inisial - 'A' = $selisih  (posisi huruf di alfabet, basis 0)")

    println()
    println("Konversi Char <-> Int:")
    val kode = huruf.code
    val kembali: Char = kode.toChar()
    println("huruf.code        = $kode")
    println("kode.toChar()     = $kembali")

    println()
    println("Iterasi alfabet A-E:")
    for (c in 'A'..'E') {
        print("$c ")
    }
    println()

    println()
    println("Iterasi angka '0'..'9' melompati 3 langkah:")
    for (c in '0'..'9' step 3) {
        print("$c ")
    }
    println()

    println()
    println("Apakah '5' adalah digit? ${'5'.isDigit()}")
    println("Apakah 'a' huruf kecil? ${'a'.isLowerCase()}")
    println("Versi besar dari 'a'  : ${'a'.uppercaseChar()}")
}

Output yang Dihasilkan:

text
huruf    = A    (code = 65)
angka    = 1    (code = 49)
omega    = Ω    (code = 937)
sigma    = Σ    (code = 931)
hakCipta = © (code = 169)
barisBaru = [
] (setelah penanda)
tab = [	] (setelah penanda)

inisial = K
inisial - 'A' = 10  (posisi huruf di alfabet, basis 0)

Konversi Char <-> Int:
huruf.code        = 65
kode.toChar()     = A

Iterasi alfabet A-E:
A B C D E 

Iterasi angka '0'..'9' melompati 3 langkah:
0 3 6 9 

Apakah '5' adalah digit? true
Apakah 'a' huruf kecil? true
Versi besar dari 'a'  : A

Mari kita amati baris-baris penting pada kode di atas:

  1. Baris 2-8 — deklarasi literal Char dengan berbagai bentuk: huruf biasa, escape sequence (\n, \t), dan Unicode escape (\u03A9 untuk Ω).
  2. Baris 11-13 (huruf.code) — property .code mengembalikan Int yang merupakan kode Unicode (UTF-16 code unit). 'A'.code adalah 65; 'Ω'.code adalah 937.
  3. Baris 17-19 (print("[$barisBaru]")) — karena '\n' adalah newline, output [$barisBaru] akan terbelah: tanda [ diikuti baris baru, lalu ] (setelah penanda) di baris berikutnya. Ini memperlihatkan efek escape sequence secara visual.
  4. Baris 24 (val selisih = inisial - 'A') — operator - pada dua Char menghasilkan Int berupa selisih kode. 'K'.code - 'A'.code = 75 - 65 = 10.
  5. Baris 28-31 (huruf.code dan kode.toChar()) — konversi dua arah: Char → Int via .code; Int → Char via .toChar().
  6. Baris 35-37 (for (c in 'A'..'E')) — range Char didukung langsung; iterasi menghasilkan A B C D E.
  7. Baris 41-43 ('0'..'9' step 3) — range Char juga mendukung step; menghasilkan 0 3 6 9.
  8. Baris 48-50 ('5'.isDigit(), 'a'.isLowerCase(), 'a'.uppercaseChar()) — method utilitas pada Char untuk klasifikasi dan transformasi. Lengkapnya mencakup isLetter(), isWhitespace(), digitToInt(), lowercaseChar(), dan lainnya.

Method utilitas Char #

Beberapa method yang sering dipakai:

MethodKeteranganContoh
.codeKode Unicode (Int)'A'.code → 65
.digitToInt()Nilai digit desimal'7'.digitToInt() → 7
.isDigit()Apakah karakter digit'5'.isDigit() → true
.isLetter()Apakah karakter huruf'A'.isLetter() → true
.isWhitespace()Apakah karakter spasi' '.isWhitespace() → true
.isUpperCase()Apakah huruf besar'A'.isUpperCase() → true
.uppercaseChar()Konversi ke huruf besar'a'.uppercaseChar() → A
.lowercaseChar()Konversi ke huruf kecil'A'.lowercaseChar() → a
.toChar() (dari Int)Konversi Int ke Char65.toChar() → A

Referensi Lanjutan #

  • Characters — dokumentasi resmi tipe Char Kotlin termasuk escape sequence dan konversi ke kode Unicode

Pemahaman tipe Char mempermudah kita mengolah teks. Berikutnya, kita akan melihat String — deretan Char yang membentuk teks lengkap — beserta string template dan multiline string, pada chapter String.