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?

Author: Salvador Dali, 2011-09-22

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.

 33
Author: derp,
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

 23
Author: jefflunt,
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.

 7
Author: Simone Carletti,
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