Dizelere Giriş: Birleştirme ve Uzunluk
Birleştirme için .., uzunluk için #, yineleme ve ters çevirme için string.rep/reverse kullanın.
Dizelere Giriş: Birleştirme ve Uzunluk, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
.. ile Dize Birleştirme
Lua, dize birleştirme için .. (iki nokta) kullanır. Bu işlem dizeler ve sayılarla çalışır (sayılar otomatik olarak dönüştürülür). Pek çok dildeki + işlecinden farklı olarak Lua'da + yalnızca aritmetiktir; dizelerde + kullanmak hataya neden olur.
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# Uzunluk İşleci
# işleci, bir dizenin byte uzunluğunu döndürür. ASCII dizelerinde bu, karakter sayısına eşittir. Çok byte'lı UTF-8 dizelerinde # karakterleri değil byte'ları sayar; UTF-8 emojisi 4 byte olarak sayılır. Karakter sayısını doğru veren uzunluklar için UTF-8 kitaplığı kullanın.
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 ve string.reverse
string.rep(s, n, sep), s dizesini isteğe bağlı ayırıcıyla tam olarak n kez yineler. string.reverse(s), dizenin byte sırasını tersine çevirir. Her ikisi de yeni dizeler döndürür; Lua dizeleri değişmezdir.
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 ve string.lower
string.upper(s) ve string.lower(s), ASCII karakterlerini dönüştürür. Unicode'u işlemezler; ASCII dışı karakterler değişmeden kalır. Büyük-küçük harfe duyarsız karşılaştırma için karşılaştırmadan önce her iki dizeyi de lower biçimine dönüştürün.
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İki Nokta Yöntem Sözdizimi
Dize işlevleri, string.upper(s) yerine dize değerleri üzerinde iki nokta sözdizimiyle s:upper() şeklinde çağrılabilir. Bu, dizelerin __index = string içeren bir üst tablosuna sahip olması sayesinde çalışır; böylece tüm dize kitaplığı işlevlerine herhangi bir dize üzerinde yöntem olarak erişilebilir.
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()) -- AULDizelerin Değişmezliği
Lua dizeleri değişmezdir. Karakterleri doğrudan değiştiremezsiniz. Her dize işlemi yeni bir dize oluşturur. Döngüler içinde yoğun birleştirme yaparken parçaları biriktirmek için tablo kullanıp sonunda table.concat uygulayın; bu, tekrarlanan .. kullanımından çok daha verimlidir.
-- 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 endBirleştirme için table.concat
table.concat(t, sep, i, j), dizi öğelerini bir ayırıcı kullanarak tek bir dizede birleştirir. Yalnızca dize ve sayı değerleriyle çalışır; tablolar veya boolean değerler hata oluşturur. Bu, çok sayıda parçadan dize oluşturmanın en hızlı yoludur.
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, ","))Dize Karşılaştırma
Dizeler, byte değerlerine göre sözlükbilimsel olarak karşılaştırılır. ASCII'de büyük harfler küçük harflerden önce gelir (A=65, a=97); bu nedenle "Z" < "a" doğrudur. Büyük-küçük harfe duyarsız sıralama için her iki tarafta da string.lower kullanın.
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 ve tonumber
tostring(v), herhangi bir değeri dize gösterimine dönüştürür. tonumber(s, base), bir dizeyi sayıya ayrıştırır. tonumber, ayrıştırma başarısız olursa istisna oluşturan birçok dilin aksine nil döndürür. Tam sayı ayrıştırmada taban 2 ile 36 arasında olabilir.
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)Dize Birleştirme
Lua, kısa dizeleri birleştirerek saklar: aynı dize içeriği bellekte aynı nesneyi paylaşır. Bu, dizelerdeki == işlemini karma denetiminden sonra fiilen işaretçi karşılaştırmasına dönüştürür; işlem çok hızlıdır. Birleştirme, dize oluşturmanın küçük bir ek maliyeti (karma hesaplama) olduğu anlamına da gelir; ancak yinelenen dizelerin maliyeti yoktur.
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) -- trueHızlı Kontrol
Lua'da birçok küçük parçadan uzun bir dize oluşturmanın en verimli yolu nedir?
Özet: Dize Temelleri
Önemli noktalar:
..birleştirme yapar; dizeler için asla+kullanmayın#sbaytları sayar (Unicode karakterlerini değil)s:upper(),s:lower(),s:rep(n, sep),s:reverse()- Dizeler değişmezdir; her işlem yeni bir dize döndürür
- Büyük dizeleri tablo +
table.concatile oluşturun - Tür dönüştürme için
tostring/tonumberkullanın
Sıkça Sorulan Sorular
“Dizelere Giriş: Birleştirme ve Uzunluk” dersi ücretsiz mi?
Evet — “Dizelere Giriş: Birleştirme ve Uzunluk” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Dizelere Giriş: Birleştirme ve Uzunluk” dersinde ne öğreneceğim?
Birleştirme için .., uzunluk için #, yineleme ve ters çevirme için string.rep/reverse kullanın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Dizelere Giriş: Birleştirme ve Uzunluk” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Dizelere Giriş: Birleştirme ve Uzunluk
- Alt Dizeleri Bulma ve Çıkarma
- Çıktı için string.format
- string.gsub ve string.gmatch