Topik ini membahas teks pada Julia, yaitu tipe Char untuk satu karakter dan String untuk rangkaiannya, beserta penggabungan, repetisi, dan interpolasi string. Pembahasan juga menyentuh dukungan Unicode, sifat string yang tidak dapat diubah (immutable), dan pencarian teks sederhana. Setelah membacanya, teks dapat disusun, diukur, dan diperiksa menggunakan fungsi pustaka standar.
Char dan String adalah tipe yang berbeda#
Kutip tunggal menandai Char, yaitu satu karakter, sedangkan kutip ganda menandai String, yaitu rangkaian karakter. Keduanya tipe berbeda dan tidak saling dipertukarkan secara diam-diam.
println(typeof('a'))
println(typeof("a"))
println('a' == "a")Char
String
falseWalaupun isinya terlihat sama, 'a' bertipe Char sedangkan "a" bertipe String, sehingga perbandingannya bernilai false. Char menyimpan satu titik kode (code point) Unicode, dan nilainya dapat dibaca sebagai angka.
println(Int('a'))
println('a' + 1)97
bKonversi Int('a') menghasilkan 97, yaitu posisi huruf a pada tabel Unicode, sedangkan 'a' + 1 menghasilkan karakter b. Aritmetika semacam ini berguna untuk menggeser huruf, misalnya pada sandi sederhana.
Penggabungan dengan * dan repetisi dengan ^#
Penggabungan string menggunakan operator *, sedangkan repetisi menggunakan operator ^. Operator + tidak didefinisikan untuk string, sehingga penggabungan dengan + memicu MethodError.
sapaan = "selamat" * " " * "pagi"
println(sapaan)
println("ab" ^ 3)
try
println("ab" * 3)
catch err
println(typeof(err))
endselamat pagi
ababab
MethodErrorPilihan * dan ^ mengikuti aljabar sederhana, yaitu penggabungan "ab" sebanyak tiga kali sama dengan "ab" ^ 3, sebagaimana pangkat merupakan perkalian berulang. Pemanggilan "ab" * 3 tidak memiliki makna yang terdefinisi, sehingga Julia menolaknya alih-alih menebak maksud penulisnya.
Interpolasi dengan tanda dolar#
Interpolasi menanamkan nilai ke dalam string menggunakan tanda $. Variabel ditulis langsung setelah $, sedangkan ekspresi yang lebih panjang diapit tanda kurung.
nama = "Dewi"
umur = 16
println("Nama: $nama")
println("Umur tahun depan: $(umur + 1)")Nama: Dewi
Umur tahun depan: 17Interpolasi $nama membaca variabel pada saat string disusun, dan $(umur + 1) menghitung ekspresinya terlebih dahulu. Tanpa tanda kurung, Julia hanya mengenali nama variabel setelah $, sehingga penulisan $umur + 1 menyisipkan nilai umur lalu menambahkan teks + 1 apa adanya. Alternatif tanpa interpolasi adalah memberikan beberapa argumen ke println(), yang menyambungnya tanpa spasi tambahan. Untuk string yang disimpan atau diteruskan ke fungsi lain, interpolasi lebih ringkas, sedangkan println() multi-argumen praktis untuk keluaran program.
Karakter Unicode, length, dan sizeof#
Julia menyimpan String sebagai byte yang disandikan dalam UTF-8. Fungsi length() menghitung karakter, sedangkan sizeof() menghitung byte yang digunakan untuk menyimpannya, dan keduanya hanya sama untuk teks ASCII murni.
println(length("naïve"))
println(sizeof("naïve"))
println(length("こんにちは"))
println(sizeof("こんにちは"))5
6
5
15Kata naïve memiliki lima karakter tetapi enam byte, karena huruf ï menggunakan dua byte dalam UTF-8. Rangkaian こんにちは berisi lima karakter yang masing-masing menggunakan tiga byte, sehingga totalnya lima belas byte. Pengenal Unicode seperti δ yang muncul pada aturan penamaan variabel memanfaatkan dukungan yang sama.
String tidak dapat diubah#
String pada Julia bersifat immutable, yaitu isinya tidak dapat diganti setelah dibuat. Operasi yang tampak seperti pengubahan memicu error, sedangkan fungsi pemroses teks menghasilkan string baru.
kata = "kucing"
try
kata[1] = 'K'
catch err
println(typeof(err))
end
kata_baru = replace(kata, "k" => "K")
println(kata_baru)
println(kata)MethodError
Kucing
kucingPenugasan pada indeks pertama ditolak dengan MethodError karena string tidak menyediakan mekanisme pengubahan elemennya. Fungsi replace() menghasilkan string baru Kucing, dan variabel kata tetap memuat kucing. Pola ini berlaku umum, yaitu fungsi seperti replace() atau uppercase() menghasilkan string baru tanpa menyentuh string aslinya.
Pencarian teks sederhana#
Fungsi occursin() memeriksa apakah sebuah potongan teks muncul di dalam string lain dan menghasilkan true atau false. Pemeriksaannya peka huruf besar-kecil.
kalimat = "Julia dirancang untuk komputasi numerik"
println(occursin("numerik", kalimat))
println(occursin("julia", kalimat))true
falseKata numerik ditemukan, sedangkan julia tidak, karena kalimatnya memuat huruf kapital J. Untuk pola yang lebih kompleks, fungsi match() menerima ekspresi reguler (regular expression) dan mengembalikan kecocokannya, dan keduanya mencukupi kebutuhan pencarian sehari-hari.
Berkas berikut menyatukan beberapa operasi string menjadi satu program kecil yang menyusun baris identitas.
# Penyusun baris identitas sederhana
const JENJANG = "SMA"
nama = "budi"
kelas = "XI-A"
baris = uppercase(nama) * " | " * JENJANG * " " * kelas
println(baris)
println("Panjang karakter: ", length(baris))
println("Panjang byte: ", sizeof(baris))
println("Memuat jenjang: ", occursin(JENJANG, baris))BUDI | SMA XI-A
Panjang karakter: 15
Panjang byte: 15
Memuat jenjang: trueFungsi uppercase() mengkapitalkan nama, operator * menyambungkan potongan-potongannya, dan occursin() memeriksa hasil akhirnya. Karena seluruh karakternya ASCII, panjang karakter dan panjang byte bernilai sama, yaitu lima belas.
Kesalahan umum#
Kesalahan pertama adalah menggabungkan string dengan +, yang selalu memicu MethodError karena operator tersebut tidak didefinisikan untuk string. Perbaikannya menggunakan operator * atau interpolasi $(), tergantung apakah potongan teksnya berdiri sendiri atau tertanam di dalam kalimat.
Kesalahan kedua adalah membandingkan 'a' dengan "a" dan mengharapkan hasil true. Keduanya tipe yang berbeda, sehingga perbandingannya bernilai false. Apabila perbandingan teks memang dikehendaki, konversikan terlebih dahulu dengan string('a') agar kedua sisi bertipe String.
Kesalahan ketiga adalah mengandalkan sizeof() sebagai jumlah karakter. Pada teks dengan aksara non-ASCII, byte yang tersimpan lebih banyak daripada karakter yang terlihat, sehingga penghitungan yang benar menggunakan length().
Kesalahan keempat adalah mencoba mengganti satu karakter melalui indeks. Penugasan semacam itu ditolak karena string bersifat immutable, dan perbaikannya adalah menyusun string baru dengan replace() lalu mengikat ulang namanya apabila diperlukan.
Ringkasan#
Charditulis dengan kutip tunggal danStringdengan kutip ganda, sehingga'a' == "a"bernilaifalsekarena tipenya berbeda.- Penggabungan menggunakan
*dan repetisi menggunakan^, sedangkan interpolasi$namadan$(ekspresi)menanamkan nilai ke dalam string. length()menghitung karakter dansizeof()menghitung byte UTF-8, sehingga keduanya berbeda pada teks non-ASCII.- String bersifat immutable, sehingga fungsi seperti
replace()menghasilkan string baru danoccursin()menangani pencarian.
Referensi#
- Strings — The Julia Language — Karakter, penggabungan, interpolasi, dan perilaku Unicode string.
- Strings (pustaka standar) — The Julia Language
— Fungsi string standar seperti
occursin,replace, danuppercase. - Unicode Input — The Julia Language
— Cara mengetik karakter Unicode seperti
ïdanこんにちは.