Skip to content

Estruturas de dados elementares

Leonel Sanches da Silva edited this page Feb 12, 2024 · 17 revisions

Também chamadas de primitivas. São as estruturas mais básicas de Delégua.

Variáveis

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

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

Atribuição múltipla

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

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.

Tipos de dados

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.

Texto

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.

Interpolação de texto

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"

Métodos de texto

Todos os métodos de texto podem ser acessados colocando um ponto ao final da variável, constante ou literal de texto.

aparar()

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|"

apararFim()

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|"

apararInicio()

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       |"

concatenar()

var t1 = "um" 
var t2 = "dois três"
escreva(t1.concatenar(t2)) // "umdois três"

dividir()

var t = "um dois três"
t.dividir(' ') // ['um','dois','três']

fatiar()

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.

inclui()

var t = "um dois três"
t.inclui("dois") // verdadeiro
t.inclui("quatro") // falso

maiusculo()

var t = "tudo em minúsculo"
escreva(t.maiusculo()) // Imprimirá "TUDO EM MINÚSCULO"

minusculo()

var t = "TUDO EM MAIÚSCULO"
escreva(t.minusculo()) // Imprimirá "tudo em maiúsculo"

substituir()

var t = "Eu gosto de caju"
t.substituir("caju", "graviola") // Resultado será "Eu gosto de graviola"

subtexto()

var t = "Eu gosto de caju e de graviola"
t.subtexto(3, 16) // Resultado será "gosto de caju"

tamanho()

var t = "Um dois três quatro"
t.tamanho() // 19

Números

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;

Métodos de número

Todos os métodos de número podem ser acessados colocando um ponto ao final da variável, constante ou literal de número.

arredondarParaBaixo()

var valor = 5.7
escreva(valor.arredondarParaBaixo()) // 5

arredondarParaCima()

var valor = 2.5
escreva(valor.arredondarParaCima()) // 3

Vetores

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

Métodos de vetor

adicionar()

var v = []
v.adicionar(7)
v.adicionar(5)
v.adicionar(3)
escreva(v) // [7, 5, 3]

concatenar()

var v = [7, 5, 3]
escreva(v.concatenar([1, 2, 4])) // [7, 5, 3, 1, 2, 4]

empilhar()

var v = []
v.empilhar(7)
v.empilhar(5)
v.empilhar(3)
escreva(v) // [7, 5, 3]

fatiar()

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.

filtrarPor()

var listaDeIdades = [91, 32, 15, 44, 12, 18, 101];

funcao checarIdade(idade) {
  retorna(idade >= 18);
}

escreva(filtrarPor(listaDeIdades, checarIdade)) // [91, 32, 44, 18, 101]

inclui()

var v = [1, 2, 3]
escreva(v.inclui(2)) // verdadeiro
escreva(v.inclui(4)) // falso

inverter()

var v = [1, 2, 3]
escreva(v.inverter()) // [3, 2, 1]

ordenar()

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]

remover(elemento)

var vetor = [1, 2, 3]
vetor.remover(2)
escreva(vetor) // [1, 3]

removerPrimeiro()

var vetor = [1, 2, 3]
var primeiroElemento = vetor.removerPrimeiro()
escreva(primeiroElemento) // 1
escreva(vetor) // [2, 3]

removerUltimo()

var vetor = [1, 2, 3]
var ultimoElemento = vetor.removerUltimo()
escreva(ultimoElemento) // 3
escreva(vetor) // [1, 2]

somar()

var vetor = [1, 2, 3, 4, 5]
escreva(vetor.somar()) // 15

tamanho()

var vetor = [0, 1, 2, 3, 4]
escreva(vetor.tamanho()) // 5

Dicionários

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

Tuplas

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.

Nulo

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`

Lógicas, Binárias ou Booleanas

Tipo de variável que pode conter apenas dois valores: verdadeiro ou falso.

var variavel1 = verdadeiro;
var variavel0 = falso;

Comparação de igualdade

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`
Clone this wiki locally