Lewati ke konten

Sintaks dasar

Lenguaje Quetzal utiliza una sintaxis limpia sin punto y coma. Cada instruccion ocupa su propia linea o bloque y las palabras clave estan en espanol.

// Comentario de una linea
/*
Comentario de varias lineas
que puede incluir saltos
de linea.
*/
entero valor = 42 // Comentario al lado del codigo
TipoDescripcionEjemplo
vacioAusencia de valor (solo para funciones)-
enteroNumeros enteros con signoentero edad = 27
numeroValores de punto flotantenumero pi = 3.14159
textoCadenas Unicodetexto saludo = "Hola"
logValores logicoslog activo = verdadero
entero edad = 27
numero temperatura = 22.5
texto mensaje = "Hola"
log activo = verdadero

Las listas se declaran con lista y pueden ser tipadas o no tipadas.

// Lista tipada
lista<entero> numeros = [1, 2, 3]
lista<texto> nombres = ["Ana", "Luis"]
// Lista no tipada (puede contener cualquier tipo)
lista valores = [1, "dos", verdadero]
// Lista vacia
lista<texto> vacia = []

Las listas mutables usan var y permiten metodos como agregar, ordenar o sumar.

lista<texto> var frutas = ["manzana", "naranja"]
frutas.agregar("pera")
consola.mostrar(frutas.texto())
jsn var persona = {
nombre: "Ana",
edad: 30,
activo: verdadero,
direcciones: [
{ tipo: "casa", ciudad: "Guatemala" },
{ tipo: "trabajo", ciudad: "Antigua" }
]
}
texto ciudad = persona.direcciones[0].ciudad
persona.establecer("activo", falso)

Por defecto las variables son inmutables. Para permitir cambios se utiliza la palabra reservada var tras el tipo.

entero contador = 10 // Inmutable (constante)
entero var mutable = 5 // Mutable (variable)
mutable += 1
lista<entero> var datos = [1, 2]
datos.agregar(3)
entero a = 7
entero b = 3
entero suma = a + b // 10
entero resta = a - b // 4
entero producto = a * b // 21
entero cociente = a / b // 2
entero residuo = a % b // 1
entero var valor = 5
valor++ // valor = 6
valor-- // valor = 5
log igual = a == b // falso
log distinto = a != b // verdadero
log mayor = a > b // verdadero
log menor = a < b // falso
log mayor_igual = a >= b // verdadero
log menor_igual = a <= b // falso
log condicion1 = verdadero
log condicion2 = falso
// Operadores en espanol
log conjuncion = condicion1 y condicion2 // falso
log disyuncion = condicion1 o condicion2 // verdadero
log negacion = no condicion1 // falso
// Operadores simbolicos (equivalentes)
log and_result = condicion1 && condicion2 // falso
log or_result = condicion1 || condicion2 // verdadero
log not_result = !condicion1 // falso
entero var total = 10
total += 5 // total = 15
total -= 3 // total = 12
total *= 2 // total = 24
total /= 4 // total = 6
total %= 4 // total = 2
entero edad = 20
texto mensaje = edad >= 18 ? "Mayor de edad" : "Menor de edad"

Las cadenas interpoladas se declaran con el prefijo t y permiten incrustar expresiones dentro de llaves {}.

texto nombre = "Maria"
entero edad = 25
// Interpolacion basica
texto saludo = t"Hola, {nombre}!"
texto info = t"{nombre} tiene {edad} anos"
consola.mostrar(saludo) // "Hola, Maria!"
consola.mostrar(info) // "Maria tiene 25 anos"

Puedes incluir cualquier expresion valida dentro de las llaves:

entero a = 10
entero b = 5
texto operaciones = t"Suma: {a + b}, Resta: {a - b}, Producto: {a * b}"
// "Suma: 15, Resta: 5, Producto: 50"
texto comparacion = t"Es {a} mayor que {b}? {a > b}"
// "Es 10 mayor que 5? verdadero"

La interpolacion convierte automaticamente los valores a texto:

numero precio = 99.99
log disponible = verdadero
lista numeros = [1, 2, 3]
texto producto = t"Precio: ${precio}, Disponible: {disponible}"
texto lista_info = t"Numeros: {numeros}"
jsn datos = { nombre: "Juan", edad: 30 }
texto json_info = t"Datos: {datos}"
texto nombre = "Juan"
entero puntos = 150
texto mensaje = t"Estimado/a {nombre},
Sus {puntos} puntos estan disponibles.
Gracias por usar Quetzal!"
consola.mostrar(mensaje)

Para mostrar llaves literales, usa doble barra invertida:

entero valor = 42
texto con_llaves = t"El valor es {valor} y esto son llaves: \\{literal\\}"
// "El valor es 42 y esto son llaves: {literal}"
texto nombre = "Ana Garcia"
numero saldo = 1234.56
texto recibo = t"Cliente: {nombre}
Saldo: Q{saldo}
Fecha: 2024-01-15"
consola.mostrar(recibo)

Los metodos de consola permiten enviar mensajes y solicitar datos.

consola.mostrar("Mensaje normal")
consola.mostrar_exito("Operacion exitosa")
consola.mostrar_error("Ocurrio un error")
consola.mostrar_advertencia("Advertencia importante")
consola.mostrar_informacion("Informacion util")
texto nombre = consola.pedir("Ingresa tu nombre: ")
consola.mostrar_exito(t"Bienvenido, {nombre}")
// Entrada oculta (para contrasenas)
texto clave = consola.pedir_secreto("Ingresa tu clave: ")

El literal nulo representa la ausencia de valor y puede asignarse a cualquier tipo:

entero valor_nulo = nulo
texto mensaje_nulo = nulo
lista<entero> lista_nula = nulo
jsn json_nulo = nulo

Con estos elementos puedes leer el resto de los fundamentos y construir programas mas complejos.