El lenguaje de programación iJava (3)

Animaciones

Una de las cosas que mejor hacen los ordenadores es repetir un conjunto de instrucciones. Los lenguajes de programación nos permiten expresar lo que queremos que se repita y cuántas veces queremos que lo haga. En iJava existen varias formas de hacerlo. La más sencilla es la que nos permite indicar al ordenador que ejecute una de nuestras funciones y cuando termine la vuelva a ejecutar. Esto nos va a servir además para hacer animaciones gráficas.

Para indicar que queremos que el programa comience un ciclo potencialmente infinito de repeticiones de una función en concreto usaremos la función animate a la que le pasaremos como parámetro el nombre de la función que queramos que se repita continuamente. Lo único importante es que la función a ejecutar continuamente no debe tener parámetros y debe ser de las que no devuelven nada, es decir, de tipo void.

void dibuja() {
	ellipse(160,160,50,50);
}

void main() {
	animate(dibuja);
}

Al probar el programa aparece un círculo blanco en el centro de la pantalla pero si te fijas verás que en el botón que hemos pulsado para probar el programa ahora pone parar. Lo que pasa es que un programa que acaba con una ejecución de la función animate no para hasta que se lo indiquemos pulsando el botón. Mientras que no lo hagamos se estará ejecutando la función dibuja 25 veces por segundo. Sin embargo, como nuestra función siempre dibuja lo mismo no se nota. Para que se note vamos a hacer que los círculos se dibujen en posiciones aleatorias.

void dibuja() {
	int x = round(random(320));
	int y = round(random(320));
	ellipse(x,y,50,50);
}

void main() {
	animate(dibuja);
}

Durante la ejecución de un programa como los anteriores en los que se está repitiendo continuamente la ejecución de una función podemos además utilizar algunas variables que existen en iJava aunque no las hayamos creado nosotros. Esta variables guardan en todo momento la posición del ratón y se llaman mouseX y mouseY. Prueba a usar dichas variables en lugar de x e y en el programa anterior y tras probar mueve el ratón por encima de la pantalla de iJava.

Variables locales y globales

Las variables que creamos dentro de una función sólo se pueden usar en el código de la propia función, fuera no existen por lo que en una función diferente podemos volver a crear variables con el mismo nombre. Las variables que sólo existen dentro de una función se denominan variables locales. Los parámetros se consideran también variables locales a la función. Por el contrario, si creamos una variable fuera de cualquier función esta variable se considera global y puede ser utilizada en cualquier función. Además, el valor de la misma se mantiene entre llamadas a las distintas funciones.

En el siguiente programa se usan dos variables, una global llamada n y otra local a la función dibuja llamada m. A las dos variables se les modifica su valor en cada repetición de la función sumando uno al valor que ya tuvieran y su valor es mostrado en la pantalla. Sin embargo, sólo la variable global aumenta de valor con el paso del tiempo puesto que sí guarda el valor entre llamadas a la función dibuja mientras que la local se crea cada vez que se ejecuta la función.

// n es una variable global
int n = 0;

void dibuja() {
	// m es una variable local
	int m = 0;
	n = n + 1;
	m = m + 1;
	// Borramos el fondo de la pantalla
	background(0,0,0);
	// Mostramos el valor de cada variable
	text("n = " + n, 140, 100);
	text("m = " + m, 140, 120);
}

void main() {
	animate(dibuja);
}

Hay que tener en cuenta que no pueden haber dos variables globales con el mismo nombre y tampoco pueden haber dos variables con el mismo nombre dentro de una misma función. Sin embargo, funciones distintas sí pueden tener variables o incluso parámetros con el mismo nombre. De hecho, pueden tener variables con el mismo nombre que el que tengan variables globales pero no es aconsejable hacer esto.

Repetir código un número fijo de veces

Si lo que queremos es que una o varias instrucciones se repitan un número concreto de veces entonces podemos usar la estructura for. La estructura for nos permite especificar cuántas repeticiones queremos hacer y el código que queremos que se repita sin necesidad de que este se encuentre dentro de una función concreta. Por ejemplo, si queremos mostrar cinco veces el mensaje "Hola mundo" haremos lo siguiente

void main() {
	for ( int vez = 1 ; vez <= 5 ; vez = vez + 1 ) {
		println("Hola mundo!");
	}
}

La estructura for nos permite hacer lo que en programación denominamos bucle y se compone de cuatro partes, las tres primeras están dentro de los paréntesis y se separan con punto y coma. La cuarta se corresponde con el conjunto de instrucciones que hay encerrado entre las dos llaves. La estructura for en iJava se comporta exactamente igual que en Java. Sin embargo nosotros recomendamos utilizarla siempre del modo en que lo hemos hecho antes. Es decir, para conseguir que la cuarta parte se repita N veces crearemos una variable en la primera parte del for a la que le daremos 1 como valor inicial. En la segunda parte escribiremos el nombre de la variable seguido del símbolo <= y el número de repeticiones que queramos que se lleven a cabo. La tercera parte consistirá en una instrucción de asignación en la que modificaremos el valor de la variable que hemos creado en la primera parte sumándole uno al valor que ya tuviera para que vaya contando el número de repeticiones que se van haciendo.

La variable que creamos en la primera parte del for se puede utilizar dentro del conjunto de instrucciones que forma la cuarta parte del mismo como cualquier otra variable. Sin embargo es muy recomendable no modificar su valor ya que se alteraría el número de repeticiones que se hacen.

Bucles anidados

La estructura for puede utilizarse en cualquier parte de nuestro programa incluso dentro de otra estructura for. A esto le llamamos bucles anidados. En este caso conseguiremos que para cada repetición del bucle externo se haga un ciclo completo de repeticiones del bucle interno.

void main() {
	for ( int tabla = 1 ; tabla <= 10 ; tabla = tabla + 1 ) {
		println("Tabla del " + tabla);
		for ( int n = 1 ; n <= 10 ; n = n + 1 ) {
			int resultado = tabla * n;
			println(tabla + " x " + n + " = " + resultado);
		}
	}
}

En el ejemplo anterior utilizamos un bucle externo para enumerar las tablas de multiplicar desde la del uno hasta la del 10. En cada repetición de ese bucle se muestra un mensaje indicando la tabla que se va a calcular. A continuación, hacemos otro bucle completo del 1 al 10 para calcular los diez resultados de la tabla que toca. Fíjate que en este caso estamos utilizando directamente los valores de las variables que sirven para contar el número de repeticiones de la estructura for.

Sigue aprendiendo en El lenguaje de programación iJava (4)