Contenedores de datos
Un contenedor de datos (data container) es un recipiente para almacenar algo. Se distingue entre variables y constantes.
Variables
Una variable es un contenedor de datos que puede cambiar su valor almacenado en cualquier momento.
Para definir variables, se usa la sentencia var
:
#una única variable
var nombre [= valor]
#varias de una vez
var nombre [= valor], nombre [= valor]...
var (
nombre [= valor]
nombre [= valor]
...
)
Cuando no se indica ningún valor explícitamente, se inicializan a nil
.
Ejemplos:
var x, y = 123, z = "ciao mondo!"
var (
x
y
z = "ciao mondo!"
)
Constantes
Una constante (constant) es un contenedor que no permite modificar su valor.
Por esta razón, deben inicializarse siempre.
Se definen mediante la sentencia const
:
#una única constante
const nombre = valor
#varias de una vez
const nombre = valor, nombre = valor...
const (
nombre = valor
nombre = valor
...
)
Ejemplos:
const x = 1, y = 2, z = 3
const (
x = 1
y = 2
z = 3
)
También es posible definir constantes con la sentencia var
.
En este caso, se utiliza el operador ::=
en vez de =
.
Ejemplo:
var x = 1, y ::= 2
#es similar a
var x = 1
const y = 2
Identificadores
Un identificador (identifier) es una palabra que identifica una cosa. Se distingue entre nombres y palabras reservadas. Un nombre (name) es aquel que identifica una función, un tipo, una variable, etc. Mientras que una palabra clave (keyword) es aquel reservado por el lenguaje y que, en principio, no puede utilizarse como nombre.
Los identificadores deben comenzar por un subrayado o una letra, seguido de cero, uno o más caracteres (letras, dígitos o subrayados). He aquí unos ejemplos ilustrativos:
x
_x
x123
x_12_34
Las palabras reservadas del lenguaje son:
and as async await
break
cast catch const copy cwait
defer do dogma
each else emit end enum export extern
false finally fn for from
if impl in intf intl is
like
native new next nil nop not
or
pawait pcwait peval pr proc pub pvt pwait
return
self static struct super
then throw true type
until use
var
while with
yield
Si se desea, se puede utilizar palabras reservadas como nombres, pero deben delimitarse por comillas simples ('
).
Ejemplo:
'var'
Aunque si la palabra reservada está precedida por los operadores .
, :
o !
, automáticamente se considerará como nombre sin necesidad de delimitarla por comillas simples.
Esto facilita tener cosas como:
cx.open({
host = "localhost"
port = 6379
}).then(
...
)
#en lugar de:
cx.open({
host = "localhost"
port = 6379
}).'then'(
...
)
Comentarios
Un comentario es un texto usado principalmente para explicar algo.
En Dogma, los comentarios comienzan por una almohadilla (#
):
#esto es un comentario hasta fin de línea
#[esto es un comentario delimitado por corchetes
que puede expandirse en varias líneas
si así lo deseamos]
Observe que cuando un comentario comienza por #[
se cierra con ]
.
Así se permite los comentarios multilínea o in-line.
Comentarios de documentación
Un comentario de documentación (doc comment) se utiliza para describir detalladamente un objeto como, p.ej., un tipo o una función. Se puede usar cualquiera de las siguientes sintaxis:
/**
* comentario
*/
### comentario