include et extend
Ajoutez un comportement par composition
include et extend est une leçon Ruby Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ruby Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ruby Academy comprend 4 leçons au total.
Mélanger des comportements
Le véritable pouvoir des modules réside dans le mélange : partager des méthodes entre des classes sans héritage. Les deux principaux outils sont include et 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 ajoute des méthodes d’instance
include ajoute les méthodes d’un module comme méthodes d’instance. Chaque objet de la classe les obtient.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")Réutiliser entre plusieurs classes
Un module peut être inclus par de nombreuses classes sans lien entre elles, ce qui permet de partager un comportement sans parent commun.
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 ajoute des méthodes de classe
extend ajoute les méthodes d’un module comme méthodes de classe (des méthodes de l’objet représentant la classe elle-même).
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)extend sur un objet
Vous pouvez appliquer extend à un seul objet afin que lui seul obtienne les méthodes, sans modifier les autres.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude ou extend
Retenez la distinction :
include=> les méthodes deviennent des méthodes d’instance.extend=> les méthodes deviennent des méthodes de classe ou d’objet.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpLes modules voient les méthodes de l’hôte
Une méthode mélangée s’exécute dans le contexte de l’objet hôte ; elle peut donc appeler les propres méthodes de l’hôte et accéder à ses données.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeLe crochet d’inclusion
Définissez self.included(base) pour exécuter automatiquement du code lorsqu’un module est inclus. Un schéma classique consiste à ajouter simultanément des méthodes de classe.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endVérifier l’appartenance
is_a? et ancestors révèlent qu’un module inclus devient une partie de la chaîne de types de l’objet.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsCombiner plusieurs mélanges
Une classe peut inclure plusieurs modules et composer un comportement à partir de nombreux petits éléments ciblés.
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.runMise en pratique
Les mélanges permettent de partager les comportements avec souplesse :
includepour les méthodes d’instance.extendpour les méthodes de classe ou d’un objet unique.- Les méthodes mélangées s’exécutent dans le contexte de l’hôte.
- Composez de nombreux petits modules.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiVérification rapide
Vérifiez votre compréhension de include et extend.
Récapitulatif
Vous avez appris les mélanges :
include=> méthodes d’instance.extend=> méthodes de classe ou d’un objet unique.- Les méthodes mélangées s’exécutent dans le contexte de l’hôte.
- Le crochet
includedse déclenche lors de l’inclusion.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")Questions Fréquemment Posées
La leçon « include et extend » est-elle gratuite ?
Oui — le texte complet de « include et extend » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ruby Academy, passe à CoddyKit PRO. Le cours Ruby Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « include et extend » ?
Ajoutez un comportement par composition Tu pratiques Ruby Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Ruby Academy ?
Aucune expérience préalable n'est requise. Ruby Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « include et extend » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Ruby Academy ?
Oui. Chaque leçon Ruby Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.