Dasar-Dasar String: Penggabungan dan Panjang
Gunakan .. untuk penggabungan, # untuk panjang, serta string.rep/reverse.
Dasar-Dasar String: Penggabungan dan Panjang adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Penggabungan String dengan ..
Lua menggunakan .. (dua titik) untuk penggabungan string. Operator ini bekerja pada string dan angka (angka dikonversi secara otomatis). Berbeda dari + dalam banyak bahasa, + di Lua hanya digunakan untuk aritmetika — menggunakan + pada string menyebabkan galat.
local first = "Hello"
local second = "World"
print(first .. ", " .. second .. "!") -- Hello, World!
-- Numbers auto-converted
local age = 30
print("Age: " .. age) -- Age: 30
-- Bad: print("x" + "y") ERROR: arithmetic on stringOperator Panjang #
Operator # mengembalikan panjang string dalam byte. Untuk string ASCII, nilainya sama dengan jumlah karakter. Untuk string UTF-8 multibyte, # menghitung byte, bukan karakter — emoji UTF-8 dihitung sebagai 4. Gunakan pustaka UTF-8 untuk panjang yang akurat berdasarkan karakter.
print(#"hello") -- 5
print(#"") -- 0
print(#"café") -- 5 (c,a,f,é=2bytes)
local s = "Lua"
for i = 1, #s do
io.write(string.byte(s, i) .. " ")
end
print() -- 76 117 97string.rep dan string.reverse
string.rep(s, n, sep) mengulang string s tepat sebanyak n kali dengan pemisah opsional. string.reverse(s) membalik urutan byte string. Keduanya mengembalikan string baru — string Lua tidak dapat diubah.
print(string.rep("ab", 3)) -- ababab
print(string.rep("ha", 3, "-")) -- ha-ha-ha
print(string.rep("x", 0)) -- (empty)
print(string.reverse("hello")) -- olleh
print(string.reverse("12345")) -- 54321string.upper dan string.lower
string.upper(s) dan string.lower(s) mengonversi karakter ASCII. Keduanya tidak menangani Unicode — karakter non-ASCII dilewatkan tanpa perubahan. Untuk perbandingan yang tidak membedakan huruf besar-kecil, konversikan kedua string menjadi lower sebelum membandingkannya.
print(string.upper("hello")) -- HELLO
print(string.lower("WORLD")) -- world
print(string.upper("Lua 5.4!")) -- LUA 5.4!
-- Case-insensitive comparison
local a = "Hello"
local b = "hello"
print(a:lower() == b:lower()) -- trueSintaks Metode Titik Dua
Fungsi string dapat dipanggil menggunakan sintaks titik dua pada nilai string: s:upper(), bukan string.upper(s). Ini berfungsi karena string memiliki metatabel dengan __index = string, sehingga semua fungsi pustaka string dapat diakses sebagai metode pada string apa pun.
local s = " hello world "
print(s:upper()) -- HELLO WORLD
print(s:len()) -- 15
print(s:rep(2, "|")) -- same as string.rep(s,2,"|")
-- Chain calls
print(("lua"):upper():reverse()) -- AULKetidakberubahan String
String Lua bersifat tidak dapat diubah. Anda tidak dapat mengubah karakter secara langsung. Setiap operasi string membuat string baru. Untuk penggabungan berat di dalam perulangan, gunakan tabel untuk menampung bagian-bagian string dan table.concat di akhir — jauh lebih efisien daripada penggunaan .. berulang kali.
-- Efficient string building
local parts = {}
for i = 1, 5 do
parts[i] = "item" .. i
end
local result = table.concat(parts, ", ")
print(result) -- item1, item2, item3, item4, item5
-- Slow! Creates 5 intermediate strings:
-- local s = ""
-- for i = 1, 5 do s = s .. "item" .. i endtable.concat untuk Menggabungkan
table.concat(t, sep, i, j) menggabungkan elemen larik menjadi string dengan pemisah. Fungsi ini hanya bekerja dengan nilai string dan angka — tabel atau boolean akan menyebabkan galat. Ini adalah cara tercepat untuk membangun string dari banyak bagian.
local parts = {"one", "two", "three", "four"}
print(table.concat(parts, ", ")) -- one, two, three, four
print(table.concat(parts, " | ", 2, 3)) -- two | three
-- Building CSV
local row = {1, "Alice", 95, true}
-- Need tostring for non-string values:
for i, v in ipairs(row) do row[i] = tostring(v) end
print(table.concat(row, ","))Perbandingan String
String dibandingkan secara leksikografis berdasarkan nilai byte. Huruf besar muncul sebelum huruf kecil dalam ASCII (A=65, a=97), sehingga "Z" < "a" bernilai true. Gunakan string.lower pada kedua sisi untuk pengurutan yang tidak membedakan huruf besar-kecil.
print("abc" < "abd") -- true
print("abc" < "abcd") -- true (shorter)
print("Z" < "a") -- true (Z=90, a=97)
print("10" < "9") -- true (lexicographic!)
print(10 < 9) -- false (numeric)
-- Sort strings case-insensitively
local words = {"Banana","apple","Cherry"}
table.sort(words, function(a,b) return a:lower()<b:lower() end)
print(table.concat(words,", "))tostring dan tonumber
tostring(v) mengonversi nilai apa pun menjadi representasi string-nya. tonumber(s, base) mengurai string menjadi angka. tonumber mengembalikan nil jika penguraian gagal, berbeda dari banyak bahasa yang menimbulkan pengecualian. Basis dapat berupa 2–36 untuk penguraian bilangan bulat.
print(tostring(42)) -- 42
print(tostring(true)) -- true
print(tostring(nil)) -- nil
print(tostring({1,2})) -- table: 0x...
print(tonumber("3.14")) -- 3.14
print(tonumber("0xff")) -- 255 (hex)
print(tonumber("11",2)) -- 3 (binary)
print(tonumber("abc")) -- nil (invalid)Internalisasi String
Lua melakukan internalisasi pada string pendek: string dengan isi yang sama berbagi objek yang sama di memori. Hal ini membuat == pada string pada dasarnya menjadi perbandingan penunjuk setelah pemeriksaan hash—sangat cepat. Internalisasi juga berarti pembuatan string memiliki sedikit biaya tambahan (penghitungan hash), tetapi string yang dibuat berulang kali tidak menambah biaya.
local s1 = "hello"
local s2 = "hel" .. "lo"
-- Same content, interned to same object
print(s1 == s2) -- true
print(#s1) -- 5
-- Long strings may not be interned
-- They are still compared correctly by value
local long1 = string.rep("x", 1000)
local long2 = string.rep("x", 1000)
print(long1 == long2) -- truePemeriksaan Singkat
Apa cara paling efisien untuk membangun string panjang dari banyak bagian kecil di Lua?
Ringkasan: Dasar-Dasar String
Poin-poin penting:
..menggabungkan string; jangan pernah menggunakan+untuk string#smenghitung byte (bukan karakter Unicode)s:upper(),s:lower(),s:rep(n, sep),s:reverse()- String bersifat tidak dapat diubah—setiap operasi mengembalikan string baru
- Bangun string besar dengan tabel +
table.concat tostring/tonumberuntuk konversi tipe
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar String: Penggabungan dan Panjang” gratis?
Ya — teks lengkap “Dasar-Dasar String: Penggabungan dan Panjang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar String: Penggabungan dan Panjang”?
Gunakan .. untuk penggabungan, # untuk panjang, serta string.rep/reverse. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Dasar-Dasar String: Penggabungan dan Panjang” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar String: Penggabungan dan Panjang
- Menemukan dan Mengekstrak Substring
- string.format untuk Keluaran
- string.gsub dan string.gmatch