0Pricing
Lua Academy · Ders

Sözlükler Olarak Tablolar

Anahtar-değer çiftlerini depolamak için dize ve karma anahtarlar kullanın.

Sözlükler Olarak Tablolar, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. 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.

Dize Anahtarları

Dize anahtarları içeren tablolar sözlükler (karma tabloları) gibi davranır. Alanlara, geçerli tanımlayıcılar için nokta gösterimiyle t.key veya herhangi bir dize için köşeli parantez gösterimiyle t["key"] kullanarak erişin. Her iki biçim de eşdeğerdir; köşeli parantez gösterimi dinamik anahtarları destekler.

local user = {}
user.name = "Alice"
user["age"] = 30
user.role = "admin"

print(user.name)        -- Alice
print(user["age"])      -- 30

local field = "role"
print(user[field])      -- admin (dynamic key)

Tablo Değişmezleri

Sözlükler, key = value söz dizimini kullanan bir tablo değişmeziyle başlatılabilir. Lua'da kayıt oluşturmanın en yaygın yolu budur. Tek bir değişmez içinde dizi tarzı ve sözlük tarzı girdileri birlikte kullanabilirsiniz.

local config = {
  host = "localhost",
  port = 3306,
  database = "myapp",
  debug = false,
  tags = {"web", "api"},  -- nested array
}

print(config.host)        -- localhost
print(config.port)        -- 3306
print(config.tags[1])     -- web

Sözlüklerle Sayma

Sözlüklerin klasik kullanım alanlarından biri sıklık sayımıdır. Bir listenin üzerinde dolaşarak her öğeyi anahtar olarak kullanın ve sayacı artırın. Artırmadan önce nil olup olmadığını denetleyin; başlangıç değeri olarak count[word] or 0 kullanın.

local words = {"lua","is","fast","lua","is","lua"}
local freq = {}

for _, w in ipairs(words) do
  freq[w] = (freq[w] or 0) + 1
end

for word, count in pairs(freq) do
  print(word, count)
end
-- lua 3, is 2, fast 1

Sözlüklerle Gruplama

Verileri bir özelliğe göre gruplayın: Listenin üzerinde dolaşın ve gruplama anahtarını kullanarak öğeleri sözlükteki bir listeye ekleyin. Bu, Lua'daki SQL GROUP BY veya Python'daki defaultdict örüntüsünün karşılığıdır.

local people = {
  {name="Alice", dept="eng"},
  {name="Bob",   dept="hr"},
  {name="Carol", dept="eng"},
  {name="Dave",  dept="hr"},
}
local groups = {}

