include en extend
Gedrag inmengen
include en extend is een gratis Ruby Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Ruby Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Ruby Academy bevat in totaal 4 lessen.
Gedrag mengen
De echte kracht van modules is de mixin: methoden delen tussen klassen zonder overerving. De twee belangrijkste hulpmiddelen zijn include en 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 voegt instantmethoden toe
include neemt de methoden van een module op als instantmethoden. Elk object van de klasse krijgt ze erbij.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")Hergebruik tussen klassen
Eén module kan worden opgenomen door veel los van elkaar staande klassen, zodat ze gedrag delen zonder een gemeenschappelijke ouder.
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 voegt klassenmethoden toe
extend neemt de methoden van een module op als klassenmethoden (methoden op het klasseobject zelf).
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)extend op een object
Je kunt één object extend geven, zodat alleen dat object de methoden krijgt en andere objecten onveranderd blijven.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude versus extend
Onthoud het verschil:
include=> methoden worden instantiemethoden.extend=> methoden worden methoden van de klasse of het object.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpModules zien methoden van de host
Een opgenomen methode wordt uitgevoerd in de context van het hostobject. Daardoor kan de methode de eigen methoden van de host aanroepen en de gegevens ervan benaderen.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeDe included-hook
Definieer self.included(base) om automatisch code uit te voeren wanneer een module wordt opgenomen. Een klassiek patroon voegt op hetzelfde moment klassenmethoden toe.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endLidmaatschap controleren
is_a? en ancestors laten zien dat een opgenomen module onderdeel wordt van de typeketen van het object.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsMeerdere mixins combineren
Een klasse kan meerdere modules opnemen en zo gedrag samenstellen uit veel kleine, doelgerichte onderdelen.
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.runAlles samenbrengen
Mixins delen gedrag op een flexibele manier:
includevoor instantmethoden.extendvoor methoden van een klasse of één object.- Gemengde methoden worden uitgevoerd in de context van de host.
- Stel veel kleine modules samen.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiSnelle controle
Controleer of je include en extend begrijpt.
Samenvatting
Je hebt mixins geleerd:
include=> instantmethoden.extend=> methoden van een klasse of één object.- Gemengde methoden worden uitgevoerd in de context van de host.
- De
included-hook wordt uitgevoerd wanneer een module wordt opgenomen.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")Leer Ruby met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 29
- Lessen
- 109
Veelgestelde vragen
Is de les “include en extend” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Ruby Academy, waaronder “include en extend”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Ruby Academy bevat in totaal 4 lessen.
Wat leer ik in “include en extend”?
Gedrag inmengen Je oefent met Ruby Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Ruby Academy te beginnen?
Ervaring vooraf is niet nodig. Ruby Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “include en extend”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Ruby Academy?
Ja. Elke les over Ruby Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.