【问题标题】:What exactly is the token count in functions/methods used for?用于函数/方法的令牌计数到底是什么?
【发布时间】:2015-12-22 21:02:49
【问题描述】:

我一直在使用一些工具来衡量代码质量,CCN (Cyclomatic Complexity Number) 和其中一些工具提供了函数中标记的计数,该计数对我的函数或方法有何意义?它是干什么用的?

【问题讨论】:

  • 你用的是什么工具?
  • 我正在使用LizardOCLint,但也尝试过Clang analyzer

标签: cyclomatic-complexity


【解决方案1】:

圈复杂度数是表示功能、过程或程序复杂性的指标。我找到的最好的(足够大和直观的)解释是here

我认为tokens 指的是conditional statements tokens,实际上是在计算圈复杂度时考虑的。

[稍后编辑]

高 CCN 意味着复杂的代码:

  • 它(更)难以阅读和理解
  • 很难维护
  • 单元测试更难维护,因为达到体面的code coverage 难度更大
  • 可能会导致more bugs

可以使用各种技术来减少 CCN。一些例子可以看herehere

【讨论】:

  • 谢谢,我已经知道CCN的意思了,我其实很想知道token count这个是怎么用来说明代码的,或者它是怎么用于代码度量的。
【解决方案2】:

在 CCN 工具的上下文中,标记是任何不同的运算符或操作数。 如何实现取决于工具。由于 Lizard 的页面没有详细介绍,因此您必须检查源代码(它的行数不多)

https://github.com/terryyin/lizard/tree/master/lizard_languages

如果您搜索“token”的来源,您将看到该工具是如何解析代码的。在大多数情况下,它正在寻找代码块、表达式、注释和方法/对象的访问。

例如,根据 java.py,Java 只解析 '{'、'@' 和 '.' 不知道为什么它不寻找表达式...?

【讨论】:

    【解决方案3】:

    OP 尚未声明他们正在使用哪个工具,但对于蜥蜴,这已作为 issue 提出要求,因此它可能对某人有所帮助

    token是单词和运算符等

    例如:if (abc % 3 != 0)[‘if’, ‘(‘, ‘abc’, ‘%’, ‘3’, ‘!=‘, ‘0’, ‘)’] 8 个令牌。

    另外一个source也有类似的描述:

    一个程序最多可以有 8192 个令牌。每个token就是一个词 (例如变量名)或运算符。成对的括号和字符串计数 作为 1 个令牌。逗号、句点、LOCAL、分号、END 和 cmets 不计算在内。

    现在下一个问题是,令牌的数量会像 CNN 一样重要吗?免责声明我不是代码质量专家,这取决于语言。例如,在编译语言中,您可能希望将复杂的行分成多行,这会增加标记的数量,但会显着提高代码的可读性。你应该去做,现代编译器足够聪明,可以优化它们。

    但是,这在解释型语言中可能并非如此。同样,您应该查看您正在使用的特定语言,以确保在幕后是否有任何优化。话虽如此,某些语言(例如 Python)提供了语法来减少标记的数量。只要它是用该语言设计的,那就太好了。

    TL;DR:这个因素并不像代码可读性那么重要。仔细检查您的代码是否很高,但不要弄乱代码以降低它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 2021-05-18
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 2023-04-11
      相关资源
      最近更新 更多