在MATLAB中,我可以使用以下代码量化我的代码的简洁程度:
t = mtree('myCode.m','-file');
length(t.nodesize)
正如CODY(http://www.mathworks.com/matlabcentral/about/cody/)所描述的那样:
Cody使用节点计数计算来根据解析树中的节点数确定解决方案大小。将大小视为代码长度。编写简洁的代码可以获得更好的结果。注释不会影响代码大小。
为了说明Cody如何确定大小,这里有两个解决加一问题的方法。
解决方案1的大小为12:
function y = plus_one(x)
y = x+1;
end
解决方案2的大小为16:
function y = plus_one(x)
z = x;
y = z+1;
end
有没有办法对R代码进行类似的计算? R中的代码质量还有其他可量化的指标吗? MATLAB还可以测量McCabe的复杂性,例如:
mlint -cyc myCode.m
答案 0 :(得分:2)
也许这很有用:
# line1 col1 line2 col2 id parent token terminal text
#33 1 1 1 34 33 0 expr FALSE
#1 1 1 1 8 1 3 SYMBOL TRUE plus_one
#3 1 1 1 8 3 33 expr FALSE
#2 1 10 1 11 2 33 LEFT_ASSIGN TRUE <-
#32 1 13 1 34 32 33 expr FALSE
#4 1 13 1 20 4 32 FUNCTION TRUE function
#5 1 21 1 21 5 32 '(' TRUE (
#6 1 22 1 22 6 32 SYMBOL_FORMALS TRUE x
#7 1 23 1 23 7 32 ')' TRUE )
#29 1 25 1 34 29 32 expr FALSE
#9 1 25 1 25 9 29 '{' TRUE {
#10 1 26 1 26 10 12 SYMBOL TRUE y
#12 1 26 1 26 12 29 expr FALSE
#11 1 27 1 27 11 29 EQ_ASSIGN TRUE =
#19 1 28 1 30 19 29 expr FALSE
#13 1 28 1 28 13 15 SYMBOL TRUE x
#15 1 28 1 28 15 19 expr FALSE
#14 1 29 1 29 14 19 '+' TRUE +
#16 1 30 1 30 16 17 NUM_CONST TRUE 1
#17 1 30 1 30 17 19 expr FALSE
#18 1 31 1 31 18 29 ';' TRUE ;
#24 1 33 1 33 24 26 SYMBOL TRUE y
#26 1 33 1 33 26 29 expr FALSE
#25 1 34 1 34 25 29 '}' TRUE }
sum(getParseData(parse(text="plus_one <- function(x) {y=x+1; y}"))$terminal)
#[1] 15
sum(getParseData(parse(text="plus_one <- function(x) {z = x; y = z+1; y}"))$terminal)
#[1] 19
我不确定我是否同意像
这样的一般性陈述编写简洁的代码可以为您带来更好的结果。