为什么某些功能非常长?(学术研究需要的想法!)

Ada*_*tan 8 c function code-structure mcc

我正在写一个关于极长功能的小型学术研究项目.显然,我不是在寻找编程错误的例子,而是寻找100,200和600行长函数的例子.

我将使用为希伯来大学编写的硕士学位编写的脚本来调查Linux内核源代码,该脚本测量不同的参数,如代码行数,函数复杂度(由MCC测量)和其他好东西.顺便说一句,这是一个关于代码分析和推荐阅读材料的简洁研究.

我很感兴趣,如果你能想出为什么任何函数应该特别长的任何好理由?我将研究C,但任何语言的例子和论据都会很有用.

pat*_*ros 18

我可能会因此而感到害怕,但可读性.高度串行但独立的执行可以分解为N个函数调用(其他地方使用的函数)并没有真正受益于分解.除非你计算在函数长度上满足任意最大值作为一个好处.

我宁愿滚动N个函数大小的代码块,而不是导航整个文件,命中N个函数.

  • 好处只是如果块真的是独立的,那么你可以通过实际分解来证明它.你和任何维护者都不能将状态存储在持续函数长度的变量中,在很多不同的地方进行修改,并且只有非常复杂的不变量.一旦函数变长,一个大范围的局部变量具有全局变量的许多令人讨厌的特征.通过将其拆分为函数,您无法修改任何未明显传递引用的内容.当然,如果分解成功,你大多证明你不需要打扰;-) (10认同)
  • 挑剔 - 它是高射(在AA火的意义上),"flack"是公关人员. (4认同)
  • 我不同意你,patros.我的功能大约有1000行.它处理了仅在一个函数中完成的3个不同的处理阶段,但是无法分辨每个阶段的开始位置和结束位置,或者无法了解整个流程.我把它分成了大约10个主要函数调用的函数,并且看到了,我能够很好地了解流程,即使这些函数没有在其他任何地方调用.可以将其视为文本文档中的折叠标题. (4认同)

smc*_*ron 14

switch语句中有很多值?

  • 我在旧的Windows程序中看到了巨大的switch语句.问题是,那些程序是否需要以这种方式编写?答案是不. (5认同)
  • 巨大的switch语句出了什么问题?它很简单,即使很长. (3认同)

Ada*_*ght 11

从其他源生成的任何内容,即来自解析器生成器或类似的有限状态机.如果它不是用于人类消费,则美学或可维护性问题是无关紧要的.