0Pricing
Ruby Academy · Lektion

include und extend

Verhalten einmischen

include und extend ist eine kostenlose Ruby Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ruby Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Verhalten per Mixin teilen

Die eigentliche Stärke von Modulen ist das Mixin: Sie teilen Methoden über mehrere Klassen hinweg, ohne Vererbung zu verwenden. Die beiden wichtigsten Werkzeuge sind include und 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 fügt Instanzmethoden hinzu

include mischt die Methoden eines Moduls als Instanzmethoden ein. Jedes Objekt der Klasse erhält diese Methoden.

module Sayable
  def say(msg)
    "#{msg}!"
  end
end
class Dog
  include Sayable
end
puts Dog.new.say("Woof")

Über Klassen hinweg wiederverwenden

Ein Modul kann von vielen voneinander unabhängigen Klassen eingebunden werden und so Verhalten ohne gemeinsamen Elternteil teilen.

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 fügt Klassenmethoden hinzu

extend mischt die Methoden eines Moduls als Klassenmethoden ein, also als Methoden des Klassenobjekts selbst.

module Findable
  def find(id)
    "Finding record #{id}"
  end
end
class User
  extend Findable
end
puts User.find(42)

extend für ein Objekt

Sie können ein einzelnes Objekt mit extend erweitern, sodass nur dieses Objekt die Methoden erhält und alle anderen unverändert bleiben.

module Admin
  def privileges
    "all access"
  end
end
user = Object.new
user.extend(Admin)
puts user.privileges

include vs extend

Behalten Sie den Unterschied im Gedächtnis:

  • include => Die Methoden werden zu Instanzmethoden.
  • extend => Die Methoden werden zu Klassen-/Objektmethoden.
module Helper
  def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.help

Module sehen Methoden des Host-Objekts

Eine eingemischte Methode wird im Kontext des Host-Objekts ausgeführt. Daher kann sie dessen eigene Methoden aufrufen und auf seine Daten zugreifen.

module Describable
  def describe
    "I am #{role}"
  end
end
class Worker
  include Describable
  def role; "a worker"; end
end
puts Worker.new.describe

Der included-Hook

Definieren Sie self.included(base), damit beim Einbinden eines Moduls automatisch Code ausgeführt wird. Ein klassisches Muster fügt dabei gleichzeitig Klassenmethoden hinzu.

module Trackable
  def self.included(base)
    puts "Trackable added to #{base}"
  end
end
class Order
  include Trackable
end

Zugehörigkeit prüfen

is_a? und ancestors zeigen, dass ein eingebundenes Modul Teil der Typenkette des Objekts wird.

module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestors

Mehrere Mixins kombinieren

Eine Klasse kann mehrere Module einbinden und so Verhalten aus vielen kleinen, spezialisierten Bausteinen zusammensetzen.

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 zusammenführen

Mixins teilen Verhalten flexibel:

  • include für Instanzmethoden.
  • extend für Klassen- oder Einzelobjektmethoden.
  • Eingemischte Methoden werden im Kontext des Host-Objekts ausgeführt.
  • Setzen Sie viele kleine Module zusammen.
module Greet
  def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hi

Kurzer Test

Testen Sie Ihr Verständnis von include und extend.

Zusammenfassung

Sie haben Mixins kennengelernt:

  • include => Instanzmethoden.
  • extend => Klassen- oder Einzelobjektmethoden.
  • Eingemischte Methoden werden im Kontext des Host-Objekts ausgeführt.
  • Der included-Hook wird beim Einbinden ausgelöst.
module Loud
  def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")

Häufig gestellte Fragen

Ist die Lektion „include und extend“ kostenlos?

Ja — der vollständige Text von „include und extend“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ruby Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „include und extend“?

Verhalten einmischen Du übst Ruby Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ruby Academy zu starten?

Keine Vorkenntnisse erforderlich. Ruby Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „include und extend“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ruby Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ruby Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Module definieren
  2. include und extend
  3. Comparable und Enumerable
  4. prepend und Methodenauflösung
← Zurück zu Ruby Academy