Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

271
Visualizações
Escribiendo una función de calculadora - en la forma de programación más funcional (javascript)

Estoy probando una tarea de codewars y quería escribir de forma funcional en javascript. Tengo algunas preguntas con respecto a mis funciones y cómo se puede escribir el código de una mejor manera.

La tarea en sí es construir una función de calculadora. Aceptará una entrada en el formato:

 '..... + ...'

La calculadora debe dividir la cadena por el carácter del medio que significa la operación y luego las dos cadenas que quedan serán los dos valores. En el ejemplo anterior, el primer valor será 5 y el segundo 3. Una vez hecho esto, según el operador, realice la acción, ya sea suma, multiplicación, etc.

Aquí está mi código:

 function dotCalculator(equation) { function returnSymbol(input) { if (input.includes(' + ')) { return ' + '; } else if (input.includes(' - ')) { return ' - '; } else if (input.includes(' * ')) { return ' * '; } else if (input.includes(' / ')) { return ' / '; } } let symbolOf = returnSymbol; let result = equation.split(symbolOf(equation)).map(x => x.length); // Array.prototype.add = function(){ // return this[0] + this[1]; // } }

Sé que mi código aún no está terminado. Estoy tratando de entender cómo terminarlo correctamente teniendo en mente la forma de pensar de la programación funcional. Tal vez la herencia prototípica sería un poco exagerada. Estoy buscando algunas ideas de cualquiera que pueda echar una mano. Intenté escribir una reducción más compleja después

 let arrMine = equation.split(symbolOf(equation)).map((x) => x.length);

pero parecía demasiado desordenado. Cualquier ayuda sería muy apreciada.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Soy un novato en programación funcional, la función de tubería que está aquí es probablemente un poco gratuita y podría haber tomado el ejemplo ..... + ... demasiado literalmente, pero aquí hay un intento:

 const arith = { '+': (a, b) => a + b, '-': (a, b) => a - b, '*': (a, b) => a * b, '/': (a, b) => a / b, }; const pipe = (...fns) => (arg) => fns.reduce((res, fn) => fn(res), arg); const get_input_elements = (input) => input.split(' '); const get_number = (dots) => dots.length; const get_numbers = ([str_a, op, str_b]) => [get_number(str_a), op, get_number(str_b)]; const apply_arith = ([a, op, b]) => arith[op](a, b); const calc = pipe( get_input_elements, get_numbers, apply_arith ); console.log(calc('..... + ...')); console.log(calc('..... - ...')); console.log(calc('...... / ..'));

about 4 years ago · Juan Pablo Isaza Relatório

0

En este ejemplo hay programas funcionales que pueden evaluar aritmética simple: sumar, restar, multiplicar o dividir dos números.

Los detalles se comentan en el ejemplo a continuación.
Nota: prefije cualquier número negativo que se pase a calc() con un guión bajo _ en lugar de un guión -

 // Utility function const log = data => console.log(JSON.stringify(data)); // Arithmetic functions const sum = (a, b) => (+a) + (+b); const dif = (a, b) => a - b; const pro = (a, b) => a * b; const quo = (a, b) => a / b; /** * Calculate a simple formula a+b, ab, a*b, or a/b. * @param {string} formula - Pattern: * "numberOPERANDnumber" ex. "5+5" * Use an underscore to prefix negative numbers. * @returns {number} Result of formula */ const calc = formula => { // Declare variables let result, f, a, b, op; /* Convert string into an array of strings. [number, operand, number] Replace any _ with - (see @param) */ f = formula.split(/([+\-*/])/) .map(ab => ab.replace('_', '-')); /* Convert string of numbers into real numbers. */ a = parseFloat(f[0]); b = parseFloat(f[2]); op = f[1]; /* Check if >a< and >b< are real numbers and if the input string was split into 3 strings. */ if (Number.isNaN(a) || Number.isNaN(b) || f.length != 3) { return; } // >op< determines the method of resolving the formula switch (op) { case '+': result = sum(a, b); break; case '-': result = dif(a, b); break; case '*': result = pro(a, b); break; case '/': result = quo(a, b); break; default: return; } return result; }; log(calc('5+5')); log(calc('_10-7')); // That's a -10 (see @param) log(calc('5*9')); log(calc('51/3'));

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda