Un idiom, para aquel que no lo sepa, es
[…] a means of expressing a recurring construct in one or more programming languages
(o eso dice la wikipedia, así que yo me lo creo).
Ruby es un lenguaje que permite hacer cualquier cosa de muy diversas maneras, por lo que no es de extrañar que existan multitud de idioms para hacer multitud de cosas. El caso concreto que nos ocupa tiene que ver con la asignación condicional o inicialización… ¿perezosa? Nunca recuerdo cómo se traduze (lazy initialization). Vamos, el operador ||=
1 2 3 |
|
que viene a ser el forma idiomática de expresar en Ruby la construcción más tradicional
1 2 3 |
|
(para un ejemplo de uso y alguna información adicional importante, ver este post de Jay Fields).
Al grano… al idiom
Con el advenimiento de REST, los controladores Rails han vuelto a la estructura clásica de una acción GET para mostrar un formulario, una acción POST para procesarlo. A la hora de hacer CRUD, lo normal es tener algo similar a esto (para la C en CRUD, por ejemplo):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Evidentemente, el código anterior no es muy DRY. Estamos duplicando la “preparación” de los datos para renderizar la acción de ‘new’. Un primer impulso nos puede llevar a refactorizar por ahí y extraer un nuevo método que podría ser algo similar a
1 2 3 4 |
|
y utilizar este método para cargar las colecciones necesarias tanto en la acción de ‘new’ como en la de ‘create’. Pero la asignación condicional nos permite hacer algo que, a mi juicio, es más directo y más cómodo (aunque también puede resultar un poco más oscuro): es suficiente con hacer que la asignación de la variable de instancia @user
sea condicional en ‘new’ y podremos llamar al método ‘new’ directamente desde ‘create’. En código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
En este caso, como en muchos otros, el idiom Ruby conduce a un idiom Rails.
Lo sentimos, pero los comentarios están cerrados