Ruby · Avançado · Português · Técnico
metaprogramação
Escrever código que cria ou altera código em execução, definindo métodos, classes e comportamentos dinamicamente. Em Ruby é central, pois classes e métodos são objetos abertos.
Onde usar
Está por trás de attr_accessor, validates e scopes do Rails. No code review, pergunte se o ganho de concisão compensa a dificuldade de depurar e de achar onde um método foi definido.
Em código
class Config
%w[host porta].each do |campo|
define_method("#{campo}?") do
instance_variable_defined?("@#{campo}")
end
end
end
p Config.new.host? # => falseExemplos
Esse módulo usa metaprogramação para gerar os métodos de status.
A metaprogramação encurtou o código, mas dificultou a depuração.
Cuidado
Não é sinônimo de magia sem critério: abusar dela deixa o código difícil de ler e de testar.
Sinônimos
metaprogramming
Origem
Do grego meta, além de, e programação: programar sobre o próprio programa.