2009-03-10 11 views
8

que he encontrado tres formas de escribir el mismo estado en Ruby:Cómo escribir 'si' sin usar 'y luego' o 'fin' 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" 

que no entiendo:

  1. Por qué entonces y final son necesarios en el # 3, y,
  2. ¿Por qué tengo que cambiar el orden de conseguir # 2 de trabajo.

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

Respuesta

19

La sintaxis "if x then y end" está pensada para condicionales de líneas múltiples, mientras que el formulario "y if x" está diseñado para sentencias concisas 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 paréntesis como C), y el end es necesario para decirle a Ruby que todo el bloque if ha terminado (ya que puede haber varias líneas))

Puede reemplazar el then con un punto y coma, porque un final de línea también indica el final de la condición. No puede deshacerse del end con una línea múltiple if. Utilice la segunda forma o el operador ternario si desea un trazo concisa de una línea.

Por ejemplo, supongamos

x = true 

la siguiente evaluará verdadera, y volver y

x ? y : 
=> y 

del mismo modo, esto va a evaluar falsa y devolver nada

!x ? y : 
=> 

añadir un término después de ':' para el caso else

!x ? y : z 
=> z 
+0

" ya que Ruby no requiere parientes como C "- Olvidé eso. Ok, tiene sentido por qué 'entonces' es necesario. No sabía sobre el punto y coma, parece un poco extraño pero funciona. Muy útil. Gracias. –

+0

+1 para la punta de punto y coma. –

4

La cosa es que ambas formas son en realidad una forma natural de pensar:

si esto es cierto, entonces hacer algo

hacer algo si esto es cierto

Ver? Ruby intenta acercarse a la sintaxis en inglés de esta manera. El extremo es solo necesario para finalizar el bloque, mientras que en la segunda versión, el bloque ya está cerrado con el si.

Para responder a su pregunta en realidad, creo que no hay ninguna posibilidad de obtener el continuación y final eliminado. Recuerde Pascal/Delphi? Usted tiene un luego allí también. Es típico que los lenguajes estilo C no lo tengan.

0

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

Hay varias maneras en que podría cortocircuitarse si así lo deseara.

El enunciado condicional es solo parte de la sintaxis de Ruby para que sea más similar al inglés.

+0

Por lo que vale, este uso del colon se ha ido a partir de Ruby 1.9 - lo mismo para las pruebas cuando en las declaraciones de casos. Vea el "Hijo de 10 cosas a tener en cuenta de David Black" en Ruby 1.9 " – Telemachus

Cuestiones relacionadas