Anuncios

Bienvenidos sean a este post, en el post anterior hablamos sobre como trabajar con un bucle determinado, es decir con un principio y un final, pero hoy nos centraremos en el tipo de bucle indeterminado aunque en realidad no es tan asi, para esto usamos a do … loop, su sintaxis es la siguiente:

do [while o until]
 … instrucciones …
 [exit do]
 … instrucciones …
 loop

O podemos usarlo de la siguiente manera:

do
 … instrucciones …
 [exit do]
 … instrucciones …
 loop [while o until]
Anuncios

En este caso do a diferencia de for no se autoincrementa por cada ciclo que hace, es decir que para este caso nosotros debemos encargarnos de llevar la cuenta (si queremos), while y until son opcionales pero son los encargados de establecer una condicion para salir del bucle y por ultimo tenemos un exit do para salir del bucle por medio de un condicional (u otro objeto), para entender el concepto vamos a tomar de nuevo a dados.vbs y lo modificaremos de la siguiente manera:

dados.vbs

randomize timer

dim dado
dim texto
dim a

a = 0

do
	consulta = msgbox("Tirar el dado", vbOkCancel)
	if consulta = 1 then
		dado = int(rnd * 6) + 1
		texto = texto & " " & dado
		msgbox "Tu numero es " & dado
	else
		exit do
	end if
	a = a + 1		
loop

wscript.echo("Tus numeros fueron: " & texto & " - hasta el ciclo: " & a)
Anuncios

En este caso primero vamos a agregar una nueva variable llamada a, y la iniciaremos con el valor de 0, despues sacamos el for … next y lo reemplazamos por el do … loop, hicimos otra pequeña modificacion donde ahora no solamente acumularemos los numeros sino que tambien lo mostraremos, el condicional trabaja de la misma forma si apretamos Ok ejecuta el codigo de lo contrario sale del ciclo, y por ultimo antes de salir del ciclo vamos incrementando a, una vez que salimos del bucle los mostramos en pantalla, si lo probamos se vera de la siguiente manera

Anuncios

En este caso tenemos un ejemplo que mientras no pulsamos el boton cancelar hubieramos tirado los dados hasta el infinito, esa es la idea de utilizar a do … loop, y en este caso contamos la cantidad de vueltas pero como les dije antes ahora depende de nosotros y no es parte del bucle, vamos a tomar el caso anterior y vamos a aplicar primero el while y luego el until, para el while vamos a hacer la siguiente modificacion:

randomize timer

dim dado
dim texto
dim a

a = 0

do
	consulta = msgbox("Tirar el dado", vbOkCancel)
	if consulta = 1 then
		dado = int(rnd * 6) + 1
		texto = texto & " " & dado
		msgbox "Tu numero es " & dado
		a = a + 1
	end if
loop while consulta <> 2

wscript.echo("Tus numeros fueron: " & texto & " - hasta el ciclo: " & a)
Anuncios

En este caso las modificaciones son minimas porque quitamos al bloque else del condicional, y para este caso pusimos en el condicional el incremento de a, en este caso sacamos el bloque else porque implementamos el while, que se lee como mientras, y para este caso el bucle se hace “mientras” el valor de consulta sea distinto de 2, es decir que no apretamos el boton Cancel, en este caso el while lo implementamos abajo pero se puede usar arriba, tambien podriamos haber hecho la condicion con mientras a sea menor a un valor x pero en general con el while se utiliza mas las opciones logicas, modifiquemos el caso anterior para usar el until:

randomize timer

dim dado
dim texto
dim a

a = 0

do
	consulta = msgbox("Tirar el dado", vbOkCancel)
	if consulta = 1 then
		dado = int(rnd * 6) + 1
		texto = texto & " " & dado
		msgbox "Tu numero es " & dado
		a = a + 1
	else
		exit do
	end if
loop until a >= 6

wscript.echo("Tus numeros fueron: " & texto & " - hasta el ciclo: " & a)
Anuncios

En este caso volvimos a armar el condicional original para que salga en caso de apretar Cancel pero esta vez dejamos a la vatiable a dentro del bloque del condicional verdadero pero la diferencia la hicimos al final donde en lugar de while usamos until, se lee como “hasta que”, y en este caso el bucle se hara “hasta que” se cumpla la condicion de a mayor o igual a 6, en este caso tendremos un programa que hara 6 ciclos o menos (dependiendo si apretamos el boton Cancel o no), por lo que podriamos decir que es determinado porque de una forma u otra llegara a su fin.

Anuncios

En conclusion podriamos decir que el while se deberia usar para condiciones de tipos logicos, cuando esperamos que una condicion se convierta en verdadera, y el until para cuando necesitamos detener el bucle despues de una X cantidad de veces, como en el ejemplo.

Nota: En versiones muy viejas de VBScript el poner arriba o abajo el while o el until determinaba si se ejecutaba el bloque o no, en las versiones mas modernas no se realiza tal diferenciacion.
Anuncios

En resumen, hoy hemos visto un bucle indeterminado tambien conocido como do … loop, se puede usar para una tarea donde debemos repetirlo muchas veces pero desconocemos el total, como se puede inerrumpirlo, como se puede determinar la conducta del mismo, ya sea con while o con until, cuales son sus diferencias y como influyen en nuestro codigo, espero les haya sido util 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

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes comprar mi libro sobre VBscript en Amazon

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00