Ruby Academy · Les

include en extend

Gedrag inmengen

Les 2 van 413 stappen

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").walk

include 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.stamp

extend 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.privileges

include 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.help

Modules 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.describe

De 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
end

Lidmaatschap 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.ancestors

Meerdere 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.run

Alles samenbrengen

Mixins delen gedrag op een flexibele manier:

  • include voor instantmethoden.
  • extend voor 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.hi

Snelle 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")
Gratis beginnen

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.

Alle lessen in deze cursus

  1. Modules definiëren
  2. include en extend
  3. Comparable en Enumerable
  4. prepend en methoderesolutie
← Terug naar Ruby Academy