Slide 6 de 74

Variáveis

Declarando
proc main(): void {
	x := 1                        // inferido, imutável
	mut count := 0                // inferido, reatribuível
	mut Str[dyn] rows = []        // escrito: um vetor vazio não diz nada sozinho
	MAX := 100                    // imutável, e grafado como uma constante

	count = count + 1
	append(rows, "first")
	echo "{x} {count} {rows} {MAX}"
}
Um nome por bloco
proc main(): void {
	mut total := 10
	// total := 20        // erro de compilação: `total` já foi declarado neste bloco
	total = 20            // uma atribuição, que é o que aquela linha queria dizer

	_ := total * 2        // descartado, de propósito
	_ := total + 1        // e de novo: `_` nunca é declarado
	echo total
}

x := valor declara uma variável e infere o tipo dela a partir do valor, incluindo o tamanho de um vetor. Tipo x = valor escreve o tipo explicitamente, que é como um valor que não diz nada sobre a própria forma — um vetor vazio, um mapa novo — ganha uma, e a única forma de dizer [dyn]: um tamanho lido do valor é um tamanho do mesmo jeito, e só um vetor declarado [dyn] pode crescer — o append, abaixo, é como.

Uma variável é imutável a menos que seja declarada mut. Uma imutável não pode ser reatribuída nem escrita por dentro (v[0] = …, u.name = …), qualquer que seja a grafia: UPPER_CASE é uma convenção para esse tipo de variável, e quem decide é o mut.

Um nome é declarado uma vez por bloco. Declará-lo de novo no mesmo bloco é um erro de compilação — atribua a ele em vez disso — enquanto um bloco interno pode declarar o seu próprio, que esconde o de fora até o bloco interno terminar. _ := valor descarta um valor, quantas vezes você quiser.