Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre las etiquetas de bucles.

Anuncios

Cuando hablamos de las etiquetas de bucles o loop labels, por su nombre en ingles, es muy similar a los lenguajes viejos donde podiamos asignar una etiqueta a una seccion del codigo y luego por medio de la funcion goto nos dirigimos a dicha seccion mediante la etiqueta, aqui es similar pero esta mas orientado a los bucles anidados, es decir que podemos asignar a un bucle for (por ejemplo) un nombre para que en una parte del codigo se dirija explicitamente a el, es algo bastante simple por lo tanto vamos a hacer un ejemplo bastante simple para entenderlo.

Anuncios

Como siempre por medio de cargo vamos a crear un nuevo proyecto que llamaremos nombre, una vez creado nuestro proyecto, iremos al archivo main.rs y modificaremos el codigo generado por el siguiente:

main.rs

fn main() {
	'bucle_externo: for x in 0..10
	{
		'bucle_interno: for y in 0..10
		{
			if x % 2 == 0 { continue 'bucle_externo; }
			if y % 2 != 0 { continue 'bucle_interno; }
			println!("X: {}, Y: {}", x, y);
		}
	}
}
Anuncios
Anuncios

Este es un ejemplo bien simple para que entendamos el concepto pero bien usado puede ser una herramienta muy poderosa, continuando con el codigo del ejemplo primero definiremos una etqiueta a la cual llamaremos bucle_externo, observen como usamos la comilla simple al comienzo y los dos puntos al final del nombre, despues usamos el bucle que queramos usar, en este caso un for, que tendra un iterador para la secuencia del 0 al 9, recuerden que al ultimo valor no llega, dentro de este bucle crearemos otra etiqueta que llamaremos bucle_interno con el mismo procedimiento que el anterior, tambien usaremos otro for pero al iterador lo llamaremos y con la misma secuencia que el anterior, la magia la haremos dentro de este bucle porque aqui tendremos dos condicionales para hacer un par de verificaciones y utilizar nuestras etiquetas.

Anuncios
Anuncios

En el primer condicional verificamos si el modulo obtenido de la division del valor de x es igual a cero, en caso de ser verdadero procede a ir a la etiqueta del bucle externo mediante el continue, esto hara que omita este valor al momento de mostrarlo y pase al siguiente valor de la secuencia del bucle externo, el siguiente condicional trabaja de forma similar pero distinta porque si bien verifica el modulo de la division de y con 2 tambien, la diferencia va a estar que en lugar de verificar si este es igual a cero lo hara si este es distinto de cero, si esto es verdadero procede a usar el continue pero esta vez con la etiqueta del bucle interno para hacer exactamente lo mismo, omitir el valor de este momento de y, es decir que el primero omitira todos los valores que sean pares y el segundo los que sean impares.

Anuncios

Por ultimo tenemos una linea que mostrara los valores actuales tanto de x como de y, con todo esto comentado podemos pasar a compilarlo y ejecutarlo para ver su salida:

tinchicus@dbn001vrt:~/lenguajes/rust/nombre$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/nombre`
X: 1, Y: 0
X: 1, Y: 2
X: 1, Y: 4
X: 1, Y: 6
X: 1, Y: 8
X: 3, Y: 0
X: 3, Y: 2
X: 3, Y: 4
X: 3, Y: 6
X: 3, Y: 8
X: 5, Y: 0
X: 5, Y: 2
X: 5, Y: 4
X: 5, Y: 6
X: 5, Y: 8
X: 7, Y: 0
X: 7, Y: 2
X: 7, Y: 4
X: 7, Y: 6
X: 7, Y: 8
X: 9, Y: 0
X: 9, Y: 2
X: 9, Y: 4
X: 9, Y: 6
X: 9, Y: 8
tinchicus@dbn001vrt:~/lenguajes/rust/nombre$
Anuncios

En este caso podemos ver como en el caso de X solo vemos los numeros impares, omitiendo los pares, y a la inversa en el caso de Y, esto no deja de ser un ejemplo muy simple que inclusive podriamos hacerlo de otra forma pero esto nos puede ser muy util a la hora de tener bucles anidados, como en este ejemplo, y a la hora de determinar a cual debemos dirigirnos nos permite una mejor interpretacion de que esta haciendo nuestro codigo y poder ayudarnos en la depuracion o debug, pero como dije hay mejores formas de trabajar inclusive con un ejemplo como este.

Anuncios

En resumen, hoy hemos visto que son las etiquetas de bucle o loop labels, como son, como se definen, para que se usan y como nos pueden ayudar mediante un ejemplo simple, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50