有一个函数,是这样子的:
(仅仅用作表示,真实函数肯定不叫doSomething)
doSomething(a, b, c)
{
// prepare
...
// do A
...
// do B
...
// do C
...
}
前提:
1. do A/B/C中的内容不会被其他函数复用,仅仅在doSomething中被用到
2. 这是C++写的
3. 该函数不是“厨房下水道”函数,其长度是300多行
有人认为,应该把do A/B/C部分,分别拆开成单独的函数,然后让doSomething调用它们。
理由:
1. 这样做大大减少了doSomething函数的大小,使得整个函数更加一目了然
2. 无需再添加一行注释表示该部分代码是做什么的,用函数名就能清晰表示它们的职责
3. 将部分逻辑置于独立的函数之中,便于调试
不过楼主不认同这个观点,反而认为维持现状即可。
理由:
1. 这些部分不会被复用,即使独立成单独的函数,意义不大,不应该过度设计。
2. 独立成单独的函数后,需要将函数的输入/输出参数重复一遍,而且万一以后发生变动,不得不修改多个函数之间的传递的类型信息。
3. 独立出更多的函数后,看上去程序更好理解了,但实际是把单个函数的维护成本分摊到多个子函数上了。如果这样做了,要想明白doSomething的实现细节,你就不得不去阅读4个函数:doSomething,doA,doB和doC。
4. 一旦doSomething的逻辑发生较大变化,原本只需修改doSomething一个函数,现在则需要修改三个子函数。分拆函数就是为了把逻辑独立出去,但是这三个函数在逻辑上不一定能够独立开来,分拆它们会把事情变得更复杂。
各位怎么看?
(仅仅用作表示,真实函数肯定不叫doSomething)
doSomething(a, b, c)
{
// prepare
...
// do A
...
// do B
...
// do C
...
}
前提:
1. do A/B/C中的内容不会被其他函数复用,仅仅在doSomething中被用到
2. 这是C++写的
3. 该函数不是“厨房下水道”函数,其长度是300多行
有人认为,应该把do A/B/C部分,分别拆开成单独的函数,然后让doSomething调用它们。
理由:
1. 这样做大大减少了doSomething函数的大小,使得整个函数更加一目了然
2. 无需再添加一行注释表示该部分代码是做什么的,用函数名就能清晰表示它们的职责
3. 将部分逻辑置于独立的函数之中,便于调试
不过楼主不认同这个观点,反而认为维持现状即可。
理由:
1. 这些部分不会被复用,即使独立成单独的函数,意义不大,不应该过度设计。
2. 独立成单独的函数后,需要将函数的输入/输出参数重复一遍,而且万一以后发生变动,不得不修改多个函数之间的传递的类型信息。
3. 独立出更多的函数后,看上去程序更好理解了,但实际是把单个函数的维护成本分摊到多个子函数上了。如果这样做了,要想明白doSomething的实现细节,你就不得不去阅读4个函数:doSomething,doA,doB和doC。
4. 一旦doSomething的逻辑发生较大变化,原本只需修改doSomething一个函数,现在则需要修改三个子函数。分拆函数就是为了把逻辑独立出去,但是这三个函数在逻辑上不一定能够独立开来,分拆它们会把事情变得更复杂。
各位怎么看?