3

MATLAB では、次のコードを使用して、コードがどれほど簡潔かを定量化できます。

t = mtree('myCode.m','-file');
length(t.nodesize)

CODY ( http://www.mathworks.com/matlabcentral/about/cody/ ) で次のように説明されています。

Cody はノード カウント計算を使用して、解析ツリー内のノード数に基づいてソリューション サイズを決定します。サイズはコードの長さと考えてください。簡潔なコードを書くと、より良い結果が得られます。コメントはコード サイズには影響しません。

Cody がサイズを決定する方法を説明するために、プラス 1 の問題に対する 2 つの解を次に示します。

ソリューション 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
4

1 に答える 1

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

次のような一般的な声明に同意するかどうかはわかりません

簡潔なコードを書くと、より良い結果が得られます。

于 2013-09-30T16:02:30.550 に答える