Моя функция не вызывается в другой функции - PullRequest
1 голос
/ 29 апреля 2020

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

function errorChecker (num1, word1, num2, word2) {
  if (num1 === Number(num1) && word1 === String(word1) && num2 === Number(num2) && word2 === String(word2)) {
    console.log('all parameters are ok')
  } else {
    return false
  }
  if (wordChecker(word1) === true && (wordChecker(word2) === true)) {
    return true
  } else {
    console.log('invalid parameter')
  }
  if (singularChecker(num1, word1) === false && (pluralChecker(num2, word2) === false)) {
    console.log('correct singular and plurals')
  } else {
    return true
  }
}
// For checking function effectiveness
const num1 = 1
const word1 = 'minutes'
const num2 = 2
const word2 = 'minute'

console.log(errorChecker(num1, word1, num2, word2))
// function to set exact word parameters that can be used
function wordChecker (word) {
  switch (word) {
    case 'seconds':
    case 'second':
    case 'minutes':
    case 'minute':
    case 'hours':
    case 'hour':
    case 'days':
    case 'day':
      return true
    default:
      return false
  }
}

function pluralChecker (digit, letters) {
  switch (letters.toLowerCase()) {
    case 'seconds':
    case 'minutes':
    case 'hours':
    case 'days':
      if (digit !== 1) {
        return true
      } else {
        return false
      }
  }
}

function singularChecker (numz, wordz) {
  switch (wordz.lowerCase()) {
    case 'second':
    case 'minute':
    case 'hour':
    case 'day':
      if (numz === 1) {
        return true
      } else {
        return false
      }
  }
}

1 Ответ

0 голосов
/ 29 апреля 2020

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

Мне показалось, что этот код работает нормально при Firefox on Windows.

Однако я вижу много возможностей для улучшения вашего стиля кодирования.

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

Переместите строку console.log(errorChecker(num1, word1, num2, word2)) вниз.

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

«Изучайте правила как профессионал, чтобы вы могли нарушать их, как артист».

Множество возможностей обучения ниже, прочитайте мои комментарии и, наконец, sh код. Ваша следующая задача - включить в этот код несколько массивов и объектов.

function errorChecker(num1, word1, num2, word2) {
  console.log("errorChecker()", num1, word1, num2, word2);
  
  var isValid = true; // we assume valid = true until something bad happens.
  
  if (typeof num1 === "number" && typeof word1 === "string" && typeof num2 === "number" && typeof word2 === "string") {  
    console.log('all parameters are ok');
  } else {
    console.error('parameter error:');
    isValid = false;
  }
  
  var isWord1Good = wordChecker(word1),
      isWord2Good = wordChecker(word2);
      
  if (isWord1Good === true && isWord2Good === true) {
    //don't return here, you have only fulfilled one of your checks.
    //return true;
    console.log("wordChecker says: 'Words are so good.'");
  } else {
    console.error('wordChecker did NOT like', isWord1Good, isWord2Good);
    isValid = false;
  }
  
  //ok do the same thing I did above, I've gotten tired
  if (singularChecker(num1, word1) === false && (pluralChecker(num2, word2) === false)) {
    console.log('correct singular and plurals')
  } else {
    console.log('incorrect singular and plurals')
    isValid = false;    
  }
  
  //Finally return at one point in the function, at the end, this makes it so much easier to debug:
  return isValid;
}

//do similar stuff with this one
// function to set exact word parameters that can be used
function wordChecker (word) {  
  var wordIsTime = false;
  switch (word) {
    case 'seconds':
    case 'second':
    case 'minutes':
    case 'minute':
    case 'hours':
    case 'hour':
    case 'days':
    case 'day':
      wordIsTime = true;      
  }
  
  //here's a log to show what fn you're in, what you sent in, and what it's returning:
  console.log("wordChecker()", word, wordIsTime);
  return wordIsTime;
}

//do similar stuff with this one
function pluralChecker (digit, letters) {
  switch (letters.toLowerCase()) {
    case 'seconds':
    case 'minutes':
    case 'hours':
    case 'days':
      if (digit !== 1) {
        return true;
      } else {
        return false;
      }
  }
}

function singularChecker (numz, wordz) {
  //wordz.lowerCase() is not a function
  switch (wordz.toLowerCase()) {
    case 'second':
    case 'minute':
    case 'hour':
    case 'day':
      if (numz === 1) {
        return true;
      } else {
        return false;
      }
  }
}

// For checking function effectiveness
const num1 = 1;
const word1 = 'minutes';
const num2 = 2;
const word2 = 'minute';


console.log(errorChecker(num1, word1, num2, word2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...