freeCodeCamp/guide/russian/miscellaneous/algoritmo-de-argumentos-opc.../index.md

8.8 KiB
Raw Blame History

title localeTitle
Algoritmo De Argumentos Opcionales Алгоритм опционных аргументов

объяснение:

Может быть немного сложно понять, что нужно делать. Когда мы программируем, есть разные способы сделать что-то. Независимо от используемого алгоритма нам необходимо создать функцию, которая выполняет следующие действия:

  • Вы должны добавить два числа, полученные в качестве параметров, и вернуть результат.
  • Вы должны проверить, что оба числа действительно являются числами, иначе возвратите undefined и остановите функцию в то время.
  • Вы должны проверить, что полученные аргументы - один или два. Если их больше, их следует игнорировать.
  • Если получен только один аргумент, должна быть возвращена функция, которая принимает другой аргумент, а затем добавление.

Подсказка: 1

Каждый раз, когда вы работаете с аргументом, вы должны проверить, действительно ли это число или нет. Чтобы избежать повторения кода, вы должны создать функцию, которая занимается этой задачей.

Подсказка: 2

Когда необходимо вернуть функцию, рекомендуется проверить, является ли первый и единственный аргумент новым номером и основывает на нем код.

Подсказка: 3

В случае, когда принимается только один аргумент, не беспокойтесь о том, как запросить второй, просто выполните определение функции правильно, и все будет работать так, как должно.

Спойлер!

предупреждающий знак

Решение ниже!

Решение для кода:

function addTogether() { 
  // Función para comprobar si un número es realmente un número 
  // y retornar undefined en caso contrario. 
  var checkNum = function(num) { 
    if (typeof num !== 'number') { 
      return undefined; 
    } else 
      return num; 
  }; 
 
  // Comprobar si tenemos dos parámetros y si ambos son números 
  // En caso que no lo sean retornamos undefined 
  // retornamos la suma 
  if (arguments.length > 1) { 
    var a = checkNum(arguments[0]); 
    var b = checkNum(arguments[1]); 
    if (a === undefined || b === undefined) { 
      return undefined; 
    } else { 
      return a + b; 
    } 
  } else { 
    // Si solo es encontrado un parámetro retornamos una nueva función para solicitar un segundo parámetro 
    // Guardamos el primer argumento antes de entrar al scope de la nueva función 
    var c = arguments[0]; 
 
    // Comprobamos que sea número de nuevo, debe ser fuera del objeto que retornaremos 
    // en lugar de undefined. 
    if (checkNum(c)) { 
      // // Retornamos la función que espera el segundo parámetro. 
      return function(arg2) { 
        // Comprobamos que no sean números. 
        if (c === undefined || checkNum(arg2) === undefined) { 
          return undefined; 
        } else { 
          // Si lo son, sumamos. 
          return c + arg2; 
        } 
      }; 
    } 
  } 
 } 
 
 // realizamos el test 
 addTogether(2,3); 

:rocket: В REPL!

Объяснение кода:

  • Сначала мы создаем функцию с единственной целью проверить, действительно ли число действительно является числом, и мы возвращаем неопределенное, если это не так. Используйте typeof для проверки.
  • Мы проверяем, есть ли у нас два параметра, если у нас есть, мы проверяем, являются ли они числами или не используют функцию checkNum .
  • Если параметры не определены, мы добавляем их и возвращаем сумму. Если один из них не определен, мы возвращаем undefined.
  • Если у нас есть только один аргумент, мы возвращаем новую функцию, которая ожидает два параметра. Для этого мы сохраняем второй параметр перед входом в функцию, чтобы избежать перезаписи аргумента.
  • Даже в первом случае нам нужно проверить, что сохраненный аргумент - это число, если оно есть, то мы возвращаем функцию, ожидающую второго аргумента.
  • Теперь внутри возвращаемой функции мы должны проверить, что новый параметр является числом с помощью checkNum , если он не определен, мы вернем его, и в противном случае мы добавим числа и вернем результат.

Второе решение:

function addTogether() { 
  var args = new Array(arguments.length); 
  // Almacenamos los argumentos en un array. 
  for(var i = 0; i < args.length; ++i) { 
    args[i] = arguments[i]; 
  } 
  // Comprobamos la cantidad de argumentos. 
  if(args.length == 2){ 
    // Si hay dos argumentos, comprobamos el tipo de ambos 
    // Utiliza typeof para comprobar el tipo de argumentos. (ambos deben ser números) 
    if(typeof args[0] !== 'number' || typeof args[1] !=='number' ){ 
      return undefined; 
    } 
    return args[0]+args[1]; 
  } 
  // Cuando solo un argumento es provisto. 
  if(args.length == 1){ 
    a = args[0]; 
    // Comprobamos el tipo utilizando typeof. 
    if(typeof a!=='number'){ 
      return undefined; 
    } 
    else{ 
      // Hacemos uso de las funciones internas. 
      return function(b){ 
      // Comprobamos el segundo parámetro. 
      if(typeof b !=='number'){ 
        return undefined; 
      } 
      else 
        return a+b; 
      }; 
    } 
  } 
 } 
 
 // realizamos el test 
 addTogether(2,3); 

:rocket: В REPL!

Третье решение:

//jshint esversion: 6 
 function addTogether() { 
  var args = Array.from(arguments); 
  return args.some(n => typeof n !== 'number') ? 
    undefined: 
    args.length > 1 ? 
      args.reduce((acc, n) => acc += n, 0): 
      (n) => typeof n === "number" ? 
        n + args[0]: 
        undefined; 
 } 
 
 // realizamos el test 
 addTogether(2,3); 

:rocket: В REPL!

Объяснение кода:

  • Сначала мы перебираем аргументы и проверяем, что они являются числами, и если они не возвращаются, мы не возвращаем неопределенные.
  • Затем мы проверяем, что количество аргументов больше 1, если мы добавляем аргументы, используя Array.prototype.reduce
  • В противном случае мы возвращаем функцию, которая проверяет, что полученный параметр является числом и добавляет его, если мы не возвращаем неопределенные.

ПРИМЕЧАНИЕ. Пожалуйста, добавьте свое имя пользователя, только если вы добавили в статью соответствующий контент . (Пожалуйста, не удаляйте существующее имя.)