Introducción a Wollok
Archivos Wollok
Wollok tiene actualmente estos tipos de archivo, cada uno representa un concepto diferente:
- un Programa Wollok (.wpgm)
- un Módulo o Biblioteca Wollok (.wlk)
- un Test Wollok (.wtest)
En las siguientes secciones se explicarán más en detalle.
Programas Wollok
Un programa es una pieza de código ejecutable que consiste en una serie de expresiones que serán evaluadas en forma secuencial. Se puede pensar como el punto de entrada principal (o main) de un programa en otros lenguajes.
Por ejemplo:
program helloWorld { console.println("Hola mundo")}
Este programa simplemente escribe “Hola mundo” en la consola. Las secciones siguientes explicarán cómo entender cada una de las partes que componen la expresión “console.println(…)”. Por el momento, se puede pensar como una instrucción de alto nivel que está disponible en cualquier programa.
Referencias variables y constantes
En Wollok existen dos tipos de referencias posibles: variables y constantes.
Una variable es una referencia cuyo valor puede cambiar en cualquier momento. Lo que cambia no es el objeto en sí, sino a qué objeto estoy apuntando con mi referencia.
var edad = 10edad = 11edad = edad + 1
Una constante es una referencia que siempre apunta al mismo objeto, por lo tanto es necesario definir el objeto apuntado en el momento de inicializar la referencia. No es una operación válida tratar de cambiar la referencia para apuntar a otro objeto.
Lo que es constante no es el objeto apuntado (que puede cambiar su estado interno) sino la referencia.
const edadAdulta = 21
edadAdulta = 18 // ¡ ESTO NO COMPILA !
Comentarios
Hay tres tipos de comentarios
- comentarios de una sola línea utilizan la doble barra (//)
- comentarios que ocupan muchas líneas comienzan con /* y terminan con */
- comentarios “wollok-docs” comienzan con /** y terminan con */. Los veremos más adelantes
Ejemplos:
const edadAdulta = 21 // comentario de una sola línea
/* comentario de muchas líneas */edadAdulta = 18
Objetos basicos
Existen objetos básicos que vienen con la distribución de Wollok.
Numeros
Los números entienden una gran variedad de mensajes, como las operaciones matemáticas para sumar, restar, etc. Son objetos inmutables, esto quiere decir que
- su estado interno no cambia
- por ejemplo, la suma de 1 + 2 resulta en un nuevo número que representa al 3.
const a = 1var b = a + 10 // sumab = b - 1 // restab = b * 2 // multiplicaciónb = b / 2 // divisiónb = b % 2 // restob = b ** 3 // elevado al cubo5.between(2, 7) // preguntamos si 5 está entre 2 y 7 ==> sí3.min(6) // el menor número entre 3 y 6 ==> 33.max(6) // el mayor número entre 3 y 6 ==> 6(3.1416).truncate(0) // la parte entera de 3.1416 ==> 3 -- (3.1416).truncate(2) = 3.14(3.1416).roundUp(0) // el primer entero mayor a 3.1416 ==> 4 -- (3.1416).roundUp(2) = 3.15
Además, Wollok soporta operadores sufijos así como también la operación += entre otras tantas variantes, que son shortcuts de otras expresiones.
b += 2 // b = b + 2b -= 1 // b = b - 1b *= 3 // b = b * 3b %= 2 // b = b % 2b /= 2 // b = b / 2
Booleanos
Hay dos objetos booleanos representados con los literales true y false. Son objetos inmutables, la expresión true || false
devuelve un nuevo objeto true.
const hecho = true and trueconst esTrue = trueconst esFalse = false
const seraFalse = esTrue and esFalse
const seraTrue = esTrue or esFalse
const seraTrue = not false
Para aquellos que estén acostumbrados a los operadores con símbolos pueden usar esta otra sintaxis:
- and:
a && b
- or:
a || b
- not:
!a
Todas las operaciones de igualdad y comparación retornan objetos booleanos.
Strings
Las cadenas de caracteres se delimitan con una o dos comillas.
const unString = "hola"const otroString = 'mundo'
También son objetos inmutables (al concatenar “hola” y “mundo” tenemos un nuevo String “holamundo”).
const holaMundo = unString + " " + otroString + "!" // "hola mundo!"
Fechas
Una fecha es un objeto inmutable que representa un día, mes y año (sin horas ni minutos). Se crean de dos maneras posibles:
const hoy = new Date() // toma la fecha del díaconst unDiaCualquiera = new Date(day = 30, month = 6, year = 1973) // se ingresa en formato día, mes y año
Algunas operaciones que podemos hacer con las fechas son:
const hoy = new Date()hoy.plusYears(1) // nueva fecha un año posteriorhoy.plusMonths(2) // nueva fecha 2 meses despuéshoy.plusDays(20) // nueva fecha 20 días después.hoy.isLeapYear() // si el año es bisiestohoy.dayOfWeek() // el día de la semana: monday, tuesday, etc.hoy.month() // el número de meshoy.day() // el número de díahoy.year() // el añoconst ayer = hoy.minusDays(1) //se resta un día para obtener el día de ayerayer < hoy // comparación de fechas => trueconst haceUnMes = hoy.minusMonths(1)ayer.between(haceUnMes, hoy) // ayer está entre hace un mes y hoy => trueayer - hoy // diferencia en días entre ayer y hoy (en absoluto) => 1
Comparar objetos iguales
Las siguientes expresiones comparan si dos objetos son iguales resultan en valores booleanos:
const uno = 1const dos = 2
const esFalso = (uno == dos)
const esVerdadero = uno == 1
const esVerdadero = (uno != dos)
- == nos dice cuándo dos objetos son iguales
- != nos dice cuándo dos objetos no son iguales
Luego de introducir objetos y clases repasaremos este concepto.
Comparar objetos en general
También tenemos otras expresiones que permiten comparar objetos (por lo general números, pero también Strings y fechas)
const esCierto = 23 < 24 // menor queconst esCierto = 23 <= 24 // menor o igual queconst esCierto = 24 > 10 // mayor queconst esCierto = 24 >= 10 // mayor o igual que