0Pricing
Ruby Academy · Lección

include y extend

Incorpore comportamiento

include y extend es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ruby Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ruby Academy incluye 4 lecciones en total.

Incorporar comportamiento

La verdadera potencia de los módulos es el mixin: compartir métodos entre clases sin herencia. Las dos herramientas principales son include y 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 añade métodos de instancia

include incorpora los métodos de un módulo como métodos de instancia. Todos los objetos de la clase los adquieren.

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

Reutilizar entre clases

Un módulo puede incluirse en muchas clases no relacionadas, lo que permite compartir comportamiento sin un antecesor común.

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 añade métodos de clase

extend incorpora los métodos de un módulo como métodos de clase (métodos del propio objeto de clase).

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

extend en un objeto

Puede aplicar extend a un único objeto para que solo él adquiera los métodos y los demás permanezcan sin cambios.

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

include frente a extend

Recuerde la diferencia:

  • include => los métodos se convierten en métodos de instancia.
  • extend => los métodos se convierten en métodos de clase/objeto.
module Helper
  def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.help

Los módulos ven los métodos del anfitrión

Un método incorporado se ejecuta en el contexto del objeto anfitrión, por lo que puede llamar a los métodos propios del anfitrión y acceder a sus datos.

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

El hook included

Defina self.included(base) para ejecutar código automáticamente cuando se incluya un módulo. Un patrón clásico añade métodos de clase al mismo tiempo.

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

Comprobar la pertenencia

is_a? y ancestors muestran que un módulo incluido pasa a formar parte de la cadena de tipos del objeto.

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

Combinar varios mixins

Una clase puede incluir varios módulos y componer comportamiento a partir de muchas piezas pequeñas y específicas.

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

Cómo encaja todo

Los mixins comparten comportamiento de forma flexible:

  • include para métodos de instancia.
  • extend para métodos de clase o de un único objeto.
  • Los métodos incorporados se ejecutan en el contexto del anfitrión.
  • Combine muchos módulos pequeños.
module Greet
  def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hi

Comprobación rápida

Compruebe su comprensión de include y extend.

Repaso

Ha aprendido sobre los mixins:

  • include => métodos de instancia.
  • extend => métodos de clase o de un único objeto.
  • Los métodos incorporados se ejecutan en el contexto del anfitrión.
  • El hook included se ejecuta al incluir el módulo.
module Loud
  def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")

Preguntas frecuentes

¿La lección «include y extend» es gratis?

Sí — el texto completo de «include y extend» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ruby Academy, actualiza a CoddyKit PRO. El curso de Ruby Academy incluye 4 lecciones en total.

¿Qué aprenderé en «include y extend»?

Incorpore comportamiento Practicas Ruby Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Ruby Academy?

No se requiere experiencia previa. Ruby Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «include y extend»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Ruby Academy?

Sí. Cada lección de Ruby Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definición de módulos
  2. include y extend
  3. Comparable y Enumerable
  4. prepend y resolución de métodos
← Volver a Ruby Academy