Ruby: a menos que vs si no
Me encuentro prefiriendo if not
en lugar de unless
. ¿Hay una forma adecuada de escribir ese tipo de condición? ¿Cómo se sienten las personas en general acerca de unless
?
3 answers
Espero que esto ayude:
https://github.com/bbatsov/ruby-style-guide
Personalmente estoy de acuerdo con lo que está escrito allí elegir unless something
sobre if !something
para modificadores y simples y cuando hay un else
prefieren if
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-22 19:16:30
Uso unless
cada vez, excepto cuando hay una cláusula else
.
Entonces, usaré{[12]]}
unless blah_blah
...
end
Pero si hay una condición else, usaré if not
(o if !
)
if !blah_blah
...
else
...
end
Después de usar if !
durante años y años y años, en realidad me llevó un tiempo acostumbrarme a unless
. Hoy en día lo prefiero en todos los casos donde leerlo en voz alta suena natural.
También soy un fan de usar un trailing unless
increment_by_one unless max_value_reached
Estoy usando estos nombres de método/variable obviamente como un ejemplo de legibilidad-la estructura del código debería básicamente seguir ese patrón, en mi opinión.
En un sentido más amplio, la estructura debería ser: take_action unless exception_applies
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-22 19:16:03
if not condition
se usa raramente. Los programadores de Ruby (usualmente provenientes de otros lenguajes) tienden a preferir el uso if !condition
.
Por el otro lado, a menos que sea ampliamente utilizado en caso de que haya una sola condición y si suena legible.
También ver teniendo sentido con Ruby a menos que para más sugerencias acerca de unless estilo de codificación.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-22 19:09:17