0Pricing
Lua Academy · Pelajaran

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 string

Operator 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 97

string.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"))   -- 54321

string.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())    -- true

Sintaks 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())  -- AUL

Ketidakberubahan 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 end

table.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)  -- true

Pemeriksaan 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
  • #s menghitung 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/tonumber untuk 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

  1. Dasar-Dasar String: Penggabungan dan Panjang
  2. Menemukan dan Mengekstrak Substring
  3. string.format untuk Keluaran
  4. string.gsub dan string.gmatch
← Kembali ke Lua Academy