El lenguaje de programación iJava (2)

Variables y constantes

Las variables y las constantes nos permiten darle un nombre a un valor y utilizar el nombre en cualquier parte del programa donde podríamos utilizar el valor. Como ambas guardan valores y hay valores de diferentes tipos es necesario indicar de qué tipo serán los valores que guardarán.

Para crear una variable escribiremos el nombre del tipo seguido del nombre que queremos que tenga la variable y tras un símbolo = el valor que queramos que tenga dicha variable. Los dos tipos que hemos estado manejando hasta el momento son enteros y reales. Para crear una variable de tipo entera usaremos como tipo int y para crear una variable que guarde valores reales usaremos double.

void main() {
	// Declaramos una variable para guardar la altura
	double altura = 2.5;
	// Declaramos una variable para guardar el número de ruedas
	int ruedas = 4;
	// Calculo el área de un rectángulo de base 3 metros y altura 2.5 metros
	println(altura * 3.0);
	// Calculo lo que cuesta cambiar las cuatro ruedas si una vale 150€
	println(ruedas * 150);
}

Las constantes se crean de igual forma pero escribiendo la palabra final al principio. En el siguiente ejemplo declaramos la constante GRAVEDAD que representa la fuerza de gravedad en la tierra. Normalmente el nombre de las constantes se pone con todas las letras en mayúsculas.

void main() {
	// Declaramos una constante
	final double GRAVEDAD = 9.8;
	// Variable con la altura en metros del objeto
	double altura = 10;
	// Cálculo del tiempo que tarda en caer
	double tiempo = sqrt(2.0*altura/GRAVEDAD);
	println(tiempo);
}

En el programa anterior hemos creado nuestra propia constante pero iJava también tiene algunas constantes predefinidas como PI y E. El siguiente programa utiliza dicha constante para calcular la altura de un triángulo rectángulo conociendo la hipotenusa y el ángulo opuesto.

void main() {
	double hipotenusa = 10;
	double angulo = PI/6.0;
	double altura = hipotenusa * sin(angulo);
	println(altura);
}

La diferencia principal entre una constante y una variable es que las variables pueden cambiar de valor durante la ejecución del programa. Para modificar el valor de una variable usaremos la instrucción de asignación que consiste en indicar el nombre de la variable, un símbolo =, el valor que queremos que tome la variable y, como siempre, acabar la instrucción con un punto y coma. Por ejemplo, en el siguiente programa usamos la misma variable dos veces, pero cada vez tiene un valor distinto porque, entre medias, lo hemos modificado con una instrucción de asignación.

void main() {
	// Declaramos una variable para guardar la altura
	double altura = 2.5;
	// Declaramos una variable para guardar la anchura
	double anchura = 3.0;
	// Mostramos el área del rectángulo
	println(anchura * altura);
	// Modificamos la altura
	altura = 5.0;
	// Mostramos el área del rectángulo otra vez
	println(anchura * altura);
	// Modificamos la anchura
	anchura = altura * 2;
	// Mostramos el área del rectángulo otra vez
	println(anchura * altura);	
}

Como se ve en el ejemplo anterior, el valor que se le da a una variable puede ser un literal, es decir, un valor escrito directamente como el 5 que se asigna a altura en el ejemplo anterior, o puede ser el resultado de una operación, como en el caso de la asignación que se hace a anchura que será el resultado de multiplicar el valor de altura (5 en este caso) por 2. En este último caso es posible utilizar la misma variable cuyo valor pretendemos modificar ya que el valor que se usará para hacer el cálculo será el que tenga hasta ese momento.

Además también es posible aumentar o reducir en una unidad el valor de una variable de tipo entero o real usando los operadores ++ y --. Por ejemplo, para aumentar en uno una variable llamada a de tipo entero escribiríamos a++;. Sin embargo el código resulta más fácil de entender si se usa la fórmula de asignación normal equivalente, es decir a = a + 1 o a = a - 1 para reducir el valor.

Funciones para pedir datos

Para que nuestros programas pidan al usuario que introduzca un dato podemos usar las siguientes funciones de biblioteca. Las siguientes son las funciones que nos permiten pedir al usuario números enteros o reales.

Las dos primeras funciones nos sirven para pedir al usuario un número ya sea entero o real. Las dos siguientes nos permiten preguntar al usuario por una letra y por un texto respectivamente. Hasta el momento sólo hemos utilizado dos tipos de datos de los que tiene iJava, aquí vemos otros dos tipos: char y String. El primero representa caracteres y el segundo representa texto. Podemos crear variables de ambos tipos y almacenar en las de tipo char una única letra y en las de tipo String un texto completo. Observa el siguiente programa.

void main() {
	char letra = readChar("Escribe una letra");
	println(letra);
	String nombre = readString("Escribe tu nombre");
	String mensaje = "Hola, " + nombre + " el programa ha terminado";
	println(mensaje);	
}

Fíjate bien como podemos concatenar texto usando el símbolo +. Esto nos permite hacer que los mensajes incluyan valores calculados o solicitados al usuario y hace que nuestros programas sean más interesantes. Observa también que es importante escribir el tipo String usando con la primera letra en mayúscula, de no hacerlo el programa contendrá un error.

Funciones propias

Además de utilizar funciones que ya incluye iJava es posible escribir nuestras propias funciones. Nuestras funciones serán un trozo de código al que le daremos un nombre y unos parámetros y que podremos utilizar en el resto de nuestro programa. Por ejemplo, para escribir una función llamada estrella haremos lo siguiente.

void estrella() {
	triangle(160,100, 220,200, 100,200);
	triangle(160,220, 220,130, 100,130);
}

void main() {
	estrella();
}

Como puedes ver el código asociado a la función estrella se escribe dentro de dos llaves y la función estrella va precedida de la palabra clave void que es la misma que usamos para definir la función principal o función main. La función estrella tal y como la hemos escrito siempre dibuja la estrella en el mismo sitio. Si quisiéramos que cada vez la dibujara en una posición diferente podemos añadir un par de variables que representen las coordenadas del centro y en lugar de usar valores literales para las coordenadas de los dos triángulos que dibujan la estrella calcular dichas posiciones en relación al centro de la estrella. El siguiente programa muestra cómo hacer lo que acabamos de contar.

void estrella() {
	int x = round(random(320));
	int y = round(random(320));
	triangle(x,y-60, x+60,y+40, x-60,y+40);
	triangle(x,y+60, x+60,y-30, x-60,y-30);
}

void main() {
	estrella();
}

Además, podemos poner parámetros a nuestras funciones escribiendo entre los paréntesis la lista de nombres que queremos que tengan así como el tipo de cada uno. Dichos nombre actuarán como variables dentro de la propia función y su valor será el que se haya puesto al usar la función en otra parte del programa. Por ejemplo, para poner como parámetros las dos coordenadas que representan el centro de la estrella haremos lo siguiente.

void estrella(double x, double y) {
	triangle(x,y-60, x+60,y+40, x-60,y+40);
	triangle(x,y+60, x+60,y-30, x-60,y-30);
}
	
void main() {
	estrella(80, 80);
	estrella(250,90);
	estrella(160,250);
}

Podemos escribir funciones que no devuelven ningún valor sino que realizan alguna tarea cuyo resultado aparece en la pantalla en forma de dibujo o texto como la función estrella que acabamos de escribir. Y también es posible escribir funciones que como sin o cos realizan un cálculo y devuelven un valor que podemos utilizar en una expresión. En este caso es necesario indicar en lugar de void el tipo que devolverá la función e incluir una instrucción llamada return dentro de la función que se encargue de hacer que la función termine y se haga la devolución del valor. Por ejemplo, una función que calcule el cuadrado de un número la escribiremos así

double cuadrado(double x) {
	return x * x;
}
	
void main() {
	double y = cuadrado(4);
	println(y);
	println(cuadrado(8));
}

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