include ja extend
Sekoita toiminnallisuutta mukaan.
include ja extend on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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 Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Toiminnallisuuden jakaminen mixineillä
Moduulien todellinen voima on mixin: metodien jakaminen luokkien kesken ilman perintää. Kaksi tärkeintä työkalua ovat include ja extend.
module Walkable
def walk
"#{name} is walking"
end
end
class Person
include Walkable
attr_reader :name
def initialize(name)
@name = name
end
end
puts Person.new("Ada").walkinclude lisää instanssimetodeja
include lisää moduulin metodit instanssimetodeiksi. Luokan jokainen olio saa nämä metodit käyttöönsä.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")Uudelleenkäyttö luokkien välillä
Yksi moduuli voidaan sisällyttää moniin toisistaan riippumattomiin luokkiin, jolloin toiminnallisuus voidaan jakaa ilman yhteistä yliluokkaa.
module Timestamped
def stamp
"created"
end
end
class Post; include Timestamped; end
class Comment; include Timestamped; end
puts Post.new.stamp
puts Comment.new.stampextend lisää luokkametodeja
extend lisää moduulin metodit luokkametodeiksi eli itse luokkaoliolle määritetyiksi metodeiksi.
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)extend olioon
Voitte käyttää extend-syntaksia yksittäiseen olioon, jolloin vain se saa metodit muiden olioiden pysyessä ennallaan.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude vai extend
Muistakaa ero:
include=> metodeista tulee instanssimetodeja.extend=> metodeista tulee luokka- tai oliometodeja.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpModuulit näkevät isäntäolion metodit
Mixinillä lisätty metodi suoritetaan isäntäolion kontekstissa, joten se voi kutsua isäntäolion omia metodeja ja käyttää sen tietoja.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeincluded-koukku
Määritelkää self.included(base), jotta koodia suoritetaan automaattisesti, kun moduuli sisällytetään. Klassinen käyttötapa on lisätä samalla luokkametodeja.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endJäsenyyden tarkistaminen
is_a? ja ancestors osoittavat, että sisällytetystä moduulista tulee osa olion tyyppiketjua.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsUseiden mixinien yhdistäminen
Luokka voi sisällyttää useita moduuleja ja koota toiminnallisuuden monista pienistä, tarkoitukseen keskittyvistä osista.
module Swimmable; def swim; "swimming"; end; end
module Runnable; def run; "running"; end; end
class Athlete
include Swimmable
include Runnable
end
a = Athlete.new
puts a.swim
puts a.runKootaan yhteen
Mixinit jakavat toiminnallisuutta joustavasti:
includeinstanssimetodeille.extendluokka- tai yksittäisen olion metodeille.- Mixinillä lisätyt metodit suoritetaan isäntäolion kontekstissa.
- Yhdistelkää useita pieniä moduuleja.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiPikatesti
Testatkaa, miten hyvin ymmärrätte include- ja extend-käskyjen toiminnan.
Kertaus
Opitte mixineistä:
include=> instanssimetodit.extend=> luokka- tai yksittäisen olion metodit.- Mixinillä lisätyt metodit suoritetaan isäntäolion kontekstissa.
included-koukku suoritetaan moduulia sisällytettäessä.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")Opi Ruby 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
- 29
- Oppitunnit
- 109
Usein kysytyt kysymykset
Onko oppitunti ”include ja extend” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “include ja extend”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”include ja extend”?
Sekoita toiminnallisuutta mukaan. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”include ja extend”-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ä Ruby Academy-oppitunnilla?
Kyllä. Jokainen Ruby 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.