Guía del usuario de Ruby - Estructuras de control

10 - Estructuras de control

[editar]
Tutorial creado por matz. Extraido de: http://es.tldp.org/Manuales-LuCAS/doc-guia-usuario-ruby/doc-guia-usuario-ruby-html/
27 de Febrero de 2006
case

Se utiliza la sentencia case para comprobar una secuencia de condiciones. Superficialmente se parece al switch de C y Java pero es considerablemente más potente como veremos.

|| ruby> i=8
8
ruby> case i
ruby| when 1, 2..5
ruby| print "1..5\n"
ruby| when 6..10
ruby| print "6..10\n"
ruby| end
6..10
nil
||

2..5 es una expresión que representa un rango entre 2 y 5 inclusive. La siguiente expresión verifica si el valor i cae dentro del rango:

|| (2..5)

i ||

La sentencia case utiliza internamente el operador

para verificar las distintas condiciones. Dentro de la naturaleza orientada a objetos de Ruby,

lo interpreta el objeto que aparece en la condición when. Por ejemplo, el código que sigue comprueba en el primer when la igualdad de cadenas y en el segundo la coincidencia con una expresión regular.
|| ruby> case 'abcdef'
ruby| when 'aaa', 'bbb'
ruby| print "aaa o bbb\n"
ruby| when /def/
ruby| print "incluye /def/\n"
ruby| end
incluye /def/
nil
||

while

Ruby proporciona medios adecuados para la construcción de bucles, aunque veremos en el siguiente capítulo que si se aprende a utilizar los iteradores a menudo hace innecesario su utilización explícita.

Un while es un if repetido. Se ha utilizado en nuestros programas acertijo adivina-palabra y en las expresiones regulares (ver el capítulo anterior); allí tomaba la forma while condición ... end que rodeaba el código a repetir mientras la condición fuera cierta. Pero while e if se pueden aplicar fácilmente a sentencias individuales:

|| ruby> i = 0
0
ruby> print "Es cero.\n" if i

0 Es cero.
nil
ruby> print "Es negativo\n" if i < 0
nil
ruby> print "#{i+=1}\n" while i < 3
1
2
3
nil
||

Algunas veces se necesita la condición de comprobación negada. Un unless es un if negado y un until es un while negado. Dejamos estas sentencias para que se experimente con ellas.

Existen cuatro formas de interrumpir el progreso de un bucle desde su interior. La primera break, como en C, sale completamente del bucle. La segunda next salta al principio de la siguiente iteración del bucle (se corresponde con la sentencia continue del C). La tercera redo reinicia la iteración en curso. A continuación se muestra un extracto de código en C que ilustra el significado de break, next, y redo:

|| while (condicion) {
label_redo:
goto label_next /*next*/
goto label_break /*break*/
goto label_redo /*redo*/
;
;
label_next:
}
label_break:
;
||

La cuarta forma de salir del interior de un bucle es return. La evaluación de return provoca la salida no sólo del bucle sino también del método que contiene el bucle. Si se le pasa un argumento, lo devolverá como retorno de la llamada al método, si no el retorno será nil.

for

Los programadores en C se estarán preguntando cómo se construye un bucle for. En Ruby, el bucle for es mucho más interesante de lo que cabía esperar. El siguiente bucle se ejecuta una vez por cada elemento de la colección.

|| for elem in coleccion
...
end
||

La colección puede ser un rango de valores (esto es lo que la mayoría de la gente espera cuando se habla de bucles for):

|| ruby> for num in (4..6)
ruby| print num, "\n"
ruby| end
4
5
6
4..6
||

Puede ser cualquier tipo de colección como por ejemplo un array:

|| ruby> for elm in [100,-9.6,"pickle"]
ruby| print "#{elm}\t(#{elm.type})\n"
ruby| end
100 (Fixnum)
-9.6 (Float)
pickle (String)
[100, -9.6, "pickle"]
||

Saliéndonos un poco del tema, for es realmente otra forma de escribir each, el cual es nuestro primer ejemplo de iterador. La siguientes dos estructuras son equivalentes:

|| # Si utilizas C o Java, puedes preferir esta estructura
for i in coleccion
..
end
# si utilizas Smalltalk, puedes preferir esta otra
coleccion.each {|i|
...
}
||

Con frecuencia se puede sustituir los bucles convencionales por iteradores y una vez acostumbrado a utilizarlos es generalmente más sencillo tratar con éstos. Por lo tanto, avancemos y aprendamos más sobre ellos.
[editar]

5 opiniones

ejemplos

deberian colocar mas ejemplos =)
D:

y los atributos de la clase que?
bien

bien
Exelente.

Excelente traduccion de: http://www.rubyist.net/~slagell/ruby/singletonmethods.html
muy recomendable.
Bueno.

Muy bueno como introduccion a el leguaje de ruby.

Tutoriales relacionados con 'Guía del usuario de Ruby'

Autor y licencia de 'Guía del usuario de Ruby'

Licencia GNU Free Documentation License: http://www.es.gnu.org/licencias/fdles.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.