0Pricing
Ruby Academy · Lección

Definición dinámica de métodos

Aprenda a definir y llamar métodos dinámicamente mediante define_method y method_missing

Definición dinámica de métodos 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.

Creación dinámica de métodos

Definición dinámica de métodos

En Ruby, los métodos se pueden crear dinámicamente durante la ejecución.

Esto permite escribir código más flexible y reutilizable.

Definición dinámica de métodos — ilustración 1

Uso de define_method

Uso de define_method

El método define_method permite definir métodos dinámicamente.

class Person
  define_method(:greet) { puts 'Hello!' }
end

p = Person.new
p.greet

Uso de define_method con parámetros

Uso de define_method con parámetros

Puede pasar argumentos a los métodos creados dinámicamente.

class Person
  define_method(:greet) { |name| puts "Hello, #{name}!" }
end

p = Person.new
p.greet('Alice')

Uso de method_missing

Uso de method_missing

El método method_missing intercepta las llamadas a métodos no definidos.

class Person
  def method_missing(name, *args)
    puts "Method '#{name}' is missing!"
  end
end

p = Person.new
p.unknown_method

Gestión dinámica de method_missing

Gestión dinámica de method_missing

Puede utilizar method_missing para gestionar métodos de forma flexible.

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "You asked me to say: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
end

p = DynamicPerson.new
p.say_hello_world

Sobrescritura de respond_to_missing?

Sobrescritura de respond_to_missing?

Para gestionar correctamente las comprobaciones de métodos, sobrescriba respond_to_missing?.

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "Saying: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
  
  def respond_to_missing?(name, include_private = false)
    name.to_s.start_with?('say_') || super
  end
end

p = DynamicPerson.new
puts p.respond_to?(:say_hello)

Uso de method_missing para getters y setters dinámicos

Uso de method_missing para getters y setters dinámicos

Puede crear atributos dinámicos mediante method_missing.

class DynamicPerson
  def initialize
    @data = {}
  end
  
  def method_missing(name, *args)
    attribute = name.to_s.sub(/=$/, '')
    if name.to_s.end_with?('=')
      @data[attribute] = args.first
    else
      @data[attribute]
    end
  end
end

p = DynamicPerson.new
p.name = 'Alice'
puts p.name

Riesgos de seguridad de method_missing

Riesgos de seguridad de method_missing

El uso incorrecto de method_missing puede introducir riesgos:

  • Comportamiento inesperado al gestionar métodos desconocidos.
  • Posibles problemas de rendimiento debido a búsquedas excesivas de métodos.
  • Vulnerabilidades de seguridad si se combina con entradas del usuario.

Repaso de los métodos dinámicos

¡Felicidades!

Ha aprendido a definir y llamar a métodos dinámicamente en Ruby.

A continuación, explorará las clases abiertas y el monkey patching.

Definición dinámica de métodos — ilustración 10

Preguntas frecuentes

¿La lección «Definición dinámica de métodos» es gratis?

Sí — el texto completo de «Definición dinámica de métodos» 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 «Definición dinámica de métodos»?

Aprenda a definir y llamar métodos dinámicamente mediante define_method y method_missing 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 «Definición dinámica de métodos»?

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. ¿Qué es la metaprogramación?
  2. Definición dinámica de métodos
  3. Clases abiertas y monkey patching
  4. Uso de send y eval
← Volver a Ruby Academy