Lua Academy · Pelajaran

instanceof dan Introspeksi Tipe

Implementasikan pemeriksaan instanceof() dengan menelusuri hierarki class.

Pelajaran 4 dari 413 langkah

instanceof dan Introspeksi Tipe adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Apa Itu instanceof?

instanceof(obj, Class) memeriksa apakah objek merupakan instans kelas tertentu atau salah satu leluhurnya. Ini menggantikan type() mentah milik Lua untuk sistem OOP.

instanceof Sederhana

Telusuri rantai metatabel dari instans ke atas untuk mencari kelas target.

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

Menguji instanceof

Berfungsi dengan benar di seluruh rantai pewarisan.

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

Konvensi Bidang __type

Simpan nama tipe berupa string di setiap kelas untuk pemeriksaan tipe saat runtime yang cepat.

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

Penjaga Tipe

Buat fungsi penjaga tipe untuk melakukan penegasan yang lebih rapi di batas API.

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 untuk Deteksi Kelas

getmetatable(obj) mengembalikan tabel kelas. Bandingkan dengan kelas yang diketahui untuk menguji tipe yang tepat (tidak memperhitungkan pewarisan).

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

Introspeksi Hierarki Kelas

Telusuri rantai metatabel untuk mencantumkan semua kelas yang menjadi leluhur pewarisan objek.

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

Membandingkan Sistem Tipe

type() bawaan Lua hanya mengembalikan 8 tipe dasar. Untuk sistem OOP, gunakan instanceof atau fungsi typeOf khusus yang memahami hierarki kelas.

Kelas Tertutup

Cegah pembuatan subkelas dengan menghapus metode :extend() dari sebuah kelas atau menambahkan pemeriksaan dalam __index.

Pengiriman Berbasis Tipe

Kirim panggilan fungsi berdasarkan tipe saat runtime — alternatif ringan untuk pembebanan metode.

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

Penelusuran Kesalahan dengan Informasi Tipe

Tambahkan __tostring ke kelas, yang menyertakan nama tipe agar keluaran penelusuran kesalahan bermakna.

Pertanyaan tentang instanceof

Apa yang dikembalikan instanceof(rex, Animal) jika Rex adalah Dog (yang mewarisi Animal)?

Ringkasan: instanceof dan Introspeksi Tipe

instanceof menelusuri rantai metatabel untuk pemeriksaan tipe yang memperhitungkan pewarisan. Gunakan bidang __type untuk pencarian tipe berbasis string yang cepat. Penjaga tipe di batas API menemukan kesalahan tipe sejak awal dengan pesan yang jelas.

Gratis untuk memulai

Belajar Lua dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
40
Pelajaran
159

Pertanyaan yang Sering Diajukan

Apakah pelajaran “instanceof dan Introspeksi Tipe” gratis?

Ya — teks lengkap “instanceof dan Introspeksi Tipe” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “instanceof dan Introspeksi Tipe”?

Implementasikan pemeriksaan instanceof() dengan menelusuri hierarki class. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “instanceof dan Introspeksi Tipe” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Class Dasar dan Desain Konstruktor
  2. Pewarisan Multi-Tingkat
  3. Komposisi Mixin dan Pemeriksaan Interface
  4. instanceof dan Introspeksi Tipe
← Kembali ke Lua Academy