Kantaluokan ja rakentajan suunnittelu
Suunnitelkaa Class()-tehdas, joka määrittää metataulukot ja new()-rakentajat.
Kantaluokan ja rakentajan suunnittelu on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Tavoite: uudelleenkäytettävä luokkatehdas
Haluamme Class()-funktion, joka palauttaa uuden luokkaobjektin asianmukaisella konstruktorilla, metodien haulla ja olio-ohjelmoinnin semantiikalla.
Luokkatehtaan runko
Tehdas luo luokkataulukon, jossa on metodien välitykseen käytettävä metataulukko.
local function Class()
local cls = {}
cls.__index = cls
cls.__name = "AnonymousClass"
function cls:new(...)
local instance = setmetatable({}, cls)
if instance.init then instance:init(...) end
return instance
end
return cls
endLuokan määrittäminen
Luokaa luokka, määrittäkää init (konstruktori) ja lisätkää metodit.
local Animal = Class()
Animal.__name = "Animal"
function Animal:init(name, sound)
self.name = name
self.sound = sound
end
function Animal:speak()
print(self.name .. " says " .. self.sound)
end
local cat = Animal:new("Cat", "Meow")
cat:speak() -- Cat says MeowKonstruktorimalli
Konstruktori :new(...) luo instanssin kutsulla setmetatable({}, cls) ja kutsuu sen jälkeen alustusta varten :init(...)-metodia. Näin varaaminen ja alustaminen erotetaan toisistaan.
Luokan nimi virheenkorjausta varten
Tallentakaa cls.__name ja määrittäkää __tostring, jotta instanssit tulostuvat havainnollisesti.
function Animal:__tostring()
return "<" .. Animal.__name .. ": " .. self.name .. ">"
end
print(tostring(cat)) -- <Animal: Cat>Oletusarvot init-metodissa
Antakaa init-metodissa oletusarvot käyttämällä or-operaattoria.
function Vehicle:init(opts)
self.speed = opts.speed or 0
self.fuel = opts.fuel or 100
self.engine = opts.engine or "petrol"
endLuokkametodit ja instanssimetodit
function cls.method()-määrittelyllä luodut metodit ovat luokkametodeja (niissä ei ole self-parametria). function cls:method()-määrittelyllä luodut metodit saavat instanssin self-parametrina.
Staattiset ominaisuudet
Suoraan luokkataulukkoon asetetut ominaisuudet ovat kaikkien instanssien yhteisiä, elleivät instanssikentät peitä niitä.
Animal.count = 0
function Animal:init(name, sound)
Animal.count = Animal.count + 1
self.name = name; self.sound = sound
end
print(Animal.count) -- 0
Animal:new("Dog","Woof")
print(Animal.count) -- 1Kopioiva konstruktori
:clone()-metodi luo instanssista kopion kopioimalla sen kentät pinnallisesti.
function Animal:clone()
local copy = setmetatable({}, getmetatable(self))
for k, v in pairs(self) do copy[k] = v end
return copy
endYhtäläisyysmetametodi
Määrittäkää __eq, jotta instanssien yhtäläisyysvertailut ovat mielekkäitä.
Animal.__eq = function(a, b)
return a.name == b.name
endMiksi ei rawget?
Käyttäkää self.field-viittausta (ei rawget-funktiota), jotta metaluokkien metametodiin perustuva kenttien käyttö säilyy mahdollisena. Käyttäkää rawget-funktiota vain, kun ohittaminen on nimenomaisesti tarpeen.
Konstruktorin suunnittelua koskeva kysymys
Miksi init kutsutaan erikseen new-varaajasta?
Kertaus: Perusluokka ja konstruktori
Class()-tehdas luo taulukon luokaksi, asettaa metodihakua varten __index = cls-määrityksen ja tarjoaa :new()- sekä :init()-metodit. Tämä muodostaa kaikkien Lua-olio-ohjelmointimallien perustan.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Kantaluokan ja rakentajan suunnittelu” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Kantaluokan ja rakentajan suunnittelu”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Kantaluokan ja rakentajan suunnittelu”?
Suunnitelkaa Class()-tehdas, joka määrittää metataulukot ja new()-rakentajat. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Kantaluokan ja rakentajan suunnittelu”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Kantaluokan ja rakentajan suunnittelu
- Monitasoinen perintä
- Mixin-koostaminen ja rajapintojen tarkistus
- instanceof ja tyyppien introspektio