Many people讨论了函数大小。他们说总体上功能应该很短。意见从15行到“大约一个屏幕”不等,今天大约是40-80行。
此外,功能应始终仅完成一项任务。
但是,在我的代码中,有两种标准经常失败的函数:初始化函数。
例如,在音频应用程序中,必须设置音频硬件/API,必须将音频数据转换为合适的格式,并且必须正确初始化对象状态。显然,这是三个不同的任务,根据API的不同,它可以轻松跨越50多个行。
带有init-functions的东西是它们通常只被调用一次,因此不需要重用任何组件。您是否仍将它们分解为几个较小的函数,您是否认为大型初始化函数还可以?
最佳答案
我仍然会按任务分解功能,然后从面向公众的初始化函数中调用每个较低级别的函数:
void _init_hardware() { }
void _convert_format() { }
void _setup_state() { }
void initialize_audio() {
_init_hardware();
_convert_format();
_setup_state();
}
编写简洁的函数与隔离故障和更改以及保持事物可读性一样重要。如果您知道失败是在
_convert_format()
中,则可以找到导致错误的〜40行,速度要快得多。如果提交仅涉及一项功能的更改,则同样适用。最后一点,我经常使用
assert()
,这样我就可以“经常失败并尽早失败”,而函数的开头是几个进行健全性检查的断言的最佳位置。使功能简短可让您根据职责范围更窄的功能对功能进行更彻底的测试。对执行10种不同功能的400行函数进行单元测试非常困难。
关于function - 拥有长初始化方法是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2622317/