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 complete

Angka 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)       -- 7

Pakai # 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 95

Placeholder 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.