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.
Comentarios
Sección titulada «Comentarios»// Comentario de una linea
/* Comentario de varias lineas que puede incluir saltos de linea.*/
entero valor = 42 // Comentario al lado del codigoTipos primitivos
Sección titulada «Tipos primitivos»| Tipo | Descripcion | Ejemplo |
|---|---|---|
vacio | Ausencia de valor (solo para funciones) | - |
entero | Numeros enteros con signo | entero edad = 27 |
numero | Valores de punto flotante | numero pi = 3.14159 |
texto | Cadenas Unicode | texto saludo = "Hola" |
log | Valores logicos | log activo = verdadero |
entero edad = 27numero temperatura = 22.5texto mensaje = "Hola"log activo = verdaderoLas listas se declaran con lista y pueden ser tipadas o no tipadas.
// Lista tipadalista<entero> numeros = [1, 2, 3]lista<texto> nombres = ["Ana", "Luis"]
// Lista no tipada (puede contener cualquier tipo)lista valores = [1, "dos", verdadero]
// Lista vacialista<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())Valores JSON (jsn)
Sección titulada «Valores JSON (jsn)»jsn var persona = { nombre: "Ana", edad: 30, activo: verdadero, direcciones: [ { tipo: "casa", ciudad: "Guatemala" }, { tipo: "trabajo", ciudad: "Antigua" } ]}
texto ciudad = persona.direcciones[0].ciudadpersona.establecer("activo", falso)Variables y mutabilidad
Sección titulada «Variables y mutabilidad»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)Operadores
Sección titulada «Operadores»Aritmeticos
Sección titulada «Aritmeticos»entero a = 7entero b = 3
entero suma = a + b // 10entero resta = a - b // 4entero producto = a * b // 21entero cociente = a / b // 2entero residuo = a % b // 1Incremento y decremento
Sección titulada «Incremento y decremento»entero var valor = 5
valor++ // valor = 6valor-- // valor = 5Comparacion
Sección titulada «Comparacion»log igual = a == b // falsolog distinto = a != b // verdaderolog mayor = a > b // verdaderolog menor = a < b // falsolog mayor_igual = a >= b // verdaderolog menor_igual = a <= b // falsoLogicos
Sección titulada «Logicos»log condicion1 = verdaderolog condicion2 = falso
// Operadores en espanollog conjuncion = condicion1 y condicion2 // falsolog disyuncion = condicion1 o condicion2 // verdaderolog negacion = no condicion1 // falso
// Operadores simbolicos (equivalentes)log and_result = condicion1 && condicion2 // falsolog or_result = condicion1 || condicion2 // verdaderolog not_result = !condicion1 // falsoAsignacion compuesta
Sección titulada «Asignacion compuesta»entero var total = 10
total += 5 // total = 15total -= 3 // total = 12total *= 2 // total = 24total /= 4 // total = 6total %= 4 // total = 2Operador ternario
Sección titulada «Operador ternario»entero edad = 20texto mensaje = edad >= 18 ? "Mayor de edad" : "Menor de edad"Interpolacion de texto
Sección titulada «Interpolacion de texto»Las cadenas interpoladas se declaran con el prefijo t y permiten incrustar expresiones dentro de llaves {}.
Sintaxis basica
Sección titulada «Sintaxis basica»texto nombre = "Maria"entero edad = 25
// Interpolacion basicatexto saludo = t"Hola, {nombre}!"texto info = t"{nombre} tiene {edad} anos"
consola.mostrar(saludo) // "Hola, Maria!"consola.mostrar(info) // "Maria tiene 25 anos"Con expresiones
Sección titulada «Con expresiones»Puedes incluir cualquier expresion valida dentro de las llaves:
entero a = 10entero 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"Con diferentes tipos
Sección titulada «Con diferentes tipos»La interpolacion convierte automaticamente los valores a texto:
numero precio = 99.99log disponible = verdaderolista 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}"Interpolacion multilinea
Sección titulada «Interpolacion multilinea»texto nombre = "Juan"entero puntos = 150
texto mensaje = t"Estimado/a {nombre},Sus {puntos} puntos estan disponibles.Gracias por usar Quetzal!"
consola.mostrar(mensaje)Escapar llaves
Sección titulada «Escapar llaves»Para mostrar llaves literales, usa doble barra invertida:
entero valor = 42texto con_llaves = t"El valor es {valor} y esto son llaves: \\{literal\\}"// "El valor es 42 y esto son llaves: {literal}"Ejemplos practicos
Sección titulada «Ejemplos practicos»texto nombre = "Ana Garcia"numero saldo = 1234.56
texto recibo = t"Cliente: {nombre}Saldo: Q{saldo}Fecha: 2024-01-15"
consola.mostrar(recibo)numero radio = 5numero pi = 3.14159
numero area = pi * radio * radionumero perimetro = 2 * pi * radio
consola.mostrar(t"Radio: {radio}")consola.mostrar(t"Area: {area}")consola.mostrar(t"Perimetro: {perimetro}")entero edad = 17
texto estado = t"Estado: {edad >= 18 ? 'Mayor' : 'Menor'} de edad"consola.mostrar(estado)Entrada y salida basica
Sección titulada «Entrada y salida basica»Los metodos de consola permiten enviar mensajes y solicitar datos.
Mostrar mensajes
Sección titulada «Mostrar mensajes»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")Solicitar entrada
Sección titulada «Solicitar entrada»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: ")Valor nulo
Sección titulada «Valor nulo»El literal nulo representa la ausencia de valor y puede asignarse a cualquier tipo:
entero valor_nulo = nulotexto mensaje_nulo = nulolista<entero> lista_nula = nulojsn json_nulo = nuloCon estos elementos puedes leer el resto de los fundamentos y construir programas mas complejos.