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

楼主: CindyLinz (Cindy Wang)   2014-08-20 23:07:09
※ 引述《BigLoser (大鲁蛇)》之铭言:
: ※ [本文转录自 C_Sharp 看板 #1Jz5OsDg ]
: 作者: BigLoser (大鲁蛇) 看板: C_Sharp
: 标题: [问题] 实作内容相同但很可能改变的function
: 时间: Wed Aug 20 16:03:00 2014
: 大家好,我就直接举例了
: public int CountA(int A)
: {
: return A*5 + 0;
: }
: public int CountB(int B)
: {
: return B*5 +1;
: }
: public int CountC(int C)
: {
: return C*5 +2;
: }
: 我有多个function做的事情是差不多的,只有些微差别,
: 如例子中的 +0 +1 +2,
: 所以我可以把它整合成一个function,用switch来判断他要+多少,
: 可是问题来了,如果未来这些function可能又会出一些特别的变化,
: 例如
: public int CountA(int A)
: {
: return A*A*A+A+1;
: }
: 会使得A不适合跟其他人整合成在一起,
: 请问这种状况该怎么处理比较好呢?
: 谢谢
你可以把 CountA, CountB, CountC 这些“入口”留着,
然后观察一下为看起来相似的部分另外作一个 (或一些) 像是样版性质的函数,
然后再由这些“入口”依需求来选用样版;
如果某个入口后来经过演变而和大家完全不像了, 它也可以就不再使用样版;
或是以后发现有几个反而变得相像了, 也可以再抽出新样版来共用.
这边的例子里, 我想有个样版可能是长这样:
private int template1(int a, int b){
return a * 5 + b;
}
// 我知道我名字取很烂 XD
然后
public int CountA(int A){
return template1(A, 0);
}
...
以后 CountA 要改写法了, 可以就不再使用 template1.
你这例子应该是有过度简化吧?
不然这样版抽出来以后用起来比原本还长 XD
如果你想要让这样版会“自动取出入口函数的第一个参数来用”的话,
要看使用的语言能不能让你这样搞..
例如说 C/C++ 的 macro, 或是一般 functional language 的 curry 手法,
如果 Java 可能可以从 reflection 里面拿资讯出来利用...不太确定
但 macro 或是 reflection 用法要斟酌一下 (curry 就还好),
因为不是常见用法, 可能会让别人或以后的自己因为没看出个中玄机而出事.
(反过来说, 如果只有自己用, 或是自己带的 team,
可以从此开始刻意大用特用天天用, 用到每一个人都能一眼看出...
维护就不会出问题了 XD)

Links booklink

Contact Us: admin [ a t ] ucptt.com