0Pricing
Ruby Academy · Leçon

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

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

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

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

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

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

Vé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.ancestors

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

Mise en pratique

Les mélanges permettent de partager les comportements avec souplesse :

  • include pour les méthodes d’instance.
  • extend pour 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.hi

Vé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 included se 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.

Toutes les leçons de ce cours

  1. Définir des modules
  2. include et extend
  3. Comparable et Enumerable
  4. prepend et résolution des méthodes
← Retour à Ruby Academy