我一直在使用一些工具来衡量代码质量和CCN (Cyclomatic Complexity Number)
,其中一些工具提供了函数中令牌的计数,这些计数对我的函数或方法有什么影响?它用于什么?
答案 0 :(得分:2)
Cyclomatic Complexity Number是一个指示功能,程序或程序复杂性的指标。我发现的最好(足够大且直观)的解释是here。
我认为tokens
指的是conditional statements tokens
实际上考虑了计算圈复杂度的问题。
[稍后编辑]
高CCN意味着复杂的代码:
答案 1 :(得分:0)
在CCN工具的上下文中,令牌是任何不同的运算符或操作数。 如何执行此操作取决于工具。由于Lizard上的页面没有详细介绍,因此您必须检查源代码(它的行数不多)
https://github.com/terryyin/lizard/tree/master/lizard_languages
如果在源中搜索“令牌”,您将看到该工具如何解析代码。在大多数情况下,它正在寻找代码块,表达式,注释和方法/对象的访问。
例如,根据java.py,仅将Java解析为“ {”,“ @”和“。”。 不确定为什么不寻找表达方式...?
答案 2 :(得分:0)
OP 尚未声明他们正在使用哪种工具,但对于 lizard,这是作为 issue 询问的,因此它可能对某人有所帮助
<块引用>token 是单词和运算符等
例如:if (abc % 3 != 0)
有 [‘if’, ‘(‘, ‘abc’, ‘%’, ‘3’, ‘!=‘, ‘0’, ‘)’]
8 个令牌。
还有另一个具有类似描述的 source:
<块引用>一个程序最多可以有 8192 个令牌。每个令牌都是一个词 (例如变量名)或运算符。对括号和字符串计数 作为 1 个令牌。逗号、句点、LOCAL、分号、END 和注释 不计算在内。
现在的下一个问题是,令牌的数量会像 CNN 一样重要吗?免责声明我不是代码质量方面的专家,这取决于语言。例如,在编译语言中,您可能希望将复杂的一行分成多行,这会增加标记的数量,但会显着提高代码的可读性。你应该去尝试,现代编译器足够聪明来优化它们。
然而,这在解释性语言中可能并非如此。同样,您应该查看您正在使用的特定语言,以确保幕后是否有任何优化。话虽如此,某些语言(例如 Python)提供了减少标记数量的语法。只要它是用语言设计的,那就太好了。
TL;DR:这个因素与代码可读性无关。仔细检查您的代码是否很高,但不要弄乱代码以降低它。