0Pricing
Lua Academy · درس

‏instanceof واستبطان النوع

نفّذ عمليات تحقق instanceof() عبر اجتياز تسلسل الفئات

‏instanceof واستبطان النوع درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

ما هو instanceof؟

يتحقّق instanceof(obj, Class) مما إذا كان الكائن مثيلًا لفئة محددة أو لأي من أسلافها. وهو يحل محل type() الخام في أنظمة البرمجة كائنية التوجه في Lua.

instanceof البسيط

تجوّل في سلسلة جداول التعريف من المثيل صعودًا، وابحث عن الفئة المستهدفة.

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

يعمل بشكل صحيح عبر سلاسل الوراثة.

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

خزّن اسم النوع كسلسلة نصية في كل فئة لإجراء فحوصات سريعة للنوع أثناء التشغيل.

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

حواجز النوع

أنشئ دوالًا لحواجز النوع لإجراء تأكيدات أوضح عند حدود واجهات برمجة التطبيقات.

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

استخدام getmetatable لاكتشاف الفئة

تعيد getmetatable(obj) جدول الفئة. قارن الناتج بفئة معروفة لاختبار النوع المطابق تمامًا (من دون مراعاة الوراثة).

local function exactType(obj)
  return getmetatable(obj)
end
print(exactType(rex) == Dog)  -- true
print(exactType(rex) == Animal)  -- false (not exact)

استبطان تسلسل الفئات

تجوّل في سلسلة جداول التعريف لسرد جميع الفئات التي يرث منها الكائن.

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

مقارنة أنظمة الأنواع

تعيد type() المضمّنة في Lua الأنواع الأساسية الثمانية فقط. في أنظمة البرمجة كائنية التوجه، استخدم instanceof أو دوال typeOf مخصّصة تفهم تسلسل الفئات.

الفئات المغلقة أمام التوريث

امنع إنشاء الفئات الفرعية بإزالة الأسلوب :extend() من الفئة أو بإضافة فحص في __index.

التوجيه حسب النوع

وجّه استدعاءات الدوال بناءً على النوع أثناء التشغيل، وهو بديل خفيف لتحميل الأساليب الزائد.

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

تصحيح الأخطاء باستخدام معلومات النوع

أضف __tostring إلى الفئات بحيث يتضمن اسم النوع للحصول على مخرجات مفيدة عند تصحيح الأخطاء.

سؤال حول instanceof

ماذا تُرجع instanceof(rex, Animal) إذا كان Rex من نوع Dog (الذي يمتد من Animal)؟

مراجعة: instanceof واستبطان النوع

يتجوّل instanceof في سلسلة جداول التعريف لإجراء فحص للنوع يراعي الوراثة. استخدم حقول __type للبحث السريع عن النوع كسلسلة نصية. وتكتشف حواجز النوع عند حدود واجهات برمجة التطبيقات أخطاء الأنواع مبكرًا مع رسائل واضحة.

الأسئلة الشائعة

هل درس «‏instanceof واستبطان النوع» مجاني؟

نعم — نص درس «‏instanceof واستبطان النوع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏instanceof واستبطان النوع»؟

نفّذ عمليات تحقق instanceof() عبر اجتياز تسلسل الفئات تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «‏instanceof واستبطان النوع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تصميم الفئة الأساسية والمنشئ
  2. الوراثة متعددة المستويات
  3. تركيب Mixin والتحقق من الواجهات
  4. ‏instanceof واستبطان النوع
← العودة إلى Lua Academy