12. String
String adalah nilai yang paling sering kamu cetak. Lua punya toolkit kecil yang praktis untuk string: menggabungkan, mengukur panjang, mengubah huruf besar-kecil, mengulang, dan memformat angka ke dalamnya. Bab ini membahas yang paling sering kamu pakai sehari-hari.
Menggabungkan string dengan
..
Kamu sudah pernah lihat .. (dua titik). Ini adalah
operator konkatenasi: ia mengembalikan satu string baru
dengan string kedua ditempel di akhir string pertama:
local first = "Hello, "
local second = "world!"
print(first .. second) -- Hello, world!Variabel aslinya tidak berubah — .. membuat string baru.
Kamu juga bisa menggabungkan teks tanpa variabel:
print("Level " .. 7 .. " complete") -- Level 7 completeAngka di salah satu sisi .. otomatis dijadikan teks.
Boolean dan nil tidak bisa — bungkus dulu dengan
tostring().
Panjang string dengan
#
Operator # mengembalikan panjang string dalam byte (sama
dengan jumlah karakter untuk teks bahasa Inggris biasa):
print(#"hello") -- 5
print(#"") -- 0
local greeting = "Welcome"
print(#greeting) -- 7Pakai # kapan pun kamu butuh panjang string — untuk
memusatkan teks, mengecek panjang input, atau membuat border.
Buka exercises/12/01-length.lua. Tambahkan baris yang
mencetak panjang namamu sendiri.
Mengubah huruf besar-kecil
Library string Lua ada di tabel string. Dua fungsi
sederhananya adalah string.upper(s) dan
string.lower(s). Keduanya mengembalikan string
baru dan tidak mengubah string aslinya:
local name = "Keiko"
print(string.upper(name)) -- KEIKO
print(string.lower(name)) -- keiko
print(name) -- Keiko (still the original)Mengulang string
string.rep(s, n) mengembalikan string s
yang diulang sebanyak n kali:
print(string.rep("-", 20)) -- --------------------
print(string.rep("ab", 3)) -- ababab
print(string.rep("=", 4) .. " TITLE " .. string.rep("=", 4))
-- ==== TITLE ====Ini alat yang tepat untuk menggambar border atau mengisi padding teks.
Memformat dengan
string.format
Ketika kamu perlu menyisipkan angka atau teks ke posisi tertentu,
string.format jauh lebih rapi daripada rangkaian
.. yang panjang. Argumen pertama adalah
template berisi placeholder yang diawali
%; sisanya mengisi placeholder tersebut secara
berurutan:
local name = "Keiko"
local level = 7
local hp = 95
print(string.format("%s (Lv %d) HP %d", name, level, hp))
-- Keiko (Lv 7) HP 95Placeholder yang kamu butuhkan sekarang:
| Placeholder | Yang diharapkan | Contoh keluaran |
|---|---|---|
%s |
sebuah string | Keiko |
%d |
bilangan bulat | 7 |
%.2f |
desimal dengan dua angka di belakang titik | 3.14 |
Masih banyak lagi, tapi ketiga itu sudah cukup untuk kebutuhan
sehari-hari. Daftar lengkapnya ada di Lua reference manual bagian
string.format.
Buka exercises/12/02-format.lua. Ubah format string
sehingga keluarannya menjadi
Keiko has 95 HP at level 7.
Escape sequence
Beberapa karakter sulit ditulis di dalam string karena bentrok dengan
tanda baca Lua. Solusinya adalah escape sequence —
backslash \ diikuti sebuah huruf, yang oleh Lua diganti
dengan karakter khusus tersebut:
| Sequence | Artinya |
|---|---|
\n |
baris baru (pindah ke baris berikut) |
\t |
tab |
\" |
tanda kutip ganda literal |
\' |
tanda kutip tunggal literal |
\\ |
backslash literal |
Contoh:
print("Line 1\nLine 2\nLine 3")
-- Line 1
-- Line 2
-- Line 3
print("Name\tLevel\tHP")
-- Name Level HP
print("She said \"hi\" and waved.")
-- She said "hi" and waved.String multi-baris
Ketika sebuah string mencakup banyak baris dan banyak tanda kutip,
escape sequence jadi berantakan. Lua menawarkan cara lain:
[[ untuk membuka dan ]] untuk menutup. Semua
yang ada di antaranya adalah isi string, termasuk baris baru dan tanda
kutip:
local poem = [[
Roses are red,
Violets are blue,
"Pick a number,"
said the program to you.
]]
print(poem)Setelah dibuat, string multi-baris adalah string biasa — hanya cara penulisannya yang lebih nyaman.
Kamu sudah pernah ketemu [[ ]] sebelumnya, pada
--[[ ]] untuk komentar multi-baris. Ide
yang sama — Lua membaca semua yang ada di antara tanda kurung sebagai
satu blok. -- di depannya yang mengubah string multi-baris
menjadi komentar multi-baris.
PR
Soal 1 — Keras dan pelan
Buka exercises/12/homework/01-loud-and-quiet.lua. Sebuah
variabel awal menyimpan namamu. Cetak tiga kali: apa adanya, huruf besar
semua, lalu huruf kecil semua.
Soal 2 — Baris statistik
Buka exercises/12/homework/02-stat-line.lua. Tiga
variabel dideklarasikan di atas: string name, angka level, angka hp.
Dengan menggunakan string.format, cetak satu baris dengan
bentuk persis seperti ini:
Keiko Lv 7 HP 95
Label (Lv, HP) dan spasi antar kolom bisa
berupa spasi literal di dalam format string.
Soal 3 — Puisi tiga baris dalam satu baris kode
Buka exercises/12/homework/03-three-line-poem.lua. Cetak
puisi tiga baris menggunakan tepat satu pemanggilan
print. Pemisah baris harus berasal dari \n di
dalam string. Tambahkan komentar -- setelah pemanggilan
print yang menjelaskan mengapa satu print bisa menghasilkan
tiga baris.
Tantangan — Blok judul
Buka exercises/12/homework/04-title-block.lua. Sebuah
variabel menyimpan sebuah judul (string apa saja yang kamu suka). Cetak
sebuah blok seperti ini, di mana baris tanda hubung atas dan bawah
panjangnya menyesuaikan panjang judul ditambah dua tanda hubung di
setiap sisi:
----- INVENTORY -----
Inside text goes here
----- INVENTORY -----
Gunakan string.rep dan # untuk mengukur
border tanpa menghitung manual. Mengubah judul harus otomatis mengubah
panjang border.
Bingung atau sudah selesai? Buka halaman solusi PR.