日期:2012-03-13  浏览次数:21237 次


    上面已经看到了能够出现的一些不同类型的错误,并且有了一些查找错误的感觉。下面将考虑如何避免把错误引入程序中,尽管不能保证所编写的程序没有错误,但是这里概括的许多技术有助于减少错误数目。

良好的编程习惯
       在编程中避免出现错误是和良好的编程习惯相关的,这里有许多工作我们要做,以减少把错误带进网页的可能性。可能有些人因采用某个技术而走向极端,甚至一定程度上在某个特殊问题上因书生气十足而引入了更多的错误。当然编程人员也不可能采用了这里列出的所有技术。
       要考虑的主要内容是:
       · 代码的格式化和缩进编排。
       · 变量显式表明。
       · 变量转换为合适的数据类型。
       · 使用有意义的变量命名约定。
       · 封装脚本。
       · 注意潜在的错误情况。
1.  代码的格式化和缩进编排
许多VBScript编程员懒于格式化编排其书写的程序。尽管这并不阻碍程序运行,但这使得查找何处产生了错误变得困难。例如,在前面我们看到的程序中,丢失了一个End If,由于嵌套结构的缩进,错误在哪里是相当明显的:
                            objCounters.Remove strCounterName
                     Response.Write "Removed counter " & strCounterName
              <--- missing 'End If' should be here
       End If
End If
%>
如果程序看起来像下面所示的那样,寻找错误将不是一件易事:
<% if Len(Request.Form("cmdSet")) then
strCounterName=Request.Form("lstSet")
strNewValue=Request.Form("txtSet")
if isnumeric (strnewvalue)     then
intNewValue =cint(strNewValue)
       objCounters.Set strCounterName, intNewValue
Response.write      "Set counter"         & strCounterName &" to " & strNewValue

else
Response.write      strNewValue          &" is not a valid number"
       If Len ( Request.Form ("cmdRemove")) then
StrCounterName = Request.Form("lstRemove")

objCounters.Remove strCounterName
Response.write      "Removed counter "& strCounterName
end if
End IF
%>
2.  显式表明变量
VBScript支持Option Explicit语句。在一个脚本页面的开头插入Option Explicit语句时,可以避免使用没有用Dim命令(或用于动态数组的ReDim)定义的变量。似乎不需要这么做,因为脚本语言允许通过给一个变量赋值来创建一个需要的变量。然而用Option Explicit进行定义有助于避免错误,特别是那些难以发现的引起脚本产生不正确结果的逻辑错误。
例如,编写如下程序:
<%
' get value for calculation
strSalesTotal = Request.Form("SalesTotal")
curSalesTotal = CCur(strSalesTotal)
sngCommissionPercent = 2.5

' calculate commission payment
sngCommission = curSalesTotal * (sngComissionPercent /100)
%>
运行这段程序不会产生错误(当然,除非用户给销售合计值赋了非法的值)。然而这段程序总是会产生0的结果,因为在程序的最后一行中sngCommissionPercent变量名拼写错了。脚本解释器将产生一个新的变量名(叫作sngComissionPercent),由于没有赋值,在数学计算时返回值总为0。
为了防止这种错误,仅需在程序开头增加Option Explicit语句。
<%
Option Explicit
Dim strSalesTotal
Dim curSalesTotal
Dim sngCommissionPercent

' get value for calculation
strSalesTotal = Request.Form("SalesTotal")
curSalesTotal = CCur(strSalesTotal)
sngCommissionPercent = 2.5

' calculate commission payment
sngCommission = curSalesTotal * (sngComissionPercent /100)
%>
这时,当脚本引擎试图解释程序时将识别出一个语法错误,并且能够指出此变量没有声明,如图7-15所示:

在JScript中引用一个没有声明的变量将返回一个“Undefined”信息,并且在试图使用变量之前,能够检测到这种情况。
3.  变量转换为合适的数据类型
回头看看前面的程序,可能发现用CCur函数把用户提供的数据转换成了货币型数据类型。在VBScript中,有一系列类似这样的数据变形变换函数,在第3章中有详细的描述。
blnBoolean = Cbool(varVariant)     ' converts to a Variant of subtype Boolean
bytByte = Cbyte(varVariant)          ' converts to a Variant of subtype Byte
curCurrency = CCur(varVariant)&n