Ruby es uno de los idiomas más populares utilizados en la web. Hemos comenzado una nueva serie de capturas de pantalla aquí en Nettuts + que te presentará a Ruby, así como a los excelentes marcos y herramientas que acompañan el desarrollo de Ruby. En este capítulo, veremos cómo funcionan las instrucciones condicionales y los bucles en Ruby.
La instrucción if es uno de los primeros tipos de bifurcaciones que aprendes al programar. Puedes adivinar lo que significa: si esto es cierto, haz una cosa; Si no lo es, haz otra cosa. En Ruby, estos son bastante fáciles de escribir:
name = "Andrew" si name == "Andrew" pone el final "Hello Andrew" si name == "Andrew" pone el término "Hello Andrew"; otra cosa pone el final "Hola alguien más"
Después de la palabra clave Si
, código en su declaración condicional. Después de eso viene el código para ejecutar si la condición devuelve verdadero. Usted cierra la declaración con el fin
palabra clave. Si lo desea, puede apretar una más
declaración allí, que se ejecutará de manera predecible si la condición es falsa.
No es difícil verificar múltiples condiciones. Solo pon tantos elsif
declaraciones como te gustaría entre el Si
y más
declaraciones Sí, esto es elsif
, un matrimonio de más
y Si
.
order = : size => "medium" def make_medium_cofee pone "making medium statement" final # asume otras funciones si order [: size] == "small" make_small_coffee; elsif order [: size] == "medium" make_medium_coffee; elsif order [: size] == "large" make_large_coffee; else make_coffee; fin
Como mencioné, puedes tener tantos elsif
Condiciones y sus correspondientes bloques de código que quieras..
La mayoría de los lenguajes de programación hacen una distinción entre declaraciones y expresiones. Una declaración es una construcción de código que no se evalúa a un determinado valor. Una expresión es una construcción de código hace devuelve un valor. Por ejemplo, llamar a una función es una expresión, porque devuelve un valor. Sin embargo, una instrucción if es exactamente eso, una declaración, porque no devuelve un valor. Esto significa que no puedes hacer esto en tu JavaScript:
message = if (someTruthyValue) "esto es cierto"; else "esto es falso";
Obviamente, no puede hacer esto porque la instrucción if no devuelve un valor que puede asignar a mensaje
.
Sin embargo, puedes hacer esto con Ruby, porque las declaraciones son en realidad expresiones, lo que significa que devuelven un valor. Entonces podemos hacer esto
mensaje = si orden [: tamaño] == "pequeño" "haciendo una pequeña" elsif orden [: tamaño] == "mediano" "haciendo que un medio" más "haga café" final
Cualquier bloque de código que se ejecute se convertirá en el valor de mensaje
.
Si no tienes ninguna elsif
o más
cláusulas, y su sentencia if tiene solo una línea, puede usarla como modificador de una línea "normal".
pone "hacer café" si customer.would_like_coffee?
En la mayoría de los lenguajes de programación, queremos revertir el retorno de la expresión condicional, tenemos que negarlo, generalmente con la explosión (!
) operador.
engine_on = true si! engine_on # significa "si no engine_on" pone "servicing engine" #no debe ser puesto, porque "no engine_on" es falso final
Sin embargo, Ruby tiene una muy buena. a no ser que
operador, eso nos impide tener que hacer eso, al tiempo que nos da un código mucho más legible:
a menos que engine_on # "a menos engine_on" sea mejor que "si no engine_on" "service service engine" final
Al igual que Si
, puedes usar a no ser que
como modificador:
pone "motor de servicio" a menos que motor_on
Si tienes muchas opciones para trabajar, usa si / elsif / else
podría ser algo prolijo. Prueba la declaración del caso.
hora = 15 caso cuando hora < 12 puts "Good Morning" when hour > 12 horas < 17 puts "Good Afternoon" else puts "Good Evening" end
Es un poco sorta, tal vez como un interruptor / caja
Declaración en JavaScript (u otros idiomas), excepto que no hay una variable que esté evaluando. Dentro de caso / final
palabras clave, puedes poner tantas cuando
Declaraciones como quieras. Sigue eso cuando
por la expresión condicional, y luego las líneas de código van tras ella. Al igual que la sentencia if, la sentencia case es realmente una expresión, por lo que puede asignarla a una expresión y capturar un valor devuelto..
hora = 15 mensaje = caso cuando hora < 12 "Good Morning" when hour > 12 horas < 17 "Good Afternoon" else "Good Evening" end puts message
Si está familiarizado con JavaScript, sabrá que los bloques de código en una instrucción if están rodeados por llaves. No hacemos esto en Ruby, por lo que puede parecer que Ruby depende del espacio en blanco. Nada podría estar más lejos de la verdad (toma eso, pythonistas :)).
Si queremos escribir sus declaraciones como de una sola línea, debemos separar las diferentes partes de las declaraciones ... ¿pero cómo? Bueno, puedes usar punto y coma:
si nombre == "Andrew"; some_code; más; some_code; fin
Si no te gusta el aspecto de eso (lo que no me gusta), puedes poner la palabra clave entonces
entre las expresiones condicionales y la línea de código.
si nombre == "Andrew" entonces sode_code; fin
Esto también funciona para una declaración de caso.
caso cuando x> 20; pone "<20" when x < 20 then puts "<20" end
Entonces, esas son declaraciones condicionales (quiero decir, expresiones). ¿Qué hay de los bucles? Veamos mientras bucles primero.
Un bucle while continuará ejecutándose hasta que la condición declarada sea falsa:
arr = ["John", "George", "Paul", "Ringo"] i = 0 mientras que arr [i] pone arr [i] i + = 1 final
Aquí estamos repasando una matriz; cuando arr [i]
devuelve falso (lo que significa que no quedan elementos en la matriz), el bucle dejará de ejecutarse. Dentro del bucle, imprimimos el elemento actual en la matriz y lo agregamos a nuestra variable de incremento.
También puedes usar mientras
como modificador
arr = ["John", "George", "Paul", "Ringo"] i = -1 pone arr [i + = 1] mientras que arr [i]
Al igual que a no ser que
es lo opuesto a Si
, hasta
es lo opuesto a mientras
. Continuará en bucle hasta que la condición sea verdadera:
days_left = 7; hasta que days_left == 0 pone "todavía hay # days_left en la semana" days_left - = 1 end
Y por supuesto, también es un modificador..
days_left = 8 pone "todavía hay # days_left - = 1 en la semana" hasta days_left == 1
Sí, Ruby tiene un bucle for. No, no es como el bucle for en otros idiomas. Actúa como un bucle foreach, para recorrer en bucle los valores de una matriz o hash:
arr = ["John", "George", "Paul", "Ringo"] para el artículo en arr pone el artículo final
Si recorres un hash, puedes usar dos nombres de variables, uno para la clave y otro para el valor:
joe = : name => "Joe",: age => 30,: job => "fontanero" para la clave, val en joe pone "# key is # val" end
Espero que estés disfrutando de nuestra serie Ruby for Newbies Screencast. Si hay algo que te gustaría ver, házmelo saber en los comentarios. (Y si no estás viendo los videos, deberías estarlo. Hay una bonificación de solo captura de pantalla al final de cada uno).