Re: [問題] 實作內容相同但很可能改變的function
※ 引述《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)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.121.80.249
※ 文章網址: http://www.ptt.cc/bbs/OOAD/M.1408547232.A.16B.html
推
08/24 00:32, , 1F
08/24 00:32, 1F
→
08/24 00:32, , 2F
08/24 00:32, 2F
→
08/24 13:05, , 3F
08/24 13:05, 3F
→
08/24 13:06, , 4F
08/24 13:06, 4F
推
08/28 20:34, , 5F
08/28 20:34, 5F
→
08/29 01:58, , 6F
08/29 01:58, 6F
推
08/29 19:05, , 7F
08/29 19:05, 7F
推
08/30 08:58, , 8F
08/30 08:58, 8F
→
08/30 08:58, , 9F
08/30 08:58, 9F
→
08/30 08:58, , 10F
08/30 08:58, 10F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章