很多朋友覺得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上問一個象這樣“為什麼我的記錄集是空的”的問題是沒有意義的。

此文只適合於一些初學人閱讀。

請訪問我的個人主頁http://swuse.yeah.net,共同討論Asp
創作者介紹
創作者 sleepingwolf 的頭像
sleepingwolf

【開源節流】--> "開源" & "節流"

sleepingwolf 發表在 痞客邦 留言(0) 人氣()