-
Notifications
You must be signed in to change notification settings - Fork 47
Funções nativas
As funções a seguir existem nos dialetos Delégua e Pituguês, e são utilizadas com a mesma sintaxe.
Delégua possui duas funções para geração de variáveis aleatórias.
Retorna um número aleatório entre 0 e 1.
var numeroAleatorio = aleatorio();
escreva(numeroAleatorio);
// 0.8540051495195808Retorna 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.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.
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ávar original = [1, 2, 3]
var copia = clonar(original)
copia[0] = 99
escreva(original[0]) // Imprime: 1
escreva(copia[0]) // Imprime: 99var 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: 99var original = {'nome': 'João', 'idade': 30}
var copia = clonar(original)
copia['idade'] = 25
escreva(original['idade']) // Imprime: 30
escreva(copia['idade']) // Imprime: 25var 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 Janeirovar 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: 99var original = tupla([1, 2])
var copia = clonar(original)
escreva(copia.primeiro) // Imprime: 1
escreva(copia.segundo) // Imprime: 2var 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: 99var original = nulo
var copia = clonar(original)
escreva(copia == nulo) // Imprime: verdadeirovar original = []
var copia = clonar(original)
copia[0] = 1
escreva(tamanho(original)) // Imprime: 0
escreva(tamanho(copia)) // Imprime: 1Converte 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));
// 222Converte 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.69Converte 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.7Transforma valores quaisquer, seja qual for o tipo deles, em texto.
// Variável para teste
var testeNumero = 123;
escreva("123" + texto(testeNumero));
// 123123Percorre 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]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]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, 7Percorre 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
// 6Retorna 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));
// 4Retorna 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 5Transforma 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}- Estruturas de dados elementares
- Entrada e saída
- Operadores
- Condicionais
- Laços de repetição
- Funções
- Funções nativas
- Escopos
- Exceções
- Tipos e Inferência de variáveis
- Orientação a objetos
- Decoradores
- Tradução para outras linguagens
- Compilação para código de máquina
- Dialetos suportados em Delégua
- Implementando Delégua na sua aplicação
- Estruturas de dados elementares
- Entrada e saída
- Operadores
- Condicionais
- Laços de repetição
- Funções
- Funções nativas
- Escopos
- Exceções
- Tipos e Inferência de variáveis
- Asserções e testes unitários
- Orientação a objetos
- Decoradores
- Tradução para outras linguagens
- Compilação para código de máquina
- Dialetos suportados em Delégua
- Implementando Delégua na sua aplicação