-
Notifications
You must be signed in to change notification settings - Fork 21
Estruturas de dados elementares
Também chamadas de primitivas. São as estruturas mais básicas de Delégua.
Variáveis são as primeiras estruturas de dados que todo programador aprende. São caracterizadas por ter um nome e armazenar um valor em memória.
São declaradas com variavel
, variável
ou simplesmente var
.
variavel variavel1 = "1"; // Aqui declaro uma variável chamada `variavel1`, um texto, cujo valor é "1".
Variáveis podem ter seus valores alterados a qualquer momento do código.
var a = "1";
a = "2";
escreva(a); // escreve 2 na saída
Constantes também armazenam um valor em memória, mas este valor não pode ser modificado até a finalização da execução.
São declaradas com constante
, fixo
ou simplesmente const
.
const a = "1";
a = "2"; // Erro
Delégua suporta atribuição múltipla de variáveis, ou seja, várias variáveis podem ser declaradas na mesma linha:
var a, b, c = "1", 2, "Olá Mundo";
escreva(a, b, c); // escreve na saída -> 1 2 Olá Mundo
O mesmo suporte existe para constantes.
const g, h, i = 10, "Olá Mundo", 15;
escreva(g, h, i); // escreve na saída -> 10 Olá Mundo 15
A quantidade de identificadores a esquerda tem que ser igual a quantidade de valores à direita, caso contrário é gerado erro na declaração das variáveis.
Literais são todas e quaisquer construções que representam valores fixos no código. Por exemplo, números e textos são literais. Há outros exemplos, como vetores e dicionários, mencionados em suas respectivas seções.
Delégua trabalha com os seguintes tipos de dados:
Normalmente Delégua infere o tipo de uma variável ou constante, mas o tipo pode ser também explicitamente informado se assim for necessário:
var t: texto = "Variável com tipo"
O suporte a tipos explícitos foi implementado na versão 0.22.0.
Variáveis do tipo texto são expressas com " "
ou ' '
.
var texto = "abc";
var texto2 = 'abc';
var texto3: texto = 'abc';
Por definição, variáveis e literais do tipo texto são vetores, ou seja, podem ter seus elementos acessados por um índice, que pode ser positivo ou negativo. Se positivo, a busca pelo valor é feita da esquerda para a direita (do primeiro elemento até o último). Se negativo, a busca é feita da direita para a esquerda (do último elemento até o primeiro):
escreva("abc"[0]); // a
escreva(texto[-1]); // c
Caso a posição não exista, a linguagem devolverá um erro de execução.
Delégua suporta interpolação de texto, ou seja, quando um texto possui em seu conteúdo algo como ${minha_variavel}
, e se minha_variável
foi definida anteriormente, o novo texto terá o valor de minha_variavel
.
Exemplo:
var minha_variavel = "Strogonoff"
escreva("Eu gosto de ${minha_variavel}") // Escreverá "Eu gosto de Strogonoff"
Todos os métodos de texto podem ser acessados colocando um ponto ao final da variável, constante ou literal de texto.
var t = " meu texto com espaços no início e no fim "
escreva("|" + t.aparar() + "|") // "|meu texto com espaços no início e no fim|"
var t = " meu texto com espaços no início e no fim "
escreva("|" + t.apararFim() + "|") // "| meu texto com espaços no início e no fim|"
var t = " meu texto com espaços no início e no fim "
escreva("|" + t.apararInicio() + "|") // "|meu texto com espaços no início e no fim |"
var t1 = "um"
var t2 = "dois três"
escreva(t1.concatenar(t2)) // "umdois três"
var t = "um dois três"
t.dividir(' ') // ['um','dois','três']
var t = "Um dois três quatro"
t.fatiar() // "um dois três quatro", ou seja, não faz coisa alguma.
t.fatiar(2, 7) // "dois"
t.fatiar(8, 12) // "três"
t.fatiar(8) // "três quatro", ou seja, seleciona tudo da posição 8 até o final do texto.
var t = "um dois três"
t.inclui("dois") // verdadeiro
t.inclui("quatro") // falso
var t = "tudo em minúsculo"
escreva(t.maiusculo()) // Imprimirá "TUDO EM MINÚSCULO"
var t = "TUDO EM MAIÚSCULO"
escreva(t.minusculo()) // Imprimirá "tudo em maiúsculo"
var t = "Eu gosto de caju"
t.substituir("caju", "graviola") // Resultado será "Eu gosto de graviola"
var t = "Eu gosto de caju e de graviola"
t.subtexto(3, 16) // Resultado será "gosto de caju"
var t = "Um dois três quatro"
t.tamanho() // 19
Números são inteiros ou de ponto flutuante (com parte decimal). Por padrão, todos os números são armazenados como ponto flutuante.
var numeroInteiro = 3;
var numeroFlutuante = 8.5;
Todos os métodos de número podem ser acessados colocando um ponto ao final da variável, constante ou literal de número.
var valor = 5.7
escreva(valor.arredondarParaBaixo()) // 5
var valor = 2.5
escreva(valor.arredondarParaCima()) // 3
Vetores são variáveis com capacidade de armazenar 0 ou mais valores. São úteis em ocasiões em que é necessário executar uma lógica com múltiplos valores.
A declaração de um vetor é semelhante a uma variável simples, com a diferença de que um número de valores deve ser informado entre colchetes, após o nome da variável.
Vetores são declarados com []
e seus elementos são separados por ,
.
var vetor = [1, "2"]
var vetorVazio = []
escreva([1, "2"][0]) // retorna 1
escreva(vetor[2]) // retorna erro por índice solicitado ser maior que o tamanho do vetor
Vetores podem ter valores de diferentes tipos:
var vetor = [1, "2"]
vetor[1] = 3
escreva(vetor) // retorna [1, 3]
Vetores aumentam de tamanho dinamicamente, se necessário:
var vetor = [1, "2"]
vetor[2] = 3
escreva(vetor) // retorna [1, 2, 3]
Caso uma nova posição no vetor seja maior que o tamanho, todas as posições entre o último elemento anterior e o novo último elemento são preenchidas com nulo
:
var vetor = [1, "2"]
vetor[3] = 3
escreva(vetor) // retorna [1, 2, nulo, 3]
O índice usado para acessar um elemento de um vetor pode ser número inteiro zero, positivo ou negativo. Se for zero ou positivo, a posição a ser acessada conta a partir do primeiro elemento do vetor. Caso seja negativo, a posição a ser acessada conta a partir do último elemento do vetor.
var texto = "abc"
var texto2 = 'abc'
escreva("abc"[0]) // a
escreva(texto[-1]) // c
var v = []
v.adicionar(7)
v.adicionar(5)
v.adicionar(3)
escreva(v) // [7, 5, 3]
var v = [7, 5, 3]
escreva(v.concatenar([1, 2, 4])) // [7, 5, 3, 1, 2, 4]
var v = []
v.empilhar(7)
v.empilhar(5)
v.empilhar(3)
escreva(v) // [7, 5, 3]
var v = [1, 2, 3, 4, 5]
escreva(v.fatiar()) // "[1, 2, 3, 4, 5]", ou seja, não faz coisa alguma.
escreva(v.fatiar(2, 4)) // "[3, 4]"
escreva(v.fatiar(2)) // "[3, 4, 5]", ou seja, seleciona tudo da posição 3 até o final do vetor.
var listaDeIdades = [91, 32, 15, 44, 12, 18, 101];
funcao checarIdade(idade) {
retorna(idade >= 18);
}
escreva(filtrarPor(listaDeIdades, checarIdade)) // [91, 32, 44, 18, 101]
var v = [1, 2, 3]
escreva(v.inclui(2)) // verdadeiro
escreva(v.inclui(4)) // falso
var v = [1, 2, 3]
escreva(v.inverter()) // [3, 2, 1]
A ordenação padrão é ascendente, ou seja, para o caso de números, a ordem fica do menor para o maior.
var v = [4, 2, 12, 5]
escreva(v.ordenar()) // [2, 4, 5, 12]
Para o caso de textos, a ordenação é feita em ordem alfabética, caractere a caractere.
var v = ["aaa", "a", "aba", "abb", "abc"]
escreva(v.ordenar()) // ["a", "aaa", "aba", "abb", "abc"]
ordenar()
também aceita um argumento que descreve como a ordenação deve ser feita, através de uma função que retorna inteiros. O algoritmo é a ordenação bolha. Se o inteiro for maior que zero, os elementos devem ser trocados de lugar.
var numeros = [4, 2, 12, 8];
numeros.ordenar(funcao(a, b) {
retorna b - a;
});
escreva(numeros); // [12, 8, 4, 2]
var vetor = [1, 2, 3]
vetor.remover(2)
escreva(vetor) // [1, 3]
var vetor = [1, 2, 3]
var primeiroElemento = vetor.removerPrimeiro()
escreva(primeiroElemento) // 1
escreva(vetor) // [2, 3]
var vetor = [1, 2, 3]
var ultimoElemento = vetor.removerUltimo()
escreva(ultimoElemento) // 3
escreva(vetor) // [1, 2]
var vetor = [1, 2, 3, 4, 5]
escreva(vetor.somar()) // 15
var vetor = [0, 1, 2, 3, 4]
escreva(vetor.tamanho()) // 5
Dicionários são estruturas que contêm uma chave de identificação única e um valor associado a ela: não existem dois elementos distintos em um dicionário com a mesma chave, mas duas chaves diferentes podem ter um mesmo valor.
var dicionario = {}; // declarando dicionário vazio
dicionario = {'a':'b'}; // atribuindo um dicionário à variável
escreva(dicionario['a']); // retorna 'b'
var dicionario = {};
dicionario['a'] = 'b'; // retorna novo dicionário {'a':'b'}
var dicionario = {'a': 1};
dicionario['a'] = 2; // retorna novo dicionário {'a': 2}
escreva(dicionario['a']); // retorna 2
A partir da versão 0.32.0 foi adicionado o tipo de dado tupla. Tuplas são estruturas de dados semelhantes a listas, mas com uma diferença fundamental: elas são imutáveis. Isso significa que, uma vez que uma tupla é criada, seus elementos não podem ser alterados, adicionados ou removidos.
var t = [(1, 2)]
escreva(t[0]) // 1
t[0] = 3 // Deve dar erro.
Estrutura de dados vazia.
var variavel;
escreva(variavel); // retorna `nulo`, pois `variavel` não possui valor
var variavelNula = nulo; // também pode ser atribuído explicitamente o valor `nulo`
Tipo de variável que pode conter apenas dois valores: verdadeiro
ou falso
.
var variavel1 = verdadeiro;
var variavel0 = falso;
Para que dois objetos sejam comparados como verdade, devem ser do mesmo tipo e do mesmo valor. Caso os objetos sejam de diferentes tipos, ainda que o valor seja semelhante, a comparação de igualdade resultará no valor falso
.
Considere os seguintes exemplos:
1 == 1; // `verdadeiro`
"1" == "1"; // `verdadeiro`
nulo == nulo; // `verdadeiro`
"1" == "2"; // `falso`
1 == 2; // `falso`
1 == "1"; // `falso`