Variáveis
Declaração com inicialização
Seção intitulada “Declaração com inicialização”A forma padrão de declarar uma variável exige sempre um valor inicial:
<tipo> <nome> = <expressão>;int contador = 0;num temperatura = 36.6;bool ativo = sin;textu mensagem = "Kualeh!";Nomes de variáveis
Seção intitulada “Nomes de variáveis”Um nome de variável começa por uma letra minúscula ou por _, e depois pode ter letras, dígitos e _:
int idadi = 20;int idadi_maxima = 120;int _resto = 1;Começar por maiúscula está reservado para nomes de moldes, por isso int Idadi = 20; é um erro de compilação. Os nomes também distinguem maiúsculas de minúsculas: total e totaL são duas variáveis diferentes.
Variáveis sem valor inicial
Seção intitulada “Variáveis sem valor inicial”O Kriol não tem variáveis por inicializar: toda a declaração leva um valor. Quando só sabes o valor mais tarde, declara a variável com um valor neutro e atribui-lhe depois:
int i = 0;pa i = 0; i < 10; i += 1 { mostra(i);}mostra(i);O valor inicial não pode usar a própria variável, nem quando ela esconde outra com o mesmo nome num bloco exterior:
int x = x + 1; // ERRO: a variável 'x' é usada no seu próprio valor inicial
int y = 1;si sin { int y = y + 1; // ERRO: o 'y' de dentro ainda não tem valor}Variáveis no topo do ficheiro
Seção intitulada “Variáveis no topo do ficheiro”Uma declaração escrita fora de qualquer função cria uma variável visível a todas as funções declaradas depois dela. Serve para valores partilhados por todo o programa e para dados grandes demais para a pilha:
int contador = 0;
fn conta() { contador += 1; // altera a mesma variável que inisiu vê}
fn inisiu() { conta(); conta(); mostran(contador); // 2}O valor inicial pode ser uma expressão qualquer, incluindo uma chamada de função. A ordem no ficheiro conta: usar uma variável de topo declarada mais abaixo é um erro de compilação, ao contrário do que acontece com as funções, que se podem chamar em qualquer ordem.
Tamanho das variáveis locais
Seção intitulada “Tamanho das variáveis locais”As variáveis declaradas dentro de uma função (e os parâmetros) ficam na pilha do programa, por isso cada uma pode ocupar no máximo 1 MiB (1 048 576 bytes). Um valor maior, como um array grande, deve ser declarado fora das funções:
int[200000] grandi = [0; 200000]; // 1,6 MB: fora das funções
fn inisiu() { grandi[0] = 1;}Atribuição
Seção intitulada “Atribuição”Depois de declarada, uma variável pode ser reatribuída com = ou com operadores compostos:
int x = 1;x = 5;x += 2; // x == 7x -= 1; // x == 6x *= 3; // x == 18x -= 9; // x == 9O tipo não muda na atribuição: x = "oi"; numa variável int é um erro de compilação. Vê Conversão de Tipos para saber que valores o compilador aceita converter sozinho.
Âmbito (scope)
Seção intitulada “Âmbito (scope)”As variáveis têm âmbito de bloco { }. Uma variável declarada dentro de um bloco não é acessível fora dele:
fn inisiu() { int a = 10;
si sin { int b = 20; // visível apenas aqui mostran(a); // ok mostran(b); // ok }
// mostran(b); // ERRO: b não existe aqui}Vale também para o pa: a variável declarada na inicialização do ciclo só existe dentro dele.
Um bloco interior pode declarar uma variável com o nome de outra de fora, que fica escondida até ao fim do bloco. É legal, mas raramente é o que queres: se o objectivo era mudar a de fora, escreve n = 99; sem repetir o tipo.
Nomes reservados
Seção intitulada “Nomes reservados”Os seguintes nomes não podem ser usados como identificadores de variáveis:
fn, molda, int, num, bool, textu, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, isize, usize, si, sinon, pa, nkuantu, kebra, kontinua, divolvi, mostra, mostran, toma, sai, konfirma, paniku, tenta, lansa, sin, nau, inpristan
Entre eles, mostra, mostran, toma, sai, konfirma e paniku são as funções embutidas do prelúdio: não são palavras-chave da gramática, mas o compilador não deixa redefini-las. A mensagem é clara quando tentas:
int mostra = 1; // ERRO: 'mostra' é um nome reservado do Kriol // e não pode ser usado como nome de variávelO nome de molde Erru também está reservado, porque o tipo de erro já existe em todos os programas; vê Erros.