ExpertiDict

Ruby · Avançado · Português · Técnico

metaprogramação

/ˌmɛ.ta.pɾo.ɡɾa.maˈsɐ̃w̃/substantivo

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?  # => false

Exemplos

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.

Veja também

Todos os termos de Ruby