Variables y constantes
Declaración de variables
Las variables se utilizan para almacenar valores. El tipo de datos de una variable se determina automáticamente en función del valor asignado a ella. Por lo tanto, las variables en JARU pueden almacenar valores de diferentes tipos, como enteros, decimales, cadenas de texto, listas, mapas, arrays, etc.
La palabra clave var en JARU es utilizada para la declaración de variables. Esta es una de las formas de crear una variable en el lenguaje, junto con const.
Cuando se utiliza var para declarar una variable, esta solo existe dentro del bloque en el que se declara: el cuerpo de una función, de un if, de un for, de un while, etc. Esto vale también fuera de las funciones: una variable declarada dentro de un if no existe después de su end (usarla da el error Undefined variable al ejecutar). Si se declara fuera de cualquier función y de cualquier bloque, se considera una variable global y se puede usar desde cualquier parte del código.
La declaración de una variable con var se realiza de la siguiente manera:
var variable = 5
En este ejemplo, se ha declarado la variable variable y se le ha asignado el valor 5. Para asignar un valor a una variable, se utiliza el símbolo = seguido del valor que se quiere asignar.
También es posible declarar una variable con var sin asignarle un valor inicial. En este caso, su valor será 0.
var variable
print(variable) // Imprime "0"
Como ya se ha visto, en JARU las variables adquieren automáticamente el tipo al asignarles un valor. Es decir, no es necesario especificar el tipo de variable en el momento de declararla.
Veamos unos ejemplos:
// Declarar una variable con un número
var numero = 5
// Declarar una variable con una cadena de texto
var nombre = "Juan"
// Declarar una variable con una lista
var lista = ["manzana", "pera", "plátano"]
// Declarar una variable con un mapa
var mapa = {"nombre": "Juan", "edad": 25}
// Declarar una variable con un array vacío
var array[10][20]
Las claves de texto de un mapa van entre comillas: en {nombre: "Juan"}, nombre se toma como una variable y la clave es su valor.
Nombres
Los nombres de las variables, las constantes, las funciones y las clases:
- Usan solo letras sin tilde, cifras y
_, y no empiezan por una cifra:vidas,_temp,nivel2,MAX_VIDAS. - Distinguen mayúsculas y minúsculas:
vidasyVidasson dos variables distintas. Las palabras del lenguaje van siempre en minúsculas (if,end,var). - No pueden ser una palabra reservada (
end,type,on,ref...), y una variable tampoco puede llamarse como una función de la librería estándar (time,len,print,random...).
Las letras con tilde y la eñe no valen en un nombre, aunque sí dentro de las cadenas y de los comentarios. El compilador da el error «Unrecognised character in source code»: escribe tamano, o el nombre en inglés.
var tamaño = 5
var time = 0 // time es una función de la librería estándar
Tampoco llames a una variable global como un módulo (Display, Math, Sprite...): compila, pero el programa la toma por el módulo y se para al usarla, con «Module 'Math' not found or not imported.».
Una función, en cambio, sí puede llamarse como una de la librería estándar, y la tapa en todo el programa, también en los ficheros importados: después de func len(x) … end, len(...) llama a la tuya (hasta que el programa llega a esa línea, sigue siendo la de la librería). El compilador lo avisa («function 'len' has the same name as a native function»), pero compila. Ponle otro nombre. Un método sí puede llamarse así (def len() en una clase): se usa con el objeto delante y no tapa nada.
Constantes
La palabra clave const se utiliza para declarar una variable como constante. Esto significa que el valor de la variable no puede ser cambiado una vez que se ha asignado. El compilador generará un error si se intenta cambiar el valor de una variable declarada como const. Esto es útil para garantizar la inmutabilidad de valores importantes en un programa y para prevenir errores accidentales.
En JARU, las constantes se declaran usando la palabra clave const al comienzo de la declaración. Una vez que se ha asignado un valor a una constante, no se puede cambiar. Si se intenta asignar un nuevo valor a una constante, se generará un error al compilar.
const miPI = 3.14
print(miPI)
miPI = 3.15 // genera un error
Si una constante se refiere a un objeto, una lista, un mapa o un array, no se podrá cambiar el valor de esa constante, pero sí los valores que hay dentro del objeto, la lista, el mapa o el array.
const persona = { "nombre": "Jon" }
println(persona["nombre"]) // muestra "Jon" con un salto de línea
persona["nombre"] = "Raquel" // asignación correcta
persona = { "nombre": "Steve" } // genera un error al ser una constante
El valor de una constante no puede ser cambiado una vez asignado, pero si la constante es un objeto o un array, se pueden cambiar los valores que hay dentro de ese objeto o array.
Enumerados (enum)
enum da nombre a un grupo de valores fijos: los estados de un personaje, las direcciones, los tipos de enemigo...
enum Estado
PARADO, ANDANDO, SALTANDO
end
var estado = Estado.ANDANDO
println(estado) // 1
if (estado == Estado.ANDANDO) then
println("Está andando") // Está andando
end
- Cada nombre vale su posición, empezando por 0:
PARADOvale 0,ANDANDO1 ySALTANDO2. - Se usan con el nombre del enumerado delante:
Estado.SALTANDO. - Los nombres van separados por comas o en líneas distintas. Uno corto cabe en una línea:
enum Lado IZQUIERDA, DERECHA end. - Con
=, un nombre toma el valor que le des, también una cadena:
enum Nota
DO = "C", RE = "D", MI = "E"
end
println(Nota.RE) // D
- Detrás de un nombre con un número, la cuenta sigue desde ese número: con
ROJO, VERDE = 5, AZUL,AZULvale 6, y conA = -1, B,Bvale 0. La cuenta no baja nunca: conA, B, C = 0, D,Dvale 2. - Sus valores no se pueden cambiar:
Estado.PARADO = 5para el programa con el error «Properties can only be assigned to instances, modules, and abstract objects». - Un nombre que no está en el enumerado, como
Estado.CORRIENDO, compila, pero el programa se para al llegar ahí: «'Estado' enum has no property: 'CORRIENDO'.». - Un nombre repetido no compila: con
enum Lado IZQUIERDA, DERECHA, IZQUIERDA end, el error dice «the enum 'Lado' repeats the name 'IZQUIERDA'». foreachno recorre un enumerado: el programa se para con «Object is not iterable.».- Van bien en un switch, con
case Estado.SALTANDO:.
Todos los problemas conocidos de JARU, juntos, están en Problemas conocidos.