instanceof ve Tür İçgözlemi
Sınıf hiyerarşisinde ilerleyerek instanceof() denetimleri uygulayın.
instanceof ve Tür İçgözlemi, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. 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.
instanceof Nedir?
instanceof(obj, Class), bir nesnenin belirli bir sınıfın veya atalarından herhangi birinin örneği olup olmadığını denetler. OOP sistemlerinde Lua'nın ham type() işlevinin yerini alır.
Basit instanceof
Hedef sınıfı bulana kadar örnekten yukarı doğru metatablo zincirini izleyiniz.
local function instanceof(obj, cls)
if type(obj) ~= "table" then return false end
local mt = getmetatable(obj)
while mt do
if mt == cls then return true end
local parent = getmetatable(mt)
mt = parent and parent.__index
end
return false
endinstanceof Sınaması
Kalıtım zincirlerinde doğru çalışır.
local cat = Animal:new("Cat","Meow")
local rex = Dog:new("Rex")
print(instanceof(rex, Dog)) -- true
print(instanceof(rex, Animal)) -- true
print(instanceof(cat, Dog)) -- false__type Alanı Kuralı
Hızlı çalışma zamanı türü denetimleri için her sınıfta dize biçiminde bir tür adı saklayınız.
Animal.__type = "Animal"
Dog.__type = "Dog"
local function typeOf(obj)
local mt = getmetatable(obj)
return mt and mt.__type or type(obj)
end
print(typeOf(rex)) -- DogTür Koruma İşlevleri
API sınırlarında daha temiz doğrulama yapmak için tür koruma işlevleri oluşturunuz.
local function assertType(obj, cls, argName)
if not instanceof(obj, cls) then
error(("Expected %s for %s, got %s"):format(
cls.__name, argName, typeOf(obj)), 2)
end
endSınıf Algılama için getmetatable
getmetatable(obj), sınıf tablosunu döndürür. Kalıtımı dikkate almadan tam türü sınamak için bunu bilinen bir sınıfla karşılaştırınız.
local function exactType(obj)
return getmetatable(obj)
end
print(exactType(rex) == Dog) -- true
print(exactType(rex) == Animal) -- false (not exact)Sınıf Hiyerarşisini İnceleme
Bir nesnenin kalıtım yoluyla bağlı olduğu tüm sınıfları listelemek için metatablo zincirini izleyiniz.
local function classChain(obj)
local chain = {}
local mt = getmetatable(obj)
while mt do
chain[#chain+1] = mt.__name or "?"
local parent = getmetatable(mt)
mt = parent and parent.__index
end
return chain
endTür Sistemlerini Karşılaştırma
Lua'nın yerleşik type() işlevi yalnızca 8 temel tür döndürür. OOP sistemlerinde sınıf hiyerarşisini anlayan instanceof veya özel typeOf işlevlerini kullanınız.
Mühürlü Sınıflar
:extend() yöntemini bir sınıftan kaldırarak veya __index içine bir denetim ekleyerek alt sınıf oluşturmayı önleyiniz.
Türe Dayalı Yönlendirme
İşlev çağrılarını çalışma zamanı türüne göre yönlendiriniz; bu, yöntem aşırı yüklemesine hafif bir alternatiftir.
local function process(animal)
if instanceof(animal, Dog) then
print("Processing Dog:", animal.name)
elseif instanceof(animal, Animal) then
print("Processing Animal:", animal.name)
end
endTür Bilgileriyle Hata Ayıklama
Anlamlı hata ayıklama çıktısı sağlamak için tür adını içeren __tostring işlevini sınıflara ekleyiniz.
instanceof Sorusu
Rex, Animal sınıfını genişleten bir Dog ise instanceof(rex, Animal) ne döndürür?
Özet: instanceof ve Tür İncelemesi
instanceof, kalıtımı dikkate alan tür denetimi için metatablo zincirini izler. Hızlı dize türü araması için __type alanlarını kullanınız. API sınırlarındaki tür koruyucuları, tür hatalarını açık iletilerle erkenden yakalar.
Sıkça Sorulan Sorular
“instanceof ve Tür İçgözlemi” dersi ücretsiz mi?
Evet — “instanceof ve Tür İçgözlemi” 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.
“instanceof ve Tür İçgözlemi” dersinde ne öğreneceğim?
Sınıf hiyerarşisinde ilerleyerek instanceof() denetimleri uygulayı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 4. dersidir.
“instanceof ve Tür İçgözlemi” 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
- Temel Sınıf ve Oluşturucu Tasarımı
- Çok Düzeyli Kalıtım
- Karışım Birleştirme ve Arayüz Denetimleri
- instanceof ve Tür İçgözlemi