0Pricing
Lua Academy · Ders

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 97

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

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

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

Birleş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)  -- true

Hı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
  • #s baytları 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.concat ile oluşturun
  • Tür dönüştürme için tostring/tonumber kullanı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

  1. Dizelere Giriş: Birleştirme ve Uzunluk
  2. Alt Dizeleri Bulma ve Çıkarma
  3. Çıktı için string.format
  4. string.gsub ve string.gmatch
← Lua Academy Sayfasına Dön