extender en Ruby

MD Aminul Islam 21 junio 2023
  1. ¿Qué es incluir en Ruby?
  2. ¿Qué es extender en Ruby?
  3. Usar incluir y extender en Ruby
extender en Ruby

Hacer referencia de clase a clase y de función a función es una tarea común en la Programación Orientada a Objetos. Si está buscando una forma de importar módulos de diferentes clases, este artículo puede ayudarlo.

En Ruby, puede hacer esto de dos maneras diferentes. Mediante el uso de incluir o extender.

En este artículo, hablaremos sobre “incluir” y “extender” en Ruby y veremos un ejemplo relevante para facilitar el tema.

¿Qué es incluir en Ruby?

include te permite importar un módulo de código. Si intenta obtener un método para importar el módulo a través de la clase directamente, recibirá un error ya que se importa como una subclase para la superclase.

La solución aquí es obtenerlo por instancia de la clase. Puede usar incluir usando la palabra clave include.

¿Qué es extender en Ruby?

Otra forma de importar un módulo es usando la palabra clave extender. A través de extender, puede importar un método como método de clase.

Pero si intenta obtener un método de un módulo importado a través de la instancia, obtendrá un error. Debe obtener ese método por la definición de clase para evitar este error.

Usar incluir y extender en Ruby

En nuestro ejemplo a continuación, ilustraremos el uso de las palabras clave incluir y extender en Ruby. Echa un vistazo al siguiente código de ejemplo.

module MyModule
  def MyMethod
    puts 'DelftStack is nice.'
  end
end

class ClassA

  # only can access MyModule methods
  # By the instance.
  include MyModule
end

class ClassB

  # only can access MyModule methods
  # By the class definition.
  extend MyModule
end

# Access from the object
ClassA.new.MyMethod

# Acess from class
ClassB.MyMethod

Se comenta el propósito de cada línea y se analiza el mecanismo de funcionamiento de las palabras clave incluir y extender. Cuando ejecute el código de ejemplo anterior, obtendrá el siguiente resultado.

DelftStack is nice.
DelftStack is nice.

Ahora, si intenta acceder al método directamente desde la clase como se muestra a continuación:

ClassA.MyMethod

Recibirá el siguiente error:

# NoMethodError: undefined  method
# `MyMethod' for ClassA:Class

Esto se debe a que ClassA incluye el módulo usando la palabra clave include e include no le permite llamar a un método directamente desde la clase.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn