@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
495 lines • 31.7 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.carregarBibliotecasGlobais = carregarBibliotecasGlobais;
exports.pontoEntradaAjuda = pontoEntradaAjuda;
exports.obterTopicoAjuda = obterTopicoAjuda;
const funcao_padrao_1 = require("./estruturas/funcao-padrao");
const delegua_funcao_1 = require("./estruturas/delegua-funcao");
const descritor_tipo_classe_1 = require("./estruturas/descritor-tipo-classe");
const objeto_delegua_classe_1 = require("./estruturas/objeto-delegua-classe");
const bibliotecaGlobal = __importStar(require("../bibliotecas/biblioteca-global"));
const construtos_1 = require("../construtos");
function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
pilhaEscoposExecucao.definirVariavel('aleatório', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
pilhaEscoposExecucao.definirVariavel('aleatorioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre));
pilhaEscoposExecucao.definirVariavel('aleatórioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre));
pilhaEscoposExecucao.definirVariavel('algum', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.algum));
pilhaEscoposExecucao.definirVariavel('arredondar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.arredondar));
pilhaEscoposExecucao.definirVariavel('clonar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.clonar));
pilhaEscoposExecucao.definirVariavel('encontrar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrar));
pilhaEscoposExecucao.definirVariavel('encontrarIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice));
pilhaEscoposExecucao.definirVariavel('encontrarÍndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice));
pilhaEscoposExecucao.definirVariavel('encontrarUltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo));
pilhaEscoposExecucao.definirVariavel('encontrarÚltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo));
pilhaEscoposExecucao.definirVariavel('encontrarUltimoIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimoIndice));
pilhaEscoposExecucao.definirVariavel('encontrarÚltimoÍndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimoIndice));
pilhaEscoposExecucao.definirVariavel('filtrarPor', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.filtrarPor));
pilhaEscoposExecucao.definirVariavel('incluido', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.incluido));
pilhaEscoposExecucao.definirVariavel('incluído', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.incluido));
const funcaoInteiro = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.inteiro);
funcaoInteiro.MAXIMO = 2147483647;
funcaoInteiro.MÁXIMO = 2147483647;
funcaoInteiro.MINIMO = -2147483648;
funcaoInteiro.MÍNIMO = -2147483648;
pilhaEscoposExecucao.definirVariavel('inteiro', funcaoInteiro);
const funcaoLongo = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.longo);
funcaoLongo.MAXIMO = BigInt('9223372036854775807');
funcaoLongo.MÁXIMO = BigInt('9223372036854775807');
funcaoLongo.MINIMO = BigInt('-9223372036854775808');
funcaoLongo.MÍNIMO = BigInt('-9223372036854775808');
pilhaEscoposExecucao.definirVariavel('longo', funcaoLongo);
pilhaEscoposExecucao.definirVariavel('intervalo', new funcao_padrao_1.FuncaoPadrao(3, bibliotecaGlobal.intervalo));
pilhaEscoposExecucao.definirVariavel('mapear', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.mapear));
pilhaEscoposExecucao.definirVariavel('maximo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.maximo));
pilhaEscoposExecucao.definirVariavel('máximo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.maximo));
pilhaEscoposExecucao.definirVariavel('minimo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.minimo));
pilhaEscoposExecucao.definirVariavel('mínimo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.minimo));
const funcaoNumero = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.numero);
funcaoNumero.MAXIMO = Number.MAX_VALUE;
funcaoNumero.MÁXIMO = Number.MAX_VALUE;
funcaoNumero.MINIMO = -Number.MAX_VALUE;
funcaoNumero.MÍNIMO = -Number.MAX_VALUE;
pilhaEscoposExecucao.definirVariavel('numero', funcaoNumero);
pilhaEscoposExecucao.definirVariavel('número', funcaoNumero);
pilhaEscoposExecucao.definirVariavel('ordenar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.ordenar));
pilhaEscoposExecucao.definirVariavel('paraCada', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.paraCada));
pilhaEscoposExecucao.definirVariavel('primeiroEmCondicao', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.primeiroEmCondicao));
pilhaEscoposExecucao.definirVariavel('primeiroEmCondição', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.primeiroEmCondicao));
const funcaoReal = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.real);
funcaoReal.MAXIMO = Number.MAX_VALUE;
funcaoReal.MÁXIMO = Number.MAX_VALUE;
funcaoReal.MINIMO = -Number.MAX_VALUE;
funcaoReal.MÍNIMO = -Number.MAX_VALUE;
pilhaEscoposExecucao.definirVariavel('real', funcaoReal);
pilhaEscoposExecucao.definirVariavel('reduzir', new funcao_padrao_1.FuncaoPadrao(3, bibliotecaGlobal.reduzir));
pilhaEscoposExecucao.definirVariavel('somar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.somar));
pilhaEscoposExecucao.definirVariavel('tamanho', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.tamanho));
pilhaEscoposExecucao.definirVariavel('texto', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.texto));
pilhaEscoposExecucao.definirVariavel('todos', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.todos));
pilhaEscoposExecucao.definirVariavel('todosEmCondicao', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.todosEmCondicao));
pilhaEscoposExecucao.definirVariavel('todosEmCondição', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.todosEmCondicao));
pilhaEscoposExecucao.definirVariavel('tupla', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.tupla));
pilhaEscoposExecucao.definirVariavel('vetor', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.vetor));
}
function pontoEntradaAjuda(funcao, topico) {
if (!funcao) {
return 'Para usar a ajuda, use como uma função: ajuda(objeto).';
}
if (!topico) {
return ('Te damos as boas-vindas ao utilitário de ajuda de Delégua!\n\n' +
'Use ajuda(objeto) para obter informações sobre um objeto, função, classe ou módulo.\n' +
"Use ajuda('tópico') para obter informações sobre um tópico específico.\n\n");
}
return obterTopicoAjuda(topico);
}
function obterTopicoAjuda(topico) {
switch (topico.constructor) {
case construtos_1.Leia:
return (`A instrução 'leia' permite capturar a entrada do usuário durante a execução do programa. ` +
`Você pode usar 'leia()' para ler uma linha de entrada do usuário e armazená-la em uma variável. ` +
`Exemplo de uso:\n\n` +
`\tvar minhaVariavel = leia()\n\n` +
`Isto irá ler a entrada do usuário e atribuí-la à variável 'minhaVariavel'.`);
case funcao_padrao_1.FuncaoPadrao:
return obterAjudaFuncaoPadrao(topico);
case delegua_funcao_1.DeleguaFuncao:
if (topico.documentacao) {
const conteudo = topico.documentacao.conteudo;
return Array.isArray(conteudo) ? conteudo.join('\n') : String(conteudo);
}
return `Função '${topico.nome}' — sem documentação disponível.`;
case objeto_delegua_classe_1.ObjetoDeleguaClasse:
return obterAjudaDescritor(topico.classe, false);
case descritor_tipo_classe_1.DescritorTipoClasse:
return obterAjudaDescritor(topico, true);
default:
console.log(topico);
return `Desculpe, não há documentação disponível para o tópico solicitado no momento.`;
}
}
function obterConteudoDoc(documentacao) {
if (!documentacao)
return '';
return Array.isArray(documentacao.conteudo)
? documentacao.conteudo.join('\n')
: String(documentacao.conteudo);
}
function obterAjudaDescritor(descritor, estatico) {
var _a, _b;
const nome = (_b = (_a = descritor.simboloOriginal) === null || _a === void 0 ? void 0 : _a.lexema) !== null && _b !== void 0 ? _b : 'Objeto';
const qualificador = estatico ? ' (estático)' : '';
const linhas = [`Classe ${nome}${qualificador}`];
const propriedadesVisiveis = descritor.propriedades.filter((p) => p.acesso === 'publico' && p.estatico === estatico);
if (propriedadesVisiveis.length > 0) {
linhas.push('\nPropriedades:');
for (const prop of propriedadesVisiveis) {
const doc = obterConteudoDoc(prop.documentacao);
linhas.push(` ${prop.nome.lexema}${doc ? ` — ${doc}` : ''}`);
}
}
const nomesMetodos = Object.keys(descritor.metodos);
if (nomesMetodos.length > 0) {
linhas.push('\nMétodos:');
for (const nomeMetodo of nomesMetodos) {
const metodo = descritor.metodos[nomeMetodo];
const funcao = Array.isArray(metodo) ? metodo[0] : metodo;
const doc = obterConteudoDoc(funcao.documentacao);
linhas.push(` ${nomeMetodo}()${doc ? ` — ${doc}` : ''}`);
}
}
return linhas.join('\n');
}
function obterAjudaFuncaoPadrao(funcaoPadrao) {
// Tentamos identificar a função pela aridade e pela implementação
const aridade = funcaoPadrao.valorAridade;
const implementacao = funcaoPadrao.funcao;
// Mapeamento de funções por nome
const nomeFuncao = Object.keys(bibliotecaGlobal).find((key) => bibliotecaGlobal[key] === implementacao);
if (!nomeFuncao) {
return 'Função não identificada. Não há documentação disponível.';
}
switch (nomeFuncao) {
case 'aleatorio':
return (`# aleatorio()\n\n` +
`Retorna um número aleatório entre 0 e 1.\n\n` +
`**Sintaxe:** aleatorio()\n\n` +
`**Retorno:** Número real entre 0 (inclusivo) e 1 (exclusivo).\n\n` +
`**Exemplo:**\n` +
`\tvar numeroSorteado = aleatorio()\n` +
`\tescreva(numeroSorteado) // Pode retornar algo como 0.4829374657\n`);
case 'aleatorioEntre':
return (`# aleatorioEntre(minimo, maximo)\n\n` +
`Retorna um número aleatório inteiro de acordo com os parâmetros passados.\n` +
`Mínimo (inclusivo) - Máximo (exclusivo).\n\n` +
`**Sintaxe:** aleatorioEntre(minimo: número, maximo: número)\n\n` +
`**Parâmetros:**\n` +
` - minimo: O valor mínimo (inclusivo)\n` +
` - maximo: O valor máximo (exclusivo)\n\n` +
`**Retorno:** Número inteiro entre minimo e maximo-1.\n\n` +
`**Exemplo:**\n` +
`\tvar dado = aleatorioEntre(1, 7)\n` +
`\tescreva(dado) // Retorna um número entre 1 e 6\n`);
case 'algum':
return (`# algum(vetor, funcaoPesquisa)\n\n` +
`Verifica se algum dos elementos do vetor satisfaz a condição definida pela função de pesquisa.\n\n` +
`**Sintaxe:** algum(vetor: qualquer[], funcaoPesquisa: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** Verdadeiro se pelo menos um elemento satisfaz a condição, falso caso contrário.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [1, 2, 3, 4, 5]\n` +
`\tvar temPar = algum(numeros, funcao(n) { retorna n % 2 == 0 })\n` +
`\tescreva(temPar) // verdadeiro\n`);
case 'clonar':
return (`# clonar(valor)\n\n` +
`Clona profundamente uma variável ou constante em Delégua, criando uma cópia independente.\n\n` +
`**Sintaxe:** clonar(valor: qualquer)\n\n` +
`**Parâmetros:**\n` +
` - valor: O valor a ser clonado (vetor, dicionário, objeto, tupla, etc.)\n\n` +
`**Retorno:** Uma cópia profunda do valor fornecido.\n\n` +
`**Exemplo:**\n` +
`\tvar original = [1, 2, [3, 4]]\n` +
`\tvar copia = clonar(original)\n` +
`\tcopia[2][0] = 99\n` +
`\tescreva(original[2][0]) // 3 (não foi modificado)\n` +
`\tescreva(copia[2][0]) // 99\n`);
case 'encontrar':
return (`# encontrar(vetor, funcaoPesquisa)\n\n` +
`Encontra o primeiro elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` +
`**Sintaxe:** encontrar(vetor: qualquer[], funcaoPesquisa: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** O primeiro elemento que satisfaz a condição, ou nulo se nenhum elemento for encontrado.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [1, 3, 5, 8, 10]\n` +
`\tvar primeiroPar = encontrar(numeros, funcao(n) { retorna n % 2 == 0 })\n` +
`\tescreva(primeiroPar) // 8\n`);
case 'encontrarIndice':
return (`# encontrarIndice(vetor, funcaoPesquisa)\n\n` +
`Encontra o índice do primeiro elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` +
`**Sintaxe:** encontrarIndice(vetor: qualquer[], funcaoPesquisa: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** O índice do primeiro elemento que satisfaz a condição, ou -1 se nenhum elemento for encontrado.\n\n` +
`**Exemplo:**\n` +
`\tvar frutas = ["maçã", "banana", "laranja"]\n` +
`\tvar indice = encontrarIndice(frutas, funcao(f) { retorna f == "banana" })\n` +
`\tescreva(indice) // 1\n`);
case 'encontrarUltimo':
return (`# encontrarUltimo(vetor, funcaoPesquisa)\n\n` +
`Encontra o último elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` +
`**Sintaxe:** encontrarUltimo(vetor: qualquer[], funcaoPesquisa: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** O último elemento que satisfaz a condição, ou nulo se nenhum elemento for encontrado.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [2, 4, 6, 7, 9]\n` +
`\tvar ultimoPar = encontrarUltimo(numeros, funcao(n) { retorna n % 2 == 0 })\n` +
`\tescreva(ultimoPar) // 6\n`);
case 'encontrarUltimoIndice':
return (`# encontrarUltimoIndice(vetor, funcaoPesquisa)\n\n` +
`Encontra o índice do último elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` +
`**Sintaxe:** encontrarUltimoIndice(vetor: qualquer[], funcaoPesquisa: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** O índice do último elemento que satisfaz a condição, ou nulo se nenhum elemento for encontrado.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [2, 4, 6, 7, 9]\n` +
`\tvar indiceUltimoPar = encontrarUltimoIndice(numeros, funcao(n) { retorna n % 2 == 0 })\n` +
`\tescreva(indiceUltimoPar) // 2\n`);
case 'filtrarPor':
return (`# filtrarPor(vetor, funcaoFiltragem)\n\n` +
`Cria um novo vetor com todos os elementos que passam no teste implementado pela função de filtragem.\n\n` +
`**Sintaxe:** filtrarPor(vetor: qualquer[], funcaoFiltragem: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoFiltragem: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** Novo vetor contendo apenas os elementos que satisfazem a condição.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [1, 2, 3, 4, 5, 6]\n` +
`\tvar pares = filtrarPor(numeros, funcao(n) { retorna n % 2 == 0 })\n` +
`\tescreva(pares) // [2, 4, 6]\n`);
case 'incluido':
return (`# incluido(vetor, valor)\n\n` +
`Verifica se um valor está incluído em um vetor.\n\n` +
`**Sintaxe:** incluido(vetor: qualquer[], valor: qualquer)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - valor: O valor a ser procurado\n\n` +
`**Retorno:** Verdadeiro se o valor estiver no vetor, falso caso contrário.\n\n` +
`**Exemplo:**\n` +
`\tvar frutas = ["maçã", "banana", "laranja"]\n` +
`\tescreva(incluido(frutas, "banana")) // verdadeiro\n` +
`\tescreva(incluido(frutas, "uva")) // falso\n`);
case 'inteiro':
return (`# inteiro(valor)\n\n` +
`Converte um valor em um número inteiro de 32 bits.\n\n` +
`**Sintaxe:** inteiro(valor: número | texto)\n\n` +
`**Parâmetros:**\n` +
` - valor: O valor a ser convertido (número ou texto)\n\n` +
`**Retorno:** Número inteiro correspondente ao valor fornecido.\n\n` +
`**Constantes:**\n` +
` - inteiro.MAXIMO (ou inteiro.MÁXIMO): 2147483647 (maior valor possível)\n` +
` - inteiro.MINIMO (ou inteiro.MÍNIMO): -2147483648 (menor valor possível)\n\n` +
`**Exemplo:**\n` +
`\tescreva(inteiro(3.14)) // 3\n` +
`\tescreva(inteiro("42")) // 42\n` +
`\tescreva(inteiro("3.99")) // 3\n` +
`\tescreva(inteiro.MAXIMO) // 2147483647\n` +
`\tescreva(inteiro.MINIMO) // -2147483648\n`);
case 'intervalo':
return (`# intervalo(valorInicial, valorFinal)\n\n` +
`Cria um vetor com números inteiros no intervalo especificado.\n` +
`O valor inicial é inclusivo e o valor final é exclusivo.\n\n` +
`**Sintaxe:** intervalo(valorInicial: número, valorFinal: número)\n\n` +
`**Parâmetros:**\n` +
` - valorInicial: O valor inicial (inclusivo)\n` +
` - valorFinal: O valor final (exclusivo)\n\n` +
`**Retorno:** Vetor com os números no intervalo especificado.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = intervalo(1, 6)\n` +
`\tescreva(numeros) // [1, 2, 3, 4, 5]\n`);
case 'longo':
return (`# longo(valor)\n\n` +
`Converte um valor em um número inteiro de 64 bits (longo).\n\n` +
`**Sintaxe:** longo(valor: número | texto)\n\n` +
`**Parâmetros:**\n` +
` - valor: O valor a ser convertido (número ou texto)\n\n` +
`**Retorno:** Número inteiro de 64 bits correspondente ao valor fornecido.\n\n` +
`**Constantes:**\n` +
` - longo.MAXIMO (ou longo.MÁXIMO): 9223372036854775807 (maior valor possível)\n` +
` - longo.MINIMO (ou longo.MÍNIMO): -9223372036854775808 (menor valor possível)\n\n` +
`**Exemplo:**\n` +
`\tescreva(longo(3.14)) // 3\n` +
`\tescreva(longo("9000000000")) // 9000000000\n` +
`\tescreva(longo.MAXIMO) // 9223372036854775807\n` +
`\tescreva(longo.MINIMO) // -9223372036854775808\n`);
case 'mapear':
return (`# mapear(vetor, funcaoMapeamento)\n\n` +
`Cria um novo vetor com os resultados da aplicação de uma função a cada elemento do vetor original.\n\n` +
`**Sintaxe:** mapear(vetor: qualquer[], funcaoMapeamento: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoMapeamento: Função que recebe um elemento e retorna um novo valor\n\n` +
`**Retorno:** Novo vetor com os valores transformados.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [1, 2, 3, 4]\n` +
`\tvar quadrados = mapear(numeros, funcao(n) { retorna n * n })\n` +
`\tescreva(quadrados) // [1, 4, 9, 16]\n`);
case 'maximo':
return `# maximo(vetor)\n\nRetorna o maior valor encontrado em um vetor de números.`;
case 'minimo':
return `# minimo(vetor)\n\nRetorna o menor valor encontrado em um vetor de números.`;
case 'numero':
return (`# numero(valor)\n\n` +
`Converte um valor em um número de ponto flutuante de 64 bits.\n\n` +
`**Sintaxe:** numero(valor: número | texto)\n\n` +
`**Parâmetros:**\n` +
` - valor: O valor a ser convertido\n\n` +
`**Retorno:** Número correspondente ao valor fornecido.\n\n` +
`**Constantes:**\n` +
` - numero.MAXIMO (ou numero.MÁXIMO / número.MÁXIMO): maior valor finito representável\n` +
` - numero.MINIMO (ou numero.MÍNIMO / número.MÍNIMO): menor valor finito representável (mais negativo)\n\n` +
`**Exemplo:**\n` +
`\tescreva(numero("3.14")) // 3.14\n` +
`\tescreva(numero("42")) // 42\n` +
`\tescreva(numero(5)) // 5\n` +
`\tescreva(numero.MAXIMO) // 1.7976931348623157e+308\n` +
`\tescreva(numero.MINIMO) // -1.7976931348623157e+308\n`);
case 'ordenar':
return (`# ordenar(vetor)\n\n` +
`Ordena os elementos de um vetor em ordem crescente (números) ou alfabética (textos).\n\n` +
`**Sintaxe:** ordenar(vetor: qualquer[])\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n\n` +
`**Retorno:** O mesmo vetor, agora ordenado.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [5, 2, 8, 1, 9]\n` +
`\tordenar(numeros)\n` +
`\tescreva(numeros) // [1, 2, 5, 8, 9]\n`);
case 'paraCada':
return (`# paraCada(vetor, funcao)\n\n` +
`Executa uma função para cada elemento do vetor.\n\n` +
`**Sintaxe:** paraCada(vetor: qualquer[], funcao: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcao: Função a ser executada para cada elemento\n\n` +
`**Retorno:** Nenhum (undefined).\n\n` +
`**Exemplo:**\n` +
`\tvar nomes = ["Ana", "Bruno", "Carlos"]\n` +
`\tparaCada(nomes, funcao(nome) {\n` +
`\t\tescreva("Olá, " + nome)\n` +
`\t})\n`);
case 'primeiroEmCondicao':
return (`# primeiroEmCondicao(vetor, funcaoFiltragem)\n\n` +
`Retorna o primeiro elemento que satisfaz a condição especificada pela função de filtragem.\n\n` +
`**Sintaxe:** primeiroEmCondicao(vetor: qualquer[], funcaoFiltragem: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoFiltragem: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** O primeiro elemento que satisfaz a condição, ou undefined se nenhum for encontrado.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [1, 3, 5, 8, 10]\n` +
`\tvar resultado = primeiroEmCondicao(numeros, funcao(n) { retorna n > 5 })\n` +
`\tescreva(resultado) // 8\n`);
case 'real':
return (`# real(valor)\n\n` +
`Converte um valor em um número real (ponto flutuante de 64 bits). Equivalente a numero().\n\n` +
`**Sintaxe:** real(valor: número | texto)\n\n` +
`**Parâmetros:**\n` +
` - valor: O valor a ser convertido\n\n` +
`**Retorno:** Número real correspondente ao valor fornecido.\n\n` +
`**Constantes:**\n` +
` - real.MAXIMO (ou real.MÁXIMO): maior valor finito representável\n` +
` - real.MINIMO (ou real.MÍNIMO): menor valor finito representável (mais negativo)\n\n` +
`**Exemplo:**\n` +
`\tescreva(real("3.14")) // 3.14\n` +
`\tescreva(real(42)) // 42.0\n` +
`\tescreva(real.MAXIMO) // 1.7976931348623157e+308\n` +
`\tescreva(real.MINIMO) // -1.7976931348623157e+308\n`);
case 'reduzir':
return (`# reduzir(vetor, funcaoReducao, valorInicial)\n\n` +
`Aplica uma função a um acumulador e cada elemento do vetor para reduzi-lo a um único valor.\n\n` +
`**Sintaxe:** reduzir(vetor: qualquer[], funcaoReducao: função, valorInicial?: qualquer)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoReducao: Função que recebe (acumulador, elemento) e retorna novo valor do acumulador\n` +
` - valorInicial: (Opcional) Valor inicial do acumulador\n\n` +
`**Retorno:** Valor final do acumulador.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [1, 2, 3, 4]\n` +
`\tvar soma = reduzir(numeros, funcao(acc, n) { retorna acc + n }, 0)\n` +
`\tescreva(soma) // 10\n`);
case 'somar':
return `# somar(vetor)\n\nRetorna a soma de todos os elementos de um vetor numérico.`;
case 'tamanho':
return (`# tamanho(objeto)\n\n` +
`Retorna o tamanho de um objeto (vetor, texto, função, etc.).\n\n` +
`**Sintaxe:** tamanho(objeto: qualquer)\n\n` +
`**Parâmetros:**\n` +
` - objeto: O objeto cujo tamanho será medido\n\n` +
`**Retorno:** Para vetores e textos, retorna o número de elementos/caracteres. ` +
`Para funções, retorna o número de parâmetros.\n\n` +
`**Exemplo:**\n` +
`\tescreva(tamanho([1, 2, 3])) // 3\n` +
`\tescreva(tamanho("Delégua")) // 7\n`);
case 'texto':
return (`# texto(valor)\n\n` +
`Transforma o valor ou variável em texto.\n\n` +
`**Sintaxe:** texto(valor: qualquer)\n\n` +
`**Parâmetros:**\n` +
` - valor: O valor a ser convertido em texto\n\n` +
`**Retorno:** Representação em texto do valor fornecido.\n\n` +
`**Exemplo:**\n` +
`\tescreva(texto(42)) // "42"\n` +
`\tescreva(texto(verdadeiro)) // "verdadeiro"\n` +
`\tescreva(texto([1, 2, 3])) // "[1, 2, 3]"\n`);
case 'todosEmCondicao':
return (`# todosEmCondicao(vetor, funcaoCondicional)\n\n` +
`Retorna verdadeiro se todos os elementos do vetor satisfazem a condição especificada pela função.\n\n` +
`**Sintaxe:** todosEmCondicao(vetor: qualquer[], funcaoCondicional: função)\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor de elementos\n` +
` - funcaoCondicional: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` +
`**Retorno:** Verdadeiro se todos os elementos satisfazem a condição, falso caso contrário.\n\n` +
`**Exemplo:**\n` +
`\tvar numeros = [2, 4, 6, 8]\n` +
`\tvar todosPares = todosEmCondicao(numeros, funcao(n) { retorna n % 2 == 0 })\n` +
`\tescreva(todosPares) // verdadeiro\n`);
case 'tupla':
return (`# tupla(vetor)\n\n` +
`Transforma um vetor de elementos em uma tupla de N elementos, sendo N a largura do vetor.\n` +
`Tuplas são estruturas imutáveis de tamanho fixo.\n\n` +
`**Sintaxe:** tupla(vetor: qualquer[])\n\n` +
`**Parâmetros:**\n` +
` - vetor: Um vetor com 2 a 10 elementos\n\n` +
`**Retorno:** Uma tupla (Dupla, Trio, Quarteto, etc.) correspondente ao vetor.\n\n` +
`**Exemplo:**\n` +
`\tvar coordenadas = tupla([10, 20])\n` +
`\tescreva(coordenadas.primeiro) // 10\n` +
`\tescreva(coordenadas.segundo) // 20\n`);
default:
return (`Função global identificada, mas documentação específica não disponível.\n` +
`Aridade: ${aridade} parâmetro(s).`);
}
}
//# sourceMappingURL=comum.js.map