gpt4 book ai didi

c# - 有没有标准的方法来计算 C# 中的语句

转载 作者:太空狗 更新时间:2023-10-30 00:00:39 24 4
gpt4 key购买 nike

我正在查看代码行数以外的一些代码长度指标。 Source Monitor 报告的内容是语句。这似乎是一件值得了解的事情,但 Source Monitor 计算某些东西的方式似乎不直观。例如,for 语句是一个语句,即使它包含变量定义、条件和增量语句。如果一个方法调用嵌套在另一个方法的参数列表中,则整个事情被认为是一个语句。

是否有统计报表的标准方法,它们的规则是否适用于此类事情?

最佳答案

衡量指标的第一条规则是“谨慎衡量”。您要求对语句进行计数,这就是您将要得到的。正如您所注意到的,这个数字可能实际上并不相关。

如果您对其他度量感兴趣,例如代码的“复杂”程度,请考虑研究其他代码指标,例如循环复杂度。

http://en.wikipedia.org/wiki/Cyclomatic_complexity

更新:回复:您的评论

我同意“做得太多”是一个有趣的指标。我的经验法则是一条语句应该有一个副作用(通常是“局部”副作用,比如改变局部变量,但有时是可见的副作用,比如写入文件),因此“语句数”应该大致是与该方法在其副作用数量方面“做”的程度相关。

在实践中,当然没有人的代码,包括我自己的代码,实际上一直符合该标准。您可能会考虑使用“方法执行了多少”的度量标准来计算语句和方法调用的数量。

实际回答您的问题:我不知道有任何行业标准规定“语句数”是什么。 C# 规范当然在词法上定义了什么是“语句”,但是您当然必须进行一些解释才能进行计数。例如:

  void M()
{
try
{
if (blah)
{
Frob();
Blob();
}
}
catch(Exception ex)
{ /* eat it */ }
finally
{
Grob();
}
}

M 中有多少条语句?好吧,M 的主体由一个语句组成,一个 try-catch-finally。那么答案是一个吗? try 的主体包含一个语句,一个“if”语句。 “if”的结果包含一个语句——记住,一个 block 就是一个语句。该 block 包含两个语句。 finally 包含一个语句。 catch block 不包含任何语句——从词法上讲,catch block 不是语句——但它肯定与方法的操作高度相关!

那么总共有多少条语句?对于从 1 到 6 的任何数字,都可以提出一个合理的案例,这取决于您是否将 block 视为“真实”语句,您是否将子语句视为其父语句的补充,等等。据我所知,没有标准机构来规范这个问题的答案。

关于c# - 有没有标准的方法来计算 C# 中的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com