Re: [问题] 实作内容相同但很可能改变的function

楼主: uranusjr (←這人是超級笨蛋)   2014-08-20 21:33:50
※ 引述《BigLoser (大鲁蛇)》之铭言:
→ uranusjr: 请用继承, 不要用 switch 08/20 16:28
: 原本想用继承,可是这些计算公式,是只有当中有一些不同,
: 专属部分在每个状况会有不同,
: 可是现在就算我计算公式1和2当让大家共用,
: 又遇到另一个问题,就是未来a的计算公式1可能会变的不同,
: 这样共用的部分就不行了,等于要独立抽出来,
: 这种情况又该如何呢?
→ ssccg: 要不要合并不是只看实作内容,要看代表的逻辑和用途 08/20 20:31
→ ssccg: 你的举例来说,你后面的问题来了根本不是个问题 08/20 20:35
→ ssccg: 作法改了当然就呼叫新的function,跟原本的关系在哪? 08/20 20:37
→ BigLoser: 公式大部分是共用的 只有一小部分不同 08/20 21:06
→ BigLoser: *相同 08/20 21:06
我觉得你已经在钻牛角尖了
没有人规定程式里不能有同样的东西
一般会建议把相同的地方 extract 出来, 是因为这些东西是共用的
当你需要修改共用逻辑时, 只要修改 extract 出来的部分即可
这样可以降低维护成本, 以及避免修改时发生错误
如果别人(或未来的你)需要阅读你的程式, 也可以让他们比较方便
但是即使两个东西长得一样, 不代表它们的逻辑就是共用的
以你的状况而言, 既然“未来a的计算公式1可能会变的不同”
那么就代表 a 与 b 根本就不是同一个东西, 只是刚好都用了计算公式 1
所以要嘛你还是把计算公式 1 抽出, 然后当 a 未来改变时改使用其他公式实作
要嘛就是你一开始就根本不应该把 a 和 b 看成同一类东西
Method extraction 这件事情本身就是用来降低维护与程式阅读成本
所以当你在思考要不要, 以及要怎么做时, 就应该把这两件事当成目标
如果一味遵从教条, 为 refactor 而 refactor, 这些准则就失去意义了
作者: GNUGCC (-std=c++14)   2014-08-10 00:59:00
void main(void) 的写法是可行的唷^^虽然这个写法较传统,但是语法与文法都正确哦^^目前我使用的 Visual C++ 都接受 void main(void) 与int main(void),各位可以把 C++ 专案改成原生 C++ 类型来用 void main(void) 来写发现也可通过编译.这个就是 Visual C++ 的弹性.
楼主: uranusjr (←這人是超級笨蛋)   2014-08-20 16:28:00
请用继承, 不要用 switch
作者: ssccg (23)   2014-08-20 20:31:00
要不要合并不是只看实作内容,要看代表的逻辑和用途你的举例来说,你后面的问题来了根本不是个问题作法改了当然就呼叫新的function,跟原本的关系在哪?
作者: BigLoser (大鲁蛇)   2014-08-20 21:06:00
公式大部分是共用的 只有一小部分不同*相同
作者: BigLoser (大鲁蛇)   2014-08-20 22:59:00
好的,先谢谢你的回应,我需要消化和思考一下还在学习怎么让程式更物件导向,再谢谢妳一次

Links booklink

Contact Us: admin [ a t ] ucptt.com