2015-01-13 5 views
2

Я читаю книгу об проверяемом JS и есть глава о Cyclomatic complex, но на самом деле это не говорит о том, как рассчитать его. Он просто говорит, чтоCyclomatic complex paths count

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

И это дает этот пример о том, что он имеет цикломатическую сложность 2:

function sum(a, b) { 
    if (typeof(a) !== typeof(b)) { 
     throw new Error("Cannot sum different types!"); 
    } else { 
     return a + b; 
    } 
} 

Поэтому я интересно, это сделано ли на пример имеет цикломатическое сложность 3:

function madeup(a) { 
    if (typeof(a) === "string") { 
     if (a === "some") { 
      console.log("is a some"); 
     } else { 
      console.log("not a some"); 
     } 
    } else { 
     console.log("not a string"); 
    } 
} 

И это из 4:

function madeup(a) { 
    if (typeof(a) === "string") { 
     if (a === "some") { 
      console.log("is a some"); 
     } else { 
      console.log("not a some"); 
     } 
    } else { 
     if (a === 5) { 
      console.log("is a 5"); 
     } else { 
      console.log("not a 5"); 
     } 
    } 
} 

?

+1

Как вы сказали, вы просто считаете дорожки. Вы посчитали правильно. – AbcAeffchen

ответ

1

Да, вы правильно подсчитали. Я думаю, что это все, что можно сказать.

Если вы не уверены, вы можете отбросить свою функцию в http://jshint.com, и он расскажет вам, что такое цикломатическая сложность.

+0

спасибо, да, я использую эту функцию jshint в моей среде IDE для проверки кода. –

0

В первом примере операции «throw new Exception» и RETURN приводят к тому, что метод заканчивается, и все переменные выпадают из области видимости.

Методы во втором и третьем примерах завершаются после последней строки в коде. Второй и третий методы только выходят из кода в одном месте, в последней строке.

Если у вас есть инструкция RETURN после методов console.log, вы были бы правы.

В соответствии с этим сложность Cyclomatic составляет 1 для примеров два и три.