4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

Ruby, Rails, el código declarativo y la expresividad

|

Ayer, mientras estabamos introduciendo a un profano al mundo de Ruby on Rails surgió una breve pero interesante discusión, acerca del uso de métodos como delegate_method frente a su contrapartida “procedural”. Esto es:

1
delegate_method :country_name, :to => :country, :as => :name, :default => 'Unknown'

frente a:

1
2
3
def country_name
  country.name || 'Unknown'
end

que viene siendo, más o menos, el código que genera dinámicamente delegate_method.

Sin entrar en temas acerca de reutilización de código, mejor gestión del cambio, etc. etc. (que me parecen bastante obvios), la discusión se centraba en que nuestro “profano” (y lo digo con todo el cariño, porque confío en que será un fervoroso converso en el futuro) consideraba que el segundo pedazo de código era más claro y sencillo. Asís, por el contrario, indicaba que la versión declarativa era mejor, más expresiva y autodocumentada, ya que, por su propia naturaleza, declara lo que se está haciendo y no cómo se está haciendo. Yo no puedo estar más de acuerdo con Asís. El segundo código “pide a gritos” un comentario para “declarar” qué hace y no obligar a un posible lector a discernirlo en función de cómo lo hace.

Quizás el ejemplo es demasiado simple para convencerse, así que propongo aquí otro código como ejercicio filosófico-mental, utilizando la librería has_finder, cuya funcionalidad va a ser introducida en el core de Rails. Echadle un ojo.

1
2
3
class Order
  has_finder :unpaid, :conditions => {:paid => false}
end


Lo sentimos, pero los comentarios están cerrados