for _, p in ipairs(people) do
  local d = p.dept
  groups[d] = groups[d] or {}
  groups[d][#groups[d]+1] = p.name
end

print(table.concat(groups.eng, ", "))  -- Alice, Carol

Anahtarın Var Olup Olmadığını Denetleme

Bir anahtarın var olup olmadığını, değerini nil ile karşılaştırarak sınayın. Dikkatli olun: Bir anahtarda depolanan değer nil ise anahtar yok kabul edilir. Varlık göstergeleri için değer olarak nil yerine true depolayın.

local cache = {result=42, mode="fast"}

if cache.result ~= nil then
  print("cached:", cache.result)  -- 42
end

-- Key not present:
if cache.timeout == nil then
  print("no timeout set")
end

-- Membership set pattern
local allowed = {admin=true, editor=true}
if allowed["admin"] then
  print("access granted")
end

Anahtarları Silme

Bir tablo anahtarını kaldırmak için onu nil olarak ayarlayın. Anahtar-değer çifti ortadan kalkar ve çöp toplayıcı değerin belleğini geri alabilir. Yerel bir değişkeni bu şekilde silemezsiniz; yalnızca tablo girdileri silinebilir.

local session = {token="abc123", user="Alice", expires=3600}
print(session.token)   -- abc123

session.token = nil
print(session.token)   -- nil (removed)

-- Count remaining keys
local count = 0
for _ in pairs(session) do count = count + 1 end
print(count)   -- 2

Sözlükleri Birleştirme

Bir tablonun üzerinde dolaşıp girdilerini diğerine kopyalayarak iki tabloyu birleştirin. Her ikisinde de aynı anahtar varsa ikinci tablonun değeri geçerli olur. Bu, Lua'da JavaScript'in Object.assign karşılığıdır.

local defaults = {color="blue", size=12, bold=false}
local overrides = {color="red", italic=true}

local function merge(base, over)
  local result = {}
  for k, v in pairs(base) do result[k] = v end
  for k, v in pairs(over) do result[k] = v end
  return result
end

local opts = merge(defaults, overrides)
print(opts.color, opts.size, opts.italic)  -- red 12 true

Her Türden Anahtar

Tablo anahtarları, nil veya NaN olmayan her türden değer olabilir: dizeler, sayılar, boolean değerler, işlevler ve hatta diğer tablolar. Tamsayı anahtarları ile dize anahtarları dahili olarak farklı depolanır, ancak ikisine de köşeli parantez gösterimiyle aynı şekilde erişilir.

local t = {}
local function myKey() end

t["string"] = 1
t[42] = 2
t[true] = 3
t[myKey] = 4

print(t["string"])  -- 1
print(t[42])        -- 2
print(t[true])      -- 3
print(t[myKey])     -- 4

Sıralı Dolaşım

Lua'daki pairs() dolaşım sırasını garanti etmez. Belirli bir sırada dolaşmak için anahtarları bir dizide toplayın, diziyi sıralayın ve ardından üzerinde dolaşın.

local scores = {Alice=95, Bob=87, Carol=91, Dave=78}

local names = {}
for name in pairs(scores) do
  names[#names+1] = name
end
table.sort(names)

for _, name in ipairs(names) do
  print(name, scores[name])
end
-- Alice 95, Bob 87, Carol 91, Dave 78 (sorted)

Varsayılan Değer Örüntüsü

Yararlı bir örüntü, __index üst tablosu aracılığıyla erişilen bir "defaults" tablosu kullanmaktır. Ana tablo içinde bir anahtar bulunamadığında Lua, anahtarı varsayılanlar tablosunda arar. Bu, birleştirme yapmadan katmanlı yapılandırma olanağı sağlar.

local defaults = {timeout=30, retries=3, verbose=false}
local config = {timeout=60}

setmetatable(config, {__index = defaults})

print(config.timeout)  -- 60  (overridden)
print(config.retries)  -- 3   (from defaults)
print(config.verbose)  -- false (from defaults)

Hızlı Kontrol

Lua'da t tablosundan "x" anahtarını nasıl kaldırırsınız?

Özet: Sözlük Olarak Tablolar

Temel noktalar:

  • Nokta ve köşeli parantez gösterimi: t.key == t["key"]
  • Nil veya NaN olmayan her değer anahtar olabilir
  • Bir anahtarı silmek için değerini nil olarak ayarlayın
  • Sıklık sayımı: t[k] = (t[k] or 0) + 1
  • Sıralı dolaşım: anahtarları toplayın → sıralayın → dolaşın
  • Varsayılan değerler için __index üst tablosunu kullanın

Sıkça Sorulan Sorular

“Sözlükler Olarak Tablolar” dersi ücretsiz mi?

Evet — “Sözlükler Olarak Tablolar” 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.

“Sözlükler Olarak Tablolar” dersinde ne öğreneceğim?

Anahtar-değer çiftlerini depolamak için dize ve karma anahtarlar 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 2. dersidir.

“Sözlükler Olarak Tablolar” 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. Diziler Olarak Tablolar
  2. Sözlükler Olarak Tablolar
  3. Tabloları pairs ve ipairs ile Yineleme
  4. İç İçe Tablolar ve Yapılandırılmış Veriler
← Lua Academy Sayfasına Dön