0Pricing
Lua Academy · Ders

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
end

instanceof 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))  -- Dog

Tü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
end

Sı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
end

Tü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
end

Tü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

  1. Temel Sınıf ve Oluşturucu Tasarımı
  2. Çok Düzeyli Kalıtım
  3. Karışım Birleştirme ve Arayüz Denetimleri
  4. instanceof ve Tür İçgözlemi
← Lua Academy Sayfasına Dön