¿Alguien me puede explicar la diferencia entre if
y unless
y cuándo usarlo?Diferencia - a menos que/si
Respuesta
unless
es simplemente una negada if
. Es decir, ejecuta lo que contiene si la condición es no verdadero.
unless foo?
# blabla
end
significa simplemente
if !foo?
# blabla
end
Es todo una cuestión de lo que se encuentra más fácil de leer, de verdad.
Consulte también: Unless, The Abused Ruby Conditional
unless
es simplemente equivalente a if not
. Cuando usa cuál es una preferencia personal.
La diferencia entre if
y unless
es que son exactamente opuestos el uno del otro:
if
lleva a una condición, un entonces bloque y una opcional bloque else, y evalúa el bloque entonces si la condición es verdadera, de lo contrario evalúa el else-blockunless
toma una condición, un then-block y un else-block opcional, y evalúa el then-block si th La condición de e es faly, de lo contrario evalúa el else-block
O, en otras palabras, significan más o menos lo mismo en Ruby que en inglés.
El texto anterior parece engañoso dada la posibilidad de postcondiciones. (Si bien la distinción entre los dos es correcta, el resto implica que necesita un bloque 'then', y que siempre puede optar por poner un bloque' else'.) – Phrogz
Usar 'a menos' es sencillo para mí cuando hay un argumento, pero me resulta confuso cuando hay varios. Y cuando se usa ||
en lugar de &&
.
"A menos que esto o aquello" es más difícil para mi cerebro. "si no es esto y no es así" es más fácil.
Va a ser más difícil mantener este código en el futuro si lo uso. Entonces yo no.
- 1. diferencia entre menos y excepto en Teradata
- 2. más (+) frente a menos (-) en Objective-C
- 3. Diferencia entre lista y tupla (menos inmutabilidad) en Python?
- 4. Ruby-like 'a menos' para C#?
- 5. lista a menos vacía en Python
- 6. Div. Vim a menos que esté abierto
- 7. Cálculo de la diferencia entre 2 veces, y luego compare la diferencia para ver si es menos de 5 minutos
- 8. MENOS Impedir que se agregue menos url relativo
- 9. Javascript a diferencia
- 10. MENOS interpolación de cadena
- 11. Rubí menos && comunicado
- 12. ¿Compilador de Java para menos CSS?
- 13. CSS MENOS en Windows
- 14. Diferencia de Python entre imprimir obj e imprimir obj .__ str __() [al menos con Unicode?]
- 15. MENOS Cliente para Windows
- 16. Fecha menos 1 año?
- 17. Menos primer hijo
- 18. jQuery valida menos de
- 19. Mayor que menos, python
- 20. jboss con menos memoria
- 21. Colores menos de vértices
- 22. Seleccione Inicio (todos menos 10) a partir ... en Microsoft Access
- 23. Reemplazar bit menos significativo con operaciones bit a bit
- 24. Regex: coincide con toda la cadena a menos que
- 25. Agregar extensión de archivo a archivo de extensión-menos
- 26. jQuery: Firemove los eventos de mouse menos a menudo
- 27. Impresoras no disponibles a menos que se comparta
- 28. Código Ascii por menos de o igual a
- 29. ¿Actualizar atributos a menos que estén en blanco?
- 30. reglas CSS condicionales con menos, en base a variables
'a menos que comments.empty?' Se vea mejor que 'if! Comments.empty?', Pero usándolo con una cláusula else, como: 'unless comments.empty? entonces aaa else bbb end' puede ser más confuso que el equivalente invertido: 'if comments.empty? bbb else aaa end' – Phrogz
Ruby no sigue el Zen de Python: "Debería haber una, y preferiblemente solo una, forma obvia de hacerlo". –