UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

112 lines 5.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const construtos_1 = require("../construtos"); const informacao_elemento_sintatico_1 = require("../informacao-elemento-sintatico"); const contemComum = (nome) => { return { tipoRetorno: 'lógico', argumentos: [ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('chave', 'qualquer', true, [], 'O elemento como chave do dicionário.'), ], implementacao: (interpretador, valor, chave) => Promise.resolve(chave in valor), assinaturaFormato: `dicionário.${nome}(chave: qualquer)`, documentacao: `# \`dicionário.${nome}(chave)\`\n\n` + 'Retorna verdadeiro se o elemento passado como parâmetro existe como chave do dicionário. Devolve falso em caso contrário.\n' + '\n\n ## Exemplo de Código\n' + '\n\n```delegua\n' + 'var d = {"a": 1, "b": 2, "c": 3}\n' + `escreva(d.${nome}("a")) // verdadeiro\n` + `escreva(d.${nome}("f")) // falso\n\`\`\`` + '\n\n## Formas de uso\n', exemploCodigo: 'dicionário.contem("minhaChave")', }; }; exports.default = { mesclar: { tipoRetorno: 'dicionário', argumentos: [ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('outroDicionario', 'dicionário', true, [], 'Outro dicionário a ser mesclado com este dicionário.'), ], implementacao: (interpretador, valor, outroDicionario) => { if (!outroDicionario || Array.isArray(outroDicionario) || outroDicionario.constructor !== Object) { return Promise.reject(new Error('O argumento de dicionário.mesclar() deve ser um dicionário.')); } return Promise.resolve(Object.assign({}, valor, outroDicionario)); }, assinaturaFormato: 'dicionário.mesclar(outroDicionario: dicionário)', }, // Compatibilidade retroativa com versões anteriores. concatenar: { tipoRetorno: 'dicionário', argumentos: [ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('outroDicionario', 'dicionário', true, [], 'Outro dicionário a ser mesclado com este dicionário.'), ], implementacao: (interpretador, valor, outroDicionario) => { if (!outroDicionario || Array.isArray(outroDicionario) || outroDicionario.constructor !== Object) { return Promise.reject(new Error('O argumento de dicionário.mesclar() deve ser um dicionário.')); } return Promise.resolve(Object.assign({}, valor, outroDicionario)); }, assinaturaFormato: 'dicionário.concatenar(outroDicionario: dicionário)', }, chaves: { tipoRetorno: 'texto[]', argumentos: [], implementacao: (interpretador, valor) => { return Promise.resolve(Object.keys(valor)); }, assinaturaFormato: 'dicionário.chaves()', documentacao: '# `dicionário.chaves()`\n\n' + 'Retorna um vetor de texto com todas as chaves de um dicionário.\n' + '\n\n ## Exemplo de Código\n' + '\n\n```delegua\n' + 'var d = {"a": 1, "b": 2, "c": 3}\n' + 'escreva(d.chaves()) // ["a", "b", "c"]\n```' + '\n\n## Formas de uso\n', exemploCodigo: 'dicionário.chaves()', }, contem: contemComum('contem'), contém: contemComum('contém'), itens: { tipoRetorno: 'Dupla[]', argumentos: [], implementacao: (interpretador, valor) => { const hashArquivo = interpretador.hashArquivoDeclaracaoAtual; const linha = interpretador.linhaDeclaracaoAtual; const pares = Object.entries(valor).map(([chave, valor]) => { return new construtos_1.Dupla(new construtos_1.Literal(hashArquivo, linha, chave, 'texto'), new construtos_1.Literal(hashArquivo, linha, valor, 'qualquer')); }); return Promise.resolve(pares); }, assinaturaFormato: 'dicionário.itens()', documentacao: '# `dicionário.itens()`\n\n' + 'Retorna um vetor contendo tuplas, sendo o primeiro valor a chave do dicionário, e o segundo valor o valor correspondente no dicionário. ' + 'Funciona de maneira semelhante às funções `entries()` de JavaScript, e `items()` da linguagem Python.\n' + '\n\n## Exemplo de Código\n' + '\n```delegua\n' + 'var d = {"a": 1, "b": 2, "c": 3}\n' + 'escreva(d.itens())\n' + '// [[("a", 1)], [("b", 2)], [("c", 3)]]\n' + '```\n\n' + '## Formas de uso\n', exemploCodigo: 'dicionário.itens()', }, remover: { tipoRetorno: 'lógico', argumentos: [new informacao_elemento_sintatico_1.InformacaoElementoSintatico('chave', 'texto')], implementacao: (interpretador, valor, chave) => Promise.resolve(delete valor[chave]), assinaturaFormato: `dicionário.remover(chave: qualquer)`, }, valores: { tipoRetorno: '<T>[]', argumentos: [], implementacao: (interpretador, valor) => { return Promise.resolve(Object.values(valor)); }, }, }; //# sourceMappingURL=primitivas-dicionario.js.map