程式|初學
很多朋友覺得ASP不是很好學,我覺得其實有了一定的編程基礎,再加上那麼一點點技巧,入門是不難的(不過要做好也不是很容易,要很多的相關知識——什麼Sql Server資料庫語言啦,資料結構啦(這些都是在最佳化Asp的演算法時候要熟悉的)。
在這隻和大家談談我個人是怎書寫和調試ASP的,希望能給大有一點協助……
ASP指令碼的書寫:
一、注意區分清楚html文法和VBScript文法。因為ASP是混合使用Html文法和VBScript文法的(當然,我全部寫成VBScript文法也可以,不過那樣的程式那難閱讀)。最好使用一些能標示html標記和VBScript標記的編輯工具,比如Ultra Edit什麼的。
我學得編輯器的工具列菜單不用太多,有一般的功能就行了,因為工具菜單一多,編輯地區肯定會變得較小,這是我們不希望看到的(你總不希望為了找出一個If的結束語句End if而翻來翻去吧。這也許是我以前使用記事業來編寫Asp指令碼的原因吧——呵呵,記事本的編輯地區較大嘛……
二、書寫程式時使用縮排
書寫程式時使用縮排可以減少很多不必要的語法錯誤。以免執行你的asp程式的時候提示“缺少end”什麼什麼的……
通常指使用縮排書寫指的是對流量控制語句使用縮排,如果我不說,你也應該知道有哪些流量控制語句吧:
If……Else……End if
For……Next
Do While……Loop
Select case ……Case……Case Else……End Select
For each element In group……Next
等等……
比如寫成下面這樣查錯就方便多了:
If 條件 then
語句
do while 條件
語句
loop
else
語句
end if
三、熟悉一些省略的寫法,比如:
If 條件 then
語句
End if
可簡寫成If 條件 then 語句
注意:後面不能再寫else和end if。
等等……
四、盡量熟悉你要使用的指令碼語言。
五、備用一些常用的教程(比如VBScript語言參考什麼的),以備查用。
六、拼字要十分小心
Asp指令碼的調試:
一、在你編輯實現一定功能的Asp指令碼時,首先得有一個清晰的思路,只要是:要實現什麼功能,實現的關鍵是什麼、語句流怎樣控制等……雖然小的項目(比如一個簡單的留言本系統)不一定要寫出來,但起碼要心中有數。
二、如果要使用資料庫的話,得先根據你的項目功能設計資料庫結構
三、不要等到整個Asp指令碼全部編寫完畢時才開始調試。一般都是一邊編寫一邊調試(如果你看我做的話就是開兩個視窗:一個編輯器,一個IE,在編輯中改一下指令碼,再到IE視窗重新整理一下)。
如果你的指令碼有幾百行那麼多,即使你只是將一段正確的指令碼輸入到檔案裡面,也難保不會出錯。而這麼長的指令檔是很難調試的,一旦出現錯誤,你很難找出到底哪裡出了問題——即使是語法錯誤。
四、調試語法錯誤的時候,經常採用“截短法”來做。
比如出錯提示為“第236行錯誤,缺少end”,這樣長的代碼,你很難知道到底缺少的是那個If的end或者是select的end……
比如下面一段程式:
一大堆語句
if
else
(這裡有一大堆語句)
end if
我通常的做法是截去括弧中的部分,然後再試運行,再逐步將截去的部分放回去(這特別適用於調試別人編輯的指令碼)。
五、標記調試方法
有時為了知道程式執行到了哪個地方,通常在程式裡加進一些標記,比如response.write "abc",然後將這句移動位置,這樣就能確定程式到底有沒有執行到我希望到的地方。
在調試迴圈的時候,常常需要輸出迴圈控制變數的值到瀏覽器以協助調試。
一些由於是變數值引起的錯誤,比如資料庫連接或記錄集開啟錯誤,通常在出錯語句的前面輸出sql語句以確認sql語句沒有錯誤。出於這個考慮,我通常使用sql="語句"/set rs=execute(sql)來代替直接運行set rs=execute("語句"),因為當我的語句出錯時,我可以很方便地在前面來個response.write sql來查看sql語句到底有沒有問題。
六、在調試表單時,對於password表單項,通常先將它變成text,等調試好了後才改為password。
七、監視變數法
在調試一些變數比較多的指令碼時,比如聊天室調試時,由於大量使用到application和session變數,通常要做些輔助的指令碼來查看application和session變數,這樣就方便多了。
八、以少代多法
調試global.asa檔案的邏輯錯誤是比較麻煩的,特別是session.onend和application.onend事件。
applicatoin.onstart事件調試不難——因為當你第一次開啟瀏覽器的時候,如果global.asa檔案有語法錯誤的時候,瀏覽器會提示你什麼地方出錯了。但很不幸地,session.onend就看不到提示了。為了確認你的session.onend到底有沒有執行,通常在application.onstart設定一個標記變數,然後在session.ond事件中將這個變數改成變一個值,這樣就可以等session逾時後查看該標記變數有沒有被改變,如果沒有改變就證明你的session.onend沒有執行。
對於application.onend的調試,你可以把那部分代碼拿到一個asp檔案中,給它一定的條件(比如它使用了什麼變數,然後滿足它的條件看看有沒有達到預的效果。不過通常application.onend都不會太複雜(複雜了調試通不過唄)。
九、盡量給一些資料庫連接串全部的參數,以免引起不必要的麻煩。
雖然一些參數不是必須的,但還是全部給它較好。我曾經試過由於沒有給一個Access的資料庫連接字串足夠的參數而引起離奇古怪的問題:修改了串連檔案後,重新整理一次可得到正確的結果,再來重新整理一次就不行了,甚至出現了“無法指出的錯誤”。
十、不要急於進行錯誤處理On_orror。因為錯誤本身可以幫我們調試指令碼,你一旦屏蔽了錯誤,很容易不知道到底哪裡出錯了。
十一、減少邏輯錯誤的一個最好的方法是有一個清晰的思路,別人是很難幫上你的。
因此如果你在BBS上問一個邏輯錯誤,回答者首先的回答就是:“你的原始碼呢?”,因此除非你是為了灌水,否則在BBS上問一個象這樣“為什麼我的記錄集是空的”的問題是沒有意義的。