Re: [請益] 很多層迴圈和if 怎麼寫比較好整理
看板Soft_Job (軟體人)作者zanyking (遙遠的旅人)時間14年前 (2011/07/13 12:08)推噓10(10推 0噓 17→)留言27則, 11人參與討論串1/16 (看更多)
※ 引述《viable (viable)》之銘言:
: 這版上諸多經驗豐富的高手,
: 讓小妹向各位請教一個問題。
: 小妹最近翻出一個程式,
: 其中有一”坨”由好幾個迴圈和if堆疊而成
: {{{{
: {}
: {}
: {}
: {
: {}
: {}
: }
: }}}}
: 夾雜一堆變數和三、四維陣列,弄得小妹頭昏眼花
: 小妹想了解如何改寫會更簡潔明嘹
直接回文好了。
程式會寫成這樣就是當初見招拆招、腦袋一團漿糊開始寫下去的結果。
要改寫得簡潔明瞭,第一步就是把當初沒有去想的東西現在想清楚。
如果你用的是像Java這種物件導向的語言,會有多維陣列就表示應該要存在
一個物件模型可以比較好的描述資料結構,同時把與每個層次的結構相關的方法
予以封裝。
建議你,開始畫圖吧,資料結構樹先拉出來,資料實體間的關係先釐清才會真的
對這段程式碼有感覺。
這段工作不要作太深,其實就只是取名字、劃線連連看表示各個名字間的關係而已。
要用比較好的方法表現這個模型,想一步登天是不可能的,因為已經存在的程式碼
與針對細節的處理已經在那裡了,這些細節會在你讀程式碼的過程中不停的塞入過多
的資訊阻礙你建立架構的骨幹。
所以第二步就是,開始重構。
通常if else 會多的實做,裡面重複的程式碼也會不少,把重複的部份清掉就可以
把雜訊消除。
就算是不重複的程式碼,按執行段落去抽成方法,就能讓主方法的實做內容變成可閱讀
的文句。
如果是物件導向程式語言的話,一個重構流程的簡單要領:
bottom up 與top down 要交替運用
Top Down: 當程式最外圈明顯存在很大塊的if else 內部彼此不相關,就先將這些區塊
整段切出去到新 static method裡,對切割出去的static method取個符合意義的名字。
外層切割完就看內層,遞迴下去。
Bottom up: 從巢狀結構最深的一個 if block 開始著手。
開個static method,把那個區段整個複製貼過去,開始看這段到底需要哪些外部變數
把變數抽成method arguments,然後給這個method取一個符合他的抽象邏輯的名字。
重複這個交替過程,會發現某些變數有團塊聚集一起被使用的現象,會一起被使用的
變數就會存在一個初始化這些變數的地方,宣告一個static inner class: Wrapper
去包裹他們。
然後令底下的實做需要用到這個wrapper 成員變數的地方改從wrapper的method要。
實際多種的重構手法,可以去買書來瞧瞧。
重構的是增進一個開發者設計功力的好練習,它會最大程度的徵用你腦袋可用的維度
,找個沒人打攪你的深夜還是清晨好好玩吧。
--
我所信仰的科學是一種謙卑的理性,承認自身的無知與渺小才能觀察到世界在我們貧
弱的知覺上留下來的痕跡。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 12.208.243.66
推
07/13 12:15, , 1F
07/13 12:15, 1F
推
07/13 12:20, , 2F
07/13 12:20, 2F
→
07/13 13:25, , 3F
07/13 13:25, 3F
→
07/13 13:25, , 4F
07/13 13:25, 4F
→
07/13 13:26, , 5F
07/13 13:26, 5F
→
07/13 13:29, , 6F
07/13 13:29, 6F
→
07/13 13:29, , 7F
07/13 13:29, 7F
→
07/13 13:30, , 8F
07/13 13:30, 8F
推
07/13 13:41, , 9F
07/13 13:41, 9F
推
07/13 15:23, , 10F
07/13 15:23, 10F
→
07/13 15:24, , 11F
07/13 15:24, 11F
→
07/13 15:24, , 12F
07/13 15:24, 12F
推
07/13 15:31, , 13F
07/13 15:31, 13F
推
07/13 15:34, , 14F
07/13 15:34, 14F
→
07/13 17:26, , 15F
07/13 17:26, 15F
推
07/13 17:40, , 16F
07/13 17:40, 16F
→
07/13 17:45, , 17F
07/13 17:45, 17F
推
07/13 19:13, , 18F
07/13 19:13, 18F
→
07/13 21:20, , 19F
07/13 21:20, 19F
推
07/13 21:30, , 20F
07/13 21:30, 20F
推
07/14 00:12, , 21F
07/14 00:12, 21F
→
07/14 00:22, , 22F
07/14 00:22, 22F
→
07/14 09:04, , 23F
07/14 09:04, 23F
→
07/14 09:04, , 24F
07/14 09:04, 24F
→
07/14 09:05, , 25F
07/14 09:05, 25F
→
07/14 09:05, , 26F
07/14 09:05, 26F
→
07/14 13:36, , 27F
07/14 13:36, 27F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 16 篇):
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章
13
18