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").walkinclude 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.stampextend 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.privilegesinclude 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.helpLos 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.describeEl 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
endComprobar 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.ancestorsCombinar 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.runCómo encaja todo
Los mixins comparten comportamiento de forma flexible:
includepara métodos de instancia.extendpara 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.hiComprobació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
includedse 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.