Pregunta

He encontrado tres formas de escribir la misma condición en Ruby:

#1
if 1==1 
  puts "true" 
end

#2
puts "true" if 1==1

#3
if 1==1  then puts "true" end

¿Por qué no puedo hacer esto?

#4
if 1==1 puts "true"

No entiendo:

  1. Por qué luego y fin son necesarios en el # 3, y,
  2. Por qué necesito cambiar el orden para que el n. ° 2 funcione.

La declaración n. ° 4 parece ser la forma más natural de escribir esto. No entiendo por qué no es posible.

¿Fue útil?

Solución

El " si x entonces y finaliza " la sintaxis está pensada para condicionales multilínea mientras que " y if x " la forma está destinada a declaraciones condicionales concisas de una sola línea. El then es necesario en el primer caso para decirle a Ruby que la condición ha terminado (ya que Ruby no requiere parens como C), y el end es necesario para decirle a Ruby que todo el bloque if ha terminado (ya que puede tener varias líneas).

Puede reemplazar el luego con un punto y coma, porque un final de línea también señala el final de la condición. No puede deshacerse del end con un if multilínea. Utilice la segunda forma o el operador ternario si desea una línea concisa.

Por ejemplo, supongamos

x = true

lo siguiente evaluará verdadero y devolverá y

x ? y :
=> y

igualmente, esto evaluará falso y no devolverá nada

!x ? y :
=> 

agregue un término después de ':' para el caso else

!x ? y : z
=> z

Otros consejos

La cuestión es que ambas formas son en realidad una forma natural de pensar:

si esto es cierto, entonces haz algo

haz algo si esto es cierto

¿Ves? Ruby intenta acercarse a la sintaxis inglesa de esta manera. El fin solo es necesario para finalizar el bloque, mientras que en la segunda versión, el bloque ya está cerrado con el si .

Para responder realmente a su pregunta, creo que no hay posibilidad de eliminar y luego y end . ¿Recuerdas a Pascal / Delphi? Tienes un entonces allí también. Es típico que los lenguajes de estilo C no lo tengan.

¿Qué pasa con el uso de dos puntos en lugar de así? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyreplacingthethenwithacol. htm

Hay varias formas de hacer un cortocircuito si así lo desea.

La declaración condicional es solo parte de la sintaxis de Ruby para que sea más inglesa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top