Dizin İmzaları (Index Signatures)
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası — ders 72 / 73.
Tablolar bölümünde {[string]: number} gibi harita (map) türleriyle karşılaşmıştınız — bu bir index signature'dır: herhangi bir string anahtarı (key) bir number değerine eşlenir. Bunlar, siz kodu yazarken anahtarların henüz bilinmediği durumlarda parlar: sayaçlar, ayarlar, önbellekler, skorlar — çalışma zamanında (runtime) oluşturulan her şey.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- herhangi bir dize anahtarına izin verilir
counts["sword"] = 1
counts["potion"] += 1 -- değerler sayı olarak kontrol edilirHaritalarla çalışırken iki çalışma zamanı gerçeği önemlidir. İlki, hiç ayarlanmamış bir anahtarı okumak nil döndürür — klasik sayma kalıbı bunu or ile ele alır ve "eksik" olanı 0 değerine dönüştürür:
counts[item] = (counts[item] or 0) + 1İkincisi, pairs() bir haritanın anahtarlarını garanti edilen bir sıra olmadan yineler — aynı programı iki kez çalıştırmak anahtarları farklı sıralarla ziyaret edebilir. Çıktının öngörülebilir olması gerektiğinde, anahtarları bir dizide (array) toplayın, table.sort ile sıralayın ve bunun yerine sıralanmış diziyi yineleyin:
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endGörev
KolayTürlü bir map ile ganimet düşüşlerini sayın.
type Counts = {[string]: number}tanımlayın.- Her string'in kaç kez göründüğünü sayan yeni bir
Countsharitası oluşturancountItems(items: {string}): Countsfonksiyonunu yazın ((counts[item] or 0) + 1desenini kullanın). local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}oluşturun ve bunu sayın.- Farklı her öğe için alfabetik sırada tek bir
[name]: [count]satırı yazdırın: anahtarları toplayın (collect), onlarıtable.sortile sıralayın, ardından yazdırın.
Beklenen çıktı:
potion: 3
shield: 1
sword: 2Kendin dene
-- Kodu buraya yaz
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts (counts[item] or 0) + 1 kullanarak
-- 3) görevdeki loot dizisini say
-- 4) anahtarları topla, table.sort ile sırala, `{name}: {count}` satırlarını yazdır
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Luau'ya Giriş bölümündeki tüm dersler
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışmak
Parametreleri ve Geri Dönüş Değerlerini TiplendirmeAnonim Fonksiyonları TiplendirmeHiçbir Şey Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriDeğişken Sayıda Parametre Alan Fonksiyonlar (Variadic)Fonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar2Temel Tipler
Temel Tipler: num, str, bool'any' Tipi: Kaçış Yolu'unknown' TipiNil ve İsteğe Bağlı (Optional) TiplerUygulamada Tip ÇıkarımıAçık Tip BelirteçleriÖzet: Temel Tipler Pratiği5Diğer Adlar (Aliases), Birleşimler, Kesişimler
İlkel Tipler için Tip Diğer Adları (Type Aliases)Birleşim Tipleri (Union Types)Birleşim Tipleri ile ÇalışmakLiteral (Sabit) TiplerKesişim Tipleri (Intersection Types)Tip Diğer Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları8Enum'lar: Luau Yöntemi
Luau'da Enum DeseniTablolar ile Sayısal Enum'larBirlik Olarak Metin Enum'larıHarfi Birlik Enum'larını KullanmaSabit Tabloları DondurmaÖzet: Enum'lar, Luau Yöntemi11İleri Düzey Konular
Tür Doğrulamaları (Type Assertions)typeof ile Tür Muhafızları (Type Guards)never TürüKatı Modda Nil GüvenliğiDizin İmzaları (Index Signatures)Özet: Türlerde İnce Ayar Yapma3Tipli Tablolar: Diziler ve Map'ler
Tipli DizilerEleman Ekleme ve OkumaMap Tipi Nedir?Map Bildirimi ve Map'lere ErişimTablolar Üzerinde YinelemeKarma Biçimli TablolarÇok Boyutlu Tipli Dizilertable.unpack ve VarargsÖzet: Diziler ve Map'ler