有一个很长的初始化方法是不好的做法?

bas*_*ibe 8 initialization function code-size

很多 都在争论功能大小.他们说一般来说功能应该很短.意见从15行到"大约一个屏幕"不等,现在大概是40-80行.
此外,功能应始终只执行一项任务.

但是,在我的代码中,有两种标准经常失败的函数:初始化函数.

例如,在音频应用中,必须设置音频硬件/ API,必须将音频数据转换为合适的格式,并且必须正确初始化对象状态.这显然是三个不同的任务,根据API,这可以很容易地超过50行.

具有init函数的东西是它们通常只调用一次,因此不需要重用任何组件.如果你认为大的初始化函数还可以,你还会将它们分解成几个较小的函数吗?

mea*_*gar 12

我仍然会按任务分解函数,然后从面向公众的初始化函数中调用每个低级函数:

void _init_hardware() { }
void _convert_format() { }
void _setup_state() { }

void initialize_audio() {
    _init_hardware();
    _convert_format();
    _setup_state();
}
Run Code Online (Sandbox Code Playgroud)

编写简洁的函数既可以将错误和变更隔离开来,也可以保持可读性.如果你知道失败了_convert_format(),你可以更快地追踪导致错误的~40行.如果您提交仅触及一个函数的更改,则同样适用.

最后一点,我assert()经常使用,所以我可以"经常失败并提前失败",并且函数的开头是一些完整性检查断言的最佳位置.保持功能简短允许您根据更狭窄的职责更彻底地测试功能.很难对400行功能进行单元测试,这可以完成10种不同的功能.


sha*_*oth 5

如果分成更小的部分可以使代码更好地结构化和/或更具可读性 - 无论函数做什么都可以.它不是关于代码质量的行数.