Как я могу уменьшить цикломатическую сложность для функции - PullRequest
2 голосов
/ 17 октября 2019

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

Вот функция

 function sea(country) {    +1
   if (country === 'sa') {         +1
      return 'South Africa';            +1
    } else if (country === 'uk') {    +1
      return 'United-Kingdom';             +1
    } else if (country === 'northkorea') {   +1
      return 'North-Korea';                 +1
    } else if (country === 'au') {  +1
      return 'Australia';                   +1
    } else if (country === 'hongkong') {  +1
      return 'Hong-Kong';                     +1
    } else {
      var rs = new RegExp(/\w);

      return country.replace(rs, function(txt) {        +1
        return txt.charAt(0).toUpperCase();
      });
    }
  }```

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Возможно, вы могли бы использовать объект для хранения этих значений страны (например, словарь), что-то вроде этого должно сделать работу:

const countries = {
  usa: 'United-States',
  uk: 'United-Kingdom'
  // ... all other countries you want
}

function countryCaps(country) {
  if (countries[country]) {
    return countries[country];
  } else {
    // ... your regex replace function here
  }
}

const country = countryCaps('usa');

console.log(country);
0 голосов
/ 17 октября 2019

Вы можете сделать:

// Code refactor
function look(country) {
  const countries = {
    sa: 'South Africa',
    uk: 'United-Kingdom',
    northkorea: 'North-Korea',
    au: 'Australia',
    hongkong: 'Hong-Kong'
  };
  const toUpperCaseFirstLetter = c => c.replace(new RegExp(/\w/), s => s.charAt(0).toUpperCase());

  return countries[country] || toUpperCaseFirstLetter(country);
}

// Testing:
[
  'sa',
  'uk',
  'hongkong',
  'spain', // <-- not in the function's `countries` object
].forEach(c => console.log(look(c)));
0 голосов
/ 17 октября 2019

Я не вижу необходимости менять эту функцию. Это нормально, легко читается и легко проверяется. Просто отметьте его как ложное срабатывание в любом инструменте, из которого исходит это сообщение.

Мои рассуждения были бы совершенно другими, если бы каждое из условий имело свою переменную. Но поскольку эта последовательность if-then-else похожа на простой поиск в таблице, на самом деле это неправильный инструмент. Он должен измерять сложность на основе того, что людям действительно трудно понять. Одним из таких примеров являются глубоко вложенные операторы if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...