Kavramlar - Tablolar ve Diziler
Tablolar Nedir?
Tablolar, bir kap gibi, içlerinde birden fazla değer saklamanıza olanak tanıyan değişkenlerdir. Tablolar, tıpkı bir sözlüğün tanımları (değerler) belirli kelimelerle (anahtarlar) eşleştirmesi gibi, değerleri belirli anahtarlarla eşleştirme yeteneği sağlar.
Sözlük örneğini takip edersek, herhangi bir sözlükteki herhangi bir kelimeye bakıp karşılığında tanımını alabilirsiniz, aynı şekilde bir tablodaki bir anahtara bakıp o anahtarın içinde veya üzerinde saklanan değeri alabilirsiniz.
Sıralı tablolar, diziler, listeler
Sıralı tablo, anahtarların 1'den başlayan, sürekli artan ve boşluk içermeyen sayılar olduğu bir tablodur. Bu, diğer programlama dillerinde "Dizi" (Array) veya "Liste" (List) olarak bilinir. Lua'da böyle bir ayrım yoktur.
Anahtarlar (Keys)
Anahtarlar, değerler için tanımlayıcılardır ve herhangi bir girdinin "indeksi" (index) olarak bilinirler. Bir tablodaki girdilere "anahtar/değer çiftleri" (key/value pairs) de denilebilir.
Anahtarlar birden çok şekilde kullanılabilir. Anahtarlar sayısal olabilir ve/veya bir şeylerin sırasını temsil edebilir, yani:
Anahtarlar ayrıca şu şekilde dizeler (string) de olabilir:
Bir şeylerin sırasını temsil etmek için kullanıldığında anahtarlar, bir tablonun diğer dillerdeki list veya hatta array nesneleri gibi daha çok işlev görmesini sağlar - anahtarlar sayısal ve sıralıdır (düzenlidir). Anahtar olarak dizeler (veya diğer türler) kullanıldığında, tablolar daha çok bir dictionary (sözlük) veya hash map nesnesi gibi kullanılabilir. Tüm bunların en iyi yanı, Lua'daki tabloların bu tür 'modların' her ikisini de aynı anda kullanabilmesidir!
Ancak, anahtar olarak yalnızca sayılar veya dizeler kullanılamaz - nil hariç her tür değişken olabilirler. Yine de çoğu zaman, genellikle sayı veya dize olarak tanımlanırlar.
Bir tablodaki her anahtar için yalnızca bir değer olabilir - anahtarlar benzersiz olmalıdır. Belirli bir anahtarda birden fazla değer saklamanın tek yolu, değer olarak yeni bir tablo kullanmaktır. Bu teknik olarak hala yalnızca bir değerdir - tablo tek bir değer olarak sayılır, ancak içinde başka şeyler saklanabilir. Bu tablo-içinde-tablo senaryosuna "iç içe geçmiş" (nested) tablo denir.
Değerler (Values)
Değerler herhangi bir veri türü olabilir - hatta diğer tablolar bile!
Tablo oluşturma örneği
Bir tablo üzerinde döngü kurma
Bir tablodaki tüm anahtar/değer çiftleri üzerinde döngü kurmanın birkaç yolu vardır. Kullanacağınız yöntem, anahtarların nasıl düzenlendiğine bağlı olacaktır.
Eğer Lua, son örnekteki gibi sayısal "sıra" anahtarlarınızı otomatik olarak doldurduysa, tabloyu döngüye almak için bir for döngüsü kullanabilirsiniz.
Eğer sayısal anahtarlarla tanımlanmamış herhangi bir anahtar varsa, yani dize anahtarları gibi, veya sayısal anahtar(lar)ı "sırasız" veya boşluklu tanımladıysanız, tüm tablo üzerinde döngü kurmak için pairs kullanmanız gerekecektir.
pairs, sayısal/sıra anahtarları VE dize (veya diğer tür) anahtarları da dahil olmak üzere tablodaki tüm değerler üzerinde döngü kurar; diğer dillerde bu, bir for each döngüsü gibidir.
ipairs
pairs'in, ipairs adında, pairs'in yaptığı şeyin aynısını (bir tablodaki tüm anahtar/değer çiftleri üzerinde döngü kurar) yapan, ancak yalnızca sıralı tablolar için olan yerleşik bir kardeş fonksiyonu vardır.
RandomPairs
RandomPairs, bir tablo üzerinde döngü kuran, ancak bunu rastgele bir sırada yapan Garry's Mod'a özgü bir fonksiyondur.
SortedPairs
SortedPairs, bir tablodaki tüm anahtar/değer çiftleri üzerinde döngü kurmanıza izin veren, ancak anahtarları alfabetik olarak sıralayan başka bir Garry's Mod'a özgü fonksiyondur. Bu, en çok dize anahtarları olan tablolar için kullanışlıdır.
Benzer şekilde SortedPairsByValue bir tablo üzerinde döngü kurmak için kullanılabilir, ancak anahtar yerine değere göre sıralanır.
table kütüphanesinin kullanımı
table kütüphanesi, tabloları yönetmek için fonksiyonlar sağlayan standart bir Lua kütüphanesidir. Garry's Mod'da bu kütüphaneye eklenmiş birkaç ekstra kullanışlı fonksiyon vardır. Bunlar, table kütüphanesinde tanımlanan fonksiyonlara bazı örneklerdir.
table.Merge
table.Add
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord