2

是否有任何工具可用于计算每种方法的平均代码行数

我想知道每种方法的平均大小,而不仅仅是项目中的总行数。每个方法计数将使我能够衡量每种方法的简单程度。

这将作为构建过程的一部分进行计算,并显示在仪表板上。这个想法是我们可以看到每种方法的平均大小是否在增加。这将标志着代码复杂性正在增加的可能性,我们可能需要考虑重构。

4

5 回答 5

1

在您的项目中进行递归“for(i in this)”搜索,如果对象 (i) 是一个函数,则调用“test.toString().split("\n").length”。这会计算函数中换行符的数量。如果它不是函数,而是对象,则在该对象中调用此函数。还要计算你找到的函数的数量,然后用换行符的总数除以函数的总数,然后你就有了平均值。

编辑

function calculateMethodSize(obj){
  var fcount = 0;
  var fsize = 0;
  for(i in obj){
    if(obj[i] instanceof Function){
      fcount++;
      fsize += obj[i].toString().split(";\n").length;
    }else if(obj[i] instanceof Object){
      var ret = calculateMethodSize(obj[i]);
      fcount += ret.fcount;
      fsize += ret.fsize;
    }
  }
  return {fsize:fsize, fcount:fcount};
}
var data = calculateMethodSize(this);
var average = data.fsize / data.fcount;

不过要小心运行此代码。如果你用这个运行它,就像我所做的那样,那么你可能会遇到堆栈溢出(我做过)。

于 2008-09-19T10:03:48.330 回答
1

short fast and dirty : grep for ";",计算行数,这会给你一个语句数的估计。

于 2008-09-19T09:35:31.780 回答
0

您可能还想了解其他指标。无论如何计算行数,只要确保它不会面对没有“function”关键字或花括号定义的函数。现实世界的例子:

var negate = bind1st(compose, not);

(这里的 negate 是从函数 bind1st、compose 和 not 构建的函数)

于 2009-11-16T04:23:44.900 回答
0

将行定义为“\n”或“;”,

您可以尝试一个简单的算法,如下所示:

FOR each line in a javascript file (or chunk of text)
    IF the line starts with "function " THEN
        PUSH the first left-curly brace you find onto a stack
        WHILE the stack is non-empty
            PUSH any left-curly braces in the current line
            POP any left-curly braces when you encounter a right-curly brace
            Increment your line-count by 1
            Increment your line counter (as mentioned in the FOR loop above)
        END WHILE
        Store your total lines for this function            
     ELSE
         //ignore the line because it's probably a global var or blank
     END IF
END FOR

我不知道可以自动执行此操作的工具。但是,尝试自己制作一个会很有趣。

于 2008-09-19T14:40:23.677 回答
0

我不确定它是否这样做,但是在您之前的帖子之后搜索什么是圈复杂度,我去了指向代码分析器的相关维基百科页面。他们在那里说:

在计算 HTML 或 JSP 文件时,它将正确计算嵌入在 <script> 标记中的 javascript 和 vbscript 代码的 LoC。

我不知道这个计数是否按方法分派,但可能值得一看(它是一个免费工具)。

于 2008-09-19T09:33:51.800 回答