推 stupid0319:三個巢狀迴圈可以寫成一個函式吧 10/05 10:11
推 lgen7604:強者的見解就是不一樣 獲益良多 10/05 10:19
推 xatier:推love大 10/05 12:24
→ loveme00835:三個"不同功能"的部分寫在一起, 這是很常見的"責任分 10/05 12:38
→ loveme00835:配不均" 的行為, 會造成擴充不易, 且會有if switch的 10/05 12:39
→ loveme00835:結構重複出現 10/05 12:40
推 holymars:同一樓,我也覺得巢狀迴圈應該在switch-case的外面 10/05 12:41
→ holymars:這三個三角形「不同」的部份只有印出來的東西不一樣 10/05 12:42
→ holymars:你在抽取函式的時侯應該把同功能的部份保留,只抽取不同 10/05 12:42
→ holymars:功能的部份 不然會造成redundant code反而維護不易 10/05 12:42
→ loveme00835:可是如果要改動這裡印出的數字的規則, 迴圈裏面就會變 10/05 12:45
→ loveme00835:的更複雜 10/05 12:45
→ loveme00835:在改程式碼的時候也沒辦法分開來做, 假如是別的使用者 10/05 12:46
→ loveme00835:勢必要動到你的原始碼 10/05 12:47
推 holymars:不會更複雜啊 只是把三個function合成一個來寫 10/05 12:51
→ holymars:假如你有第四種三角形 而且它的形狀真的不一樣而不是只 10/05 12:51
→ holymars:有印出來的東西不一樣的話,才需要再寫另一個函式... 10/05 12:52
→ loveme00835:我就是說樓上這種情形, 加上一個倒三角就變成兩個函式 10/05 12:56
推 holymars:就算有倒三角的需求,也應該要把三個正三角的寫成一個函 10/05 12:58
→ holymars:式啊... 10/05 12:58
→ loveme00835:然後client端因為相依於這樣的改變, 選擇的地方又要作 10/05 13:02
→ loveme00835:改動, 你著重在邏輯簡化, 我著重在擴充上 0.0 10/05 13:03
推 chessjim:學到很多重要觀念,大謝 10/05 13:03
推 holymars:選擇的地方不用改動吧 是printTriangle要傳兩個參數進去 10/05 13:04
→ holymars:啊…我不是說你的printTriangle 我是說三個合成一個之後 10/05 13:05
→ holymars:要傳兩個參數 然後該函式在迴圈裡判斷要印什麼東西 10/05 13:05
→ loveme00835:加上倒三角之後, 本來從三選一變四選一的地方啦~ 10/05 13:06
推 holymars:對啊 那裡不用動啊= = 是你的三個函式要合成一個啊 10/05 13:07
→ loveme00835:吼~ :( 我知道你說三個合成一個的地方, 就是上篇推文 10/05 13:10
→ loveme00835:中的程式碼, 我是指加上新三角之後, 就要做兩種函式的 10/05 13:10
→ loveme00835:切換, 加入新的正三角數字規則, 就要改變本來的三合一 10/05 13:11
→ loveme00835:函式, 然後切換函式的地方會變得複雜 10/05 13:12
推 holymars:不用啊= = 本來三合一的函式不用改 再加一個新函式就好 10/05 13:12
→ holymars:一樣在你選函式的地方加上另一個case呼叫新的函式而已 10/05 13:12
→ loveme00835:就是加入新的函式, 就要if(type= 1 ~ 3 )呼叫三合一 10/05 13:13
→ loveme00835:if(case=3) 呼叫新函式, 但是如果新的三角形是使用者 10/05 13:14
→ loveme00835:自己想加的話, 他就還要改到這個印出的函式, 或是還要 10/05 13:15
→ loveme00835:再包一層, 不是很麻煩嗎? 10/05 13:15
→ loveme00835:第 2 個 if 打錯 = = 10/05 13:15
推 holymars:不用改印出的函式 只要再加一個新的函式就好.... 10/05 13:16
→ holymars:原本的三個函式大部份的功能相同就該寫成一個 新加的函 10/05 13:16
→ holymars:式如果沒辦法共用原本的功能就再寫另一個而已 這邏輯沒 10/05 13:16
→ holymars:有很複雜吧.. 10/05 13:16
→ loveme00835:我知道你說的阿= =, 想想寫選擇的函式跟加新三角形的 10/05 13:18
→ loveme00835:作者是不同人的情況, 為了讓他的三角形你的選擇函式要 10/05 13:18
→ loveme00835:多一個case, 然後多一堆稀奇古怪的圖形, 就更多case, 10/05 13:19
→ loveme00835:這樣就顯示不出來當初三合一的好處了 10/05 13:20
推 holymars:那不就是你的printTriangle函式在做的事嗎XD 我沒有反對 10/05 13:20
→ holymars:這塊啊 10/05 13:20
→ holymars:我說的是你的printOne Two Three應該要合成一個 10/05 13:20
→ loveme00835:可以合阿~ 只不過不這樣分很清楚的話比較不能突顯這 10/05 13:21
→ loveme00835:個方法的用途 10/05 13:22
推 stupid0319:寫法本來就很多,像遊戲外掛被封鎖,換個寫法又是活龍 10/05 13:22
→ loveme00835:只不過我習慣上還是會分開寫啦, 再加上函式名稱說明 10/05 13:28
→ loveme00835:各種不同三角形的特徵, 如果這邊用的是繼承 + 多型,很 10/05 13:29
→ loveme00835:容易看出分開寫優點 10/05 13:29
→ loveme00835:另外發現一點: 三合一函式相依於 type 的實際值, 假如 10/05 13:32
→ loveme00835:這個數值分佈有需要變動, 三合一的部份就要改寫 10/05 13:33
※ 編輯: loveme00835 來自: 140.121.197.115 (10/05 13:38)