✔ 最佳答案
您好:
在下尚未能先解析完你的程式。但因為有重要的事你一定要弄清楚。
否則日後寫程式你還是會像這次的情況。
說真的,你的程式寫起來看起來本文就很混亂而且沒有結構性。
這是造成程式非常難以維護的最大元兇。要改的話也很難改。
第一個問題:你有沒有覺得你的php中的echo使用量多到一個爆炸?
一般初學在寫程式的過程中,必須要掌握的第一個原則是:
「輸入」、「執行」、「輸出」三件事要分開。
事實上依舊很多人沒弄清楚「html就是echo」
你所echo的每一個文字字串最終都會先是html再轉成網頁。
既然如此:
在html中寫:
今天天氣很好
跟在php中寫:
echo "今天天氣很好";
有什麼差別?
我想,就你的程式來看,他其實是可以像global.php一樣
被抽離到另一個php檔。
讓你要使用的js能夠單純化他本身就會是一個js。
而不是在其中大量插入php的元素。
尤其大量的使用echo,即時在php,這樣的寫法也是錯誤的。
(程式變得看起來眼花瞭亂卻又不具任何的結構性)
第二個問題:你大量的使用document.write
這和第一個問題雷同。該抽離的項目沒抽離,該使用php使又沒有使用。
其實你是在js判斷式之後叫入了顯示html的方法。
可是你又把html用document.write寫了很長。
再配合第一個問題的echo......程式就顯得多出太多不必要的部份。
這部份其實反過來你就是該把要分別顯示的html各自寫在各自的html中。
然後經過php呼叫html到一個變數,再讓js去使用傳過來的整個html。
如此一來,你的document.write就只要寫一行。
if(xxxxx){
複數行的documtne.wrtie();
}
和
if(XXXX){
單數行的document.write();
}
你想那個看起來會比較單純?
第三點:結構化程式設計
這點是關乎於在看到你程式是重頭一直寫寫寫寫到尾所必須提出的。
事實上不是只有你會犯這種錯誤。所有沒有經過程式設計訓練的人都會發生。
我只能說,過度安於現狀,不肯朝良好快速而穩定的程式前進的話。
最終還是寫不出能夠實用的東西。
所以無論如何,除了程式語言之外,良好的結構程式是必須要做的事。
在這邊就不得不提到函式這件事。
太多人去誤會函式只是單純把重覆的程式碼整合起來包進函式。
這個原則上其實沒錯,但這也只有50%。
使用函式建立結構化程式最主要的就是二個原則:
1、函式提取:這就是上面講的將重覆的程式碼整理後,寫入函式。讓具有相
同動作的重覆行為獲得立即的程式碼改善。
2、單一職責:函式的目的最終是為了提供功能,而非只是讓程式碼重用。任
何編寫函式的行為,應該仍以功能性為目的,而函式的最終要素就是「一個函式儘提供一個功能。」
這或許很多人難以理解,什麼是一個函式一個功能。
其實也就如他字面的意思,你的程式可能提供複數的功能體。
當你將他包成一個函式時,這個函式只是複數功能體的集合卻不知道他真正的功能性是如何。但如果把各自的功能各自成為函式。
就可以自由的在程式功能中去取用功能。而不會因為一個廣大包覆性的功能而變成單一功能的存取不易。
最終,您的程式碼現階段要考量的不是改了什麼東西他能正常運作。
而是必須先做初步的「重構」- 改善既有程式的設計。
將你的程式碼大幅度的簡化到容易維護及編寫的原則上時。
才能來考慮你的程式發生了什麼錯誤。
否則,你解決了一個問題,又冒出第二個問題,又要用眼睛大量的再看一次程式碼。這絕對比你先做好重構還要更加的浪費時間。
切記一件事:大量訓練debug能力的工程師,永遠比不上不怎麼會debug卻總是把debug交給電腦去做的工程式。
所以......不要再訓練自己debug的能力了。
改善程式的結構讓程式純化。
再把除錯的事交由電腦幫你處理。
把所有的資訊都歸類、分門別類的做好。
整理好你所有的程式碼。讓他具有易維護、良好的可讀性。
這必你現在的問題要大家幫你看幫你解還來得重要許多。
我相信,現在大概有很多人正在努力的「看」你的程式。
但是我也相信很多能力很強的工程師是「不想看」你的程式。
不想看的最終的問題就出在結構上。
希望這篇回答,會讓你思考到問題的核心價值出在那裡。
或許這篇並不是用來解答你問題的所在。
但他能解決接下來你所面臨的大部份的問題。
無論如何:請「重構」你的程式。使其具有良好的結構和維護性。
如果不明白該如何做。***的暱稱來信。