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:
| Literal | Karakter |
|---|---|
'\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 Ω) |
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().
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 mismatchPemisahan 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:
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:
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' : AMari kita amati baris-baris penting pada kode di atas:
- Baris 2-8 — deklarasi literal
Chardengan berbagai bentuk: huruf biasa, escape sequence (\n,\t), dan Unicode escape (\u03A9untuk Ω). - Baris 11-13 (
huruf.code) — property.codemengembalikanIntyang merupakan kode Unicode (UTF-16 code unit).'A'.codeadalah 65;'Ω'.codeadalah 937. - 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. - Baris 24 (
val selisih = inisial - 'A') — operator-pada duaCharmenghasilkanIntberupa selisih kode.'K'.code - 'A'.code = 75 - 65 = 10. - Baris 28-31 (
huruf.codedankode.toChar()) — konversi dua arah:Char → Intvia.code;Int → Charvia.toChar(). - Baris 35-37 (
for (c in 'A'..'E')) — rangeChardidukung langsung; iterasi menghasilkanA B C D E. - Baris 41-43 (
'0'..'9' step 3) — rangeCharjuga mendukungstep; menghasilkan0 3 6 9. - Baris 48-50 (
'5'.isDigit(),'a'.isLowerCase(),'a'.uppercaseChar()) — method utilitas padaCharuntuk klasifikasi dan transformasi. Lengkapnya mencakupisLetter(),isWhitespace(),digitToInt(),lowercaseChar(), dan lainnya.
Method utilitas Char #
Beberapa method yang sering dipakai:
| Method | Keterangan | Contoh |
|---|---|---|
.code | Kode 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 Char | 65.toChar() → A |
Referensi Lanjutan #
- Characters
— dokumentasi resmi tipe
CharKotlin 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.