ExpertiDict

Ruby · Intermediário · Inglês · Informal

monkey patching

/ˈmʌŋki ˈpætʃɪŋ/substantivo

Reabrir uma classe existente, inclusive as nativas como String, para adicionar ou trocar métodos em execução. É poderoso, mas altera o comportamento para todo o programa.

Onde usar

Aparece em gems antigas e extensões como o ActiveSupport. No code review costuma ser sinal de alerta: prefira refinements, módulos ou subclasses, porque um patch global pode colidir com outras gems.

Em código

class String
  def vazia_ou_branca?
    strip.empty?
  end
end
puts '   '.vazia_ou_branca?  # => true

Exemplos

That gem monkey patches String, and it broke our own method.

Essa gem faz monkey patching em String e quebrou um método nosso.

Avoid monkey patching; a refinement is safer.

Evite monkey patching; um refinement é mais seguro.

Cuidado

Não é uma extensão local: o patch vale para todos os usuários da classe, até dentro de bibliotecas de terceiros.

Sinônimos

patch em tempo de execução

Origem

De guerrilla patch, que virou monkey patch: um remendo feito às pressas, sem permissão.

Veja também

Todos os termos de Ruby