0Pricing
Ruby Academy · Lezione

include e extend

Includere comportamenti

include e extend è una lezione Ruby Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Ruby Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ruby Academy include 4 lezioni in totale.

Condividere il comportamento tramite mixin

Il vero potere dei moduli è il mixin: condividere metodi tra classi senza usare l'ereditarietà. I due strumenti principali sono include e 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 aggiunge metodi di istanza

include inserisce i metodi di un modulo come metodi di istanza. Ogni oggetto della classe li acquisisce.

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

Riutilizzare tra classi

Lo stesso modulo può essere incluso da molte classi non correlate, condividendo il comportamento senza un genitore comune.

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 aggiunge metodi di classe

extend inserisce i metodi di un modulo come metodi di classe (metodi direttamente sull'oggetto classe).

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

extend su un oggetto

È possibile usare extend su un singolo oggetto, in modo che solo quello acquisisca i metodi, lasciando invariati gli altri.

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

include e extend

Ricordi la distinzione:

  • include => i metodi diventano metodi di istanza.
  • extend => i metodi diventano metodi di classe/oggetto.
module Helper
  def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.help

I moduli vedono i metodi dell'oggetto ospitante

Un metodo incluso viene eseguito nel contesto dell'oggetto ospitante, quindi può chiamare i metodi dell'oggetto e accedere ai suoi dati.

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

L'hook included

Definisca self.included(base) per eseguire automaticamente del codice quando un modulo viene incluso. Un modello classico aggiunge contemporaneamente i metodi di classe.

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

Verificare l'appartenenza

is_a? e ancestors mostrano che un modulo incluso diventa parte della catena dei tipi dell'oggetto.

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

Combinare più mixin

Una classe può includere più moduli, componendo il comportamento a partire da molti elementi piccoli e mirati.

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

Mettere tutto insieme

I mixin condividono il comportamento in modo flessibile:

  • include per i metodi di istanza.
  • extend per i metodi di classe o di un singolo oggetto.
  • I metodi inclusi vengono eseguiti nel contesto dell'oggetto ospitante.
  • È possibile comporre molti moduli piccoli.
module Greet
  def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hi

Verifica rapida

Verifichi la comprensione di include e extend.

Riepilogo

Ha imparato a usare i mixin:

  • include => metodi di istanza.
  • extend => metodi di classe o di un singolo oggetto.
  • I metodi inclusi vengono eseguiti nel contesto dell'oggetto ospitante.
  • L'hook included viene eseguito durante l'inclusione.
module Loud
  def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")

Domande Frequenti

La lezione «include e extend» è gratuita?

Sì — il testo completo di «include e extend» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Ruby Academy, passa a CoddyKit PRO. Il corso Ruby Academy include 4 lezioni in totale.

Cosa imparerò in «include e extend»?

Includere comportamenti Eserciti Ruby Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Ruby Academy?

Non è richiesta alcuna esperienza precedente. Ruby Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «include e extend»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Ruby Academy?

Sì. Ogni lezione Ruby Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Definire moduli
  2. include e extend
  3. Comparable ed Enumerable
  4. prepend e risoluzione dei metodi
← Torna a Ruby Academy