Skip to content

Funções nativas

Leonel Sanches da Silva edited this page Nov 7, 2025 · 10 revisions

As funções a seguir existem nos dialetos Delégua e Pituguês, e são utilizadas com a mesma sintaxe.

Aleatoriedade

Delégua possui duas funções para geração de variáveis aleatórias.

aleatorio

Retorna um número aleatório entre 0 e 1.

var numeroAleatorio = aleatorio();

escreva(numeroAleatorio);
// 0.8540051495195808

aleatorioEntre

Retorna um número inteiro aleatório entre os valores passados para a função. O primeiro parâmetro é o número mínimo e o segundo é o máximo. O valor gerado aleatoriamente nunca será igual ao número máximo passado para a função: sempre será uma unidade a menos que o máximo.

var numeroAleatorio = aleatorioEntre(1, 9);
escreva(numeroAleatorio); // Retornará um valor entre 1 e 8.

Cópias de variáveis ou constantes

clonar

A função clonar() cria uma cópia profunda de uma variável ou constante em Delégua. Diferente de uma atribuição simples, a clonagem profunda garante que modificações na cópia não afetem o valor original, mesmo quando se trata de estruturas de dados aninhadas como vetores, dicionários ou objetos.

Cada tipo de dados é clonado de acordo com as regras abaixo:

  • Valores primitivos (números, textos, lógicos, nulo): São copiados diretamente.
  • Vetores: Cada elemento do vetor é clonado recursivamente, incluindo vetores aninhados.
  • Dicionários: Todas as propriedades são clonadas recursivamente, incluindo dicionários aninhados.
  • Tuplas: Os valores da tupla são clonados e uma nova tupla é criada.
  • Objetos de Delégua: As propriedades do objeto são clonadas, mas a classe em si não é clonada.
  • Funções: Funções não são clonadas profundamente; a cópia mantém referência à mesma definição.
  • Referências circulares: A função detecta e evita loops infinitos causados por referências circulares.

Exemplos

Clonar Valores Primitivos

var original = 42
var copia = clonar(original)
copia = 100
escreva(original)  // Imprime: 42
var original = "Olá"
var copia = clonar(original)
copia = "Mundo"
escreva(original)  // Imprime: Olá

Clonar Vetores

var original = [1, 2, 3]
var copia = clonar(original)
copia[0] = 99
escreva(original[0])  // Imprime: 1
escreva(copia[0])     // Imprime: 99

Clonar Vetores Aninhados

var original = [1, [2, 3], 4]
var copia = clonar(original)
var subVetor = copia[1]
subVetor[0] = 99
escreva(original[1][0])  // Imprime: 2
escreva(copia[1][0])     // Imprime: 99

Clonar Dicionários

var original = {'nome': 'João', 'idade': 30}
var copia = clonar(original)
copia['idade'] = 25
escreva(original['idade'])  // Imprime: 30
escreva(copia['idade'])     // Imprime: 25

Clonar Dicionários Aninhados

var original = {
    'pessoa': {
        'nome': 'Maria',
        'endereco': {
            'cidade': 'São Paulo'
        }
    }
}
var copia = clonar(original)
var enderecoCopia = copia['pessoa']['endereco']
enderecoCopia['cidade'] = 'Rio de Janeiro'
escreva(original['pessoa']['endereco']['cidade'])  // Imprime: São Paulo
escreva(copia['pessoa']['endereco']['cidade'])      // Imprime: Rio de Janeiro

Clonar Vetores com Objetos

var original = [{'x': 1}, {'y': 2}]
var copia = clonar(original)
var primeiro = copia[0]
primeiro['x'] = 99
escreva(original[0]['x'])  // Imprime: 1
escreva(copia[0]['x'])     // Imprime: 99

Clonar Tuplas

var original = tupla([1, 2])
var copia = clonar(original)
escreva(copia.primeiro)   // Imprime: 1
escreva(copia.segundo)    // Imprime: 2

Clonar Estruturas Complexas

var original = [
    {
        'dados': [1, 2, 3],
        'nome': 'Lista A'
    },
    {
        'dados': [4, 5],
        'nome': 'Lista B'
    }
]
var copia = clonar(original)
var primeiro = copia[0]
var dadosCopia = primeiro['dados']
dadosCopia[0] = 99
escreva(original[0]['dados'][0])  // Imprime: 1
escreva(copia[0]['dados'][0])     // Imprime: 99

Clonar Valores Nulos

var original = nulo
var copia = clonar(original)
escreva(copia == nulo)  // Imprime: verdadeiro

Clonar Vetores Vazios

var original = []
var copia = clonar(original)
copia[0] = 1
escreva(tamanho(original))  // Imprime: 0
escreva(tamanho(copia))     // Imprime: 1

Conversões de tipos

inteiro

Converte um número com parte decimal, ou texto que não apresente letras, em um número inteiro.

// Variável para teste
var testeTexto = "111";

escreva(111 + inteiro(testeTexto));
// 222

numero, ou número

Converte um número inteiro, ou texto que não apresente letras, em um número, seja ele com parte decimal ou não.

// Variável para teste
var testeTexto = "504.69"

escreva(numero(testeTexto)); // 504.69

real

Converte um número inteiro ou texto, que não apresente letras, em um número de ponto flutuante (ou seja, com parte decimal).

// Variável para teste
var testeTexto = "504.69"

escreva(0.01 + real(testeTexto)) // 504.7

texto

Transforma valores quaisquer, seja qual for o tipo deles, em texto.

// Variável para teste
var testeNumero = 123;

escreva("123" + texto(testeNumero));
// 123123

Funções para vetores

filtrar

Percorre um vetor executando uma função para cada item desse mesmo vetor. Se o valor retornado pela função é verdadeiro, o valor testado é acumulado em um novo vetor.

var vetor = [1, 2, 3, 4, 5, 6];

var fn = funcao(valor) {
  retorna valor % 2 == 0;
};

escreva(filtrar(vetor, fn));
// [2, 4, 6]

mapear

Percorre um vetor executando uma função para cada item desse mesmo vetor. O retorno da execução da função é acumulado em um novo vetor.

var vetor = [1, 2, 3];

var fn = funcao(valor) {
  retorna valor * 2;
};

escreva(mapear(vetor, fn));
// [2, 4, 6]

ordenar

Realiza a ordenação dos valores em ordem crescente. Esta função só aceita vetores.

// Vetor de strings
var vetorNomes = ["Lucas", "Heictor", "Julio", "Brennus", "Arleson"];

// Vetor de números
var vetorNumeros = [1, 2, 6, 7, 3, 4];

vetorNomes = ordenar(vetorNomes);
escreva(vetorNomes);
// Saída: Arleson, Brennus, Heictor, Julio, Lucas

vetorNumeros = ordenar(vetorNumeros);
escreva(vetorNumeros);
// Saída: 1, 2, 3, 4, 6, 7

paraCada

Percorre um vetor executando uma função para cada item desse mesmo vetor. Diferentemente de filtrar e mapear, o retorno da função não é observado.

var vetor = [1, 2, 3];

var fn = funcao(valor) {
  escreva(valor * 2);
};

paraCada(vetor, fn);
// 2
// 4
// 6

tamanho

Retorna o número de elementos que compõem um vetor.

// Vetor de strings
var vetorNomes = ["Lucas", "Heictor", "Julio", "Brennus", "Arleson"];
var texto = "Egua";

escreva(tamanho(vetorNomes));
// 5

escreva(tamanho(texto));
// 4

todosEmCondicao

Retorna verdadeiro se todos os elementos do primeiro parâmetro, um vetor, retornam verdadeiro ao serem aplicados como argumentos da função passada como segundo parâmetro. Retorna falso em caso contrário.

var meuVetor = [1, 2, 3, 4, 5, 6]
var f1 = funcao(x) { retorna(x < 10) }
escreva(todosEmCondicao(meuVetor, f1)) // verdadeiro

var f2 = funcao(x) { retorna(x % 2 == 0) }
escreva(todosEmCondicao(meuVetor, f2)) // falso, pois `f2` retorna `falso` para 1, 3, e 5

tupla

Transforma um vetor em uma tupla. Vetor deve ter entre 2 e 10 elementos.

escreva(tupla([1, 2, 3, 4])) // Saída: {"primeiro":1,"segundo":2,"terceiro":3,"quarto":4}

Clone this wiki locally