跳轉至內容

活動伺服器頁面/條件語句和迴圈

來自 Wikibooks,開放世界中的開放書籍
上一頁:表示式 索引 下一頁:函式和子程式

在本節中,我們將介紹在活動伺服器頁面中可用的基本程式流程控制語句。這包括條件語句和迴圈結構。學習完本節後,您應該能夠很好地理解如何使用活動伺服器頁面根據表示式做出決策。您還應該瞭解如何根據您定義的條件重複一段程式程式碼。

條件語句用於程式做出決策並確定程式接下來應該做什麼。例如,透過將輸入的密碼與正確的密碼進行比較,來判斷使用者是否輸入了網站的正確密碼。如果使用者透過測試,則將其傳送到其帳戶管理網頁。如果失敗,則將其傳送回登入螢幕,並顯示錯誤資訊“密碼無效”。

這種決策在所有程式語言中都很常見。為了編寫動態 Web 應用程式,您需要掌握活動伺服器頁面的這一方面。

另一個重要的概念是迴圈。迴圈簡單來說就是重複執行相同的程式碼塊多次。由於您遍歷程式碼一次,然後返回到開頭並再次重複,因此程式執行的方向看起來像一個迴圈(或一個圓圈),這就是我們稱之為迴圈的原因。我們將在本章中向您介紹所有可用的迴圈方法。

程式流程

[編輯 | 編輯原始碼]

通常,程式流程從頁面的最頂部開始,並一直向下執行,就像閱讀書籍一樣。所有頁面在 ASP 中都是這樣執行的,這使得程式碼非常易於理解,直到您遇到條件語句和迴圈結構。

由於程式的邏輯流程,因此很容易跟蹤程式程式碼並輸出除錯資訊,以檢視指令碼在 ASP 直譯器處理時正在執行什麼操作。透過使用Response.End語句,您可以在指令碼中放置斷點以在特定點停止執行。稍後將詳細討論此內容。

本節不會介紹的主題是過程和物件方法呼叫。我們將在後面的章節中討論這些內容。

條件語句

[編輯 | 編輯原始碼]

條件語句是指對錶達式進行評估,並根據結果執行一個或多個操作的語句。這允許您檢查特定條件,並在滿足或不滿足條件時採取所需的特定操作。

If-Then 語句

[編輯 | 編輯原始碼]

"If-Then" 語句是最基本的條件語句。當放在一行時,此語句表示“如果條件滿足,則執行此操作”。例如,我們可以測試某人是否已達到投票年齡:

 If nAge > 18 Then Response.Write "Yes, you can vote!"

您也可以建立包含語句塊的If-Then語句。語句塊意味著多個語句組合在一起。在這種情況下,只有在條件滿足時才會執行整個語句塊。我們在此使用縮排以幫助我們閱讀程式碼並確定塊的開始和結束位置。

 If nAge > 18 Then
     Response.Write "Yes, you can vote!"
     bCanVote = true
 End If

如您在此程式塊中所見,If Then語句定義了程式塊的開始,而End If語句定義了程式塊的結束。程式塊縮排是為了更容易匹配塊的開始和結束位置。此程式塊中的所有語句只有在滿足條件語句(nAge > 18)時才會執行。不滿足時,不會執行任何操作。

If-Then-Else

[編輯 | 編輯原始碼]

If Then語句很好用,但如果要執行兩個不同的操作怎麼辦?一個操作是在條件滿足時執行,另一個操作是在條件不滿足時執行。這就是建立If Then Else語句的目的。它基本上表示:“如果條件滿足,則執行此操作,否則執行此操作”。

 If nAge > 18 Then bCanVote = true Else bCanVote = False

從上面的示例可以看出,您可以將整個If Then Else語句放在一行中。在許多情況下,您可能希望避免這種情況,因為它往往會使行變得非常長。相反,您可能希望使用如下所示的程式塊形式

 If nAge > 18 Then
     Response.Write "Yes, you can vote!"
     bCanVote = true
 Else
     Response.Write "No, you can not vote."
     bCanVote = false
 End If

在這種情況下,只會執行兩個程式塊中的一個。第一個在條件滿足時執行。第二個在條件不滿足時執行。因此,您可以將If Then Else語句理解為“一個或另一個,但不是兩者”。

儘管我們在上面顯示的程式塊中使用了多個語句,但您也可以在每個程式塊中放入單個語句。出於除錯目的,您甚至可以在程式塊中根本不包含任何語句。這允許您註釋掉程式塊中的所有語句,並且您的指令碼仍然可以正常執行。

您會注意到,在If Then語句的條件表示式中,我們不必用括號“(”和“)”括起來條件。您可以始終使用括號將表示式組合在一起,但它們不需要括起來條件語句。

Select Case

[編輯 | 編輯原始碼]

如果只是評估“真”或“假”條件,If Then語句就非常棒。但是,如果要評估布林值以外的表示式並根據結果採取某些操作,則需要其他機制。這就是 ASP 語言包含Select Case語句的原因。這允許您基本上從多個案例列表中“選擇”要執行的操作。

Select Case的案例都是文字原始值。您必須具有“完全匹配”才能匹配“案例”。您可以包含多個要匹配的值,但不能定義要匹配的值範圍,也不能定義要匹配的模式。

 Select Case nAge
     Case 15, 16
         Response.Write "You are almost old enough to vote"
     Case 17
         Response.Write "You might want to register to vote"
     Case 18 
         Response.Write "Yes, you can vote!"
     Case Default
         Response.Write "Catch-all for all other ages"
 End Select

此選擇語句有點誤導,因為它只會告訴您,如果年齡是 18 歲且只有 18 歲,則可以投票。如果年齡大於 18 歲,則不會匹配任何特定案例。相反,當年齡大於 18 歲時,將執行可選的萬能案例(Case Default)。

當然,如果您不需要Case Default,則無需包含它。透過將其省略,您基本上是在說“如果找不到案例的精確匹配,則不執行任何操作”。

只要Select Case表示式計算結果為原始型別,您就可以使用任何表示式。您不能使用物件表示式,因為不存在可以與之比較的物件文字。但是,您可以呼叫返回原始型別的方法,並將其用作表示式。

在上面顯示的示例中,您可以看到我們正在使用回車符將Case與要執行的塊隔開。無需終止此型別的程式塊。它由下一個案例的例項或End Select終止。您還可以透過使用冒號(:)作為語句分隔符將案例和要執行的操作放在同一行

 Select Case nAge
     Case 15, 16 : Response.Write "You are almost old enough to vote"
     Case 17 : Response.Write "You might want to register to vote"
     Case 18 : Response.Write "Yes, you can vote!"
     Case Default : Response.Write "Catch-all for all other ages"
 End Select

迴圈結構

[編輯 | 編輯原始碼]

迴圈結構用於重複執行相同的步驟。使用迴圈可能有許多原因。在資料庫驅動的 Web 應用程式中,您通常會使用迴圈來迭代記錄集中返回的每個記錄。

For Next 迴圈

[編輯 | 編輯原始碼]

“for next”迴圈允許你使用增量計數器重複一段程式碼。計數器在迴圈開始時初始化,並在迴圈結束時遞增。在每次重複開始時,都會檢查計數器是否已超過結束值。這最好用一個例子來解釋。

 For I = 1 To 10
     Response.Write "I = " & I & "<br>"
 Next

在這個例子中,我們建立了一個重複10次的迴圈。我們知道它正好執行十次,因為你可以將語句理解為“對於從1到10的每個整數,執行此操作”。

變數“I”被初始化為1,程式塊(縮排)的第一次重複被執行。輸出將是“I = 1”。不用擔心“<br>”部分,這只是HTML程式碼,用於在網頁上建立換行符。

第二次迴圈時,計數器(I)遞增並取值為2。所以這個塊輸出的第二行是“I = 2”。這個過程會重複,I每次遞增1,直到計數器超過結束值。所以在這種情況下,最後列印的行將是“I = 10”。

在一個更高階的例子中,我們可以改變索引遞增的方式。如果我們希望計數器每次遞增2,我們將這樣編寫For Next迴圈。

 For I = 1 To 10 Step 2
     Response.Write "I = " & I & "&lt;br&gt;"
 Next

這段程式碼的輸出將是

 I = 1
 I = 3
 I = 5
 I = 7
 I = 9

這次我們只得到了迴圈輸出的五個值。這是因為我們使計數器每次遞增2而不是1(預設值)。注意,我們不必以結束值(10)結束。在將計數器從9遞增到11之後,迴圈檢查我們是否已超過結束值(10)並退出迴圈。

你也可以像這樣倒著計數

 For I = 10 To 1 Step -1
     Response.Write "I = " & I & "&lt;br&gt;"
 Next

當然,你可以用表示式和變數來替換起始值、結束值,甚至迴圈的“步長”

 For I = nX + nY To YourFunc(nZ) Step nStep
     Response.Write "I = " & I & "&lt;br&gt;"
 Next

另一個迴圈結構是Do While迴圈,只要條件滿足,它就會重複一段程式程式碼。這有點像If Then條件語句,因為它期望一個布林表示式。以下是它的樣子

 I = 1
 bFound = False
 Do While I < 10
     Response.Write "I = " & I & "&lt;br&gt;"
     I = I + 1
 Loop

這裡我們有一個迴圈,它與上一節中顯示的For Next示例執行完全相同的事情。為什麼你要使用這種結構而不是“for next”?當不容易確定需要執行多少次迴圈時,問題就變得很明顯了。

 X = 239821.33
 Do While X > 1
     Response.Write "X = " & X & "&lt;br&gt;"
     X = X / 2
 Loop

在這種情況下,我們不知道必須將X的值除以2多少次才能得到小於或等於1的值。所以我們只需使用Do While迴圈來處理我們的邏輯。

Do UntilDo While迴圈結構幾乎相同。它的工作原理完全相同,只是它重複程式塊直到條件評估為“true”。你基本上可以透過用Not (expr)括起你的表示式來用“Do While”做同樣的事情,但是ASP的建立者意識到使用這個更符合邏輯的語句會使程式碼更簡潔。

 X = 239821.33
 Do Until X <= 1
     Response.Write "X = " & X & "&lt;br&gt;"
     X = X / 2
 Loop

這裡,我們建立了一個迴圈,它與我們的“do while”執行完全相同的事情。我們只是反轉了條件語句的邏輯並更改了關鍵字為Do Until。在這種情況下,它並沒有使程式碼更易於閱讀。但正如我們稍後將看到的,在某些情況下,你確實需要使用Do Until

While迴圈的工作原理與Do While完全相同,只是它的結構稍微短一些。請閱讀“Do While”部分以瞭解此迴圈結構的工作原理。

 X = 239821.33
 While X > 1
     Response.Write "X = " & X & "&lt;br&gt;"
     X = X / 2
 Wend

與“Do”迴圈不同,While迴圈程式塊以Wend語句結束。

Active Server Pages 有許多不同的控制流語句來處理ASP頁面執行。條件語句有:If ThenIf Then ElseSelect Case。迴圈結構有For NextDo WhileDo UntilWhile。ASP中的條件表示式不需要用括號(“(”和“)”)括起來。

For Next迴圈操作一個計數器,並重復程式塊直到計數器超過結束值。Do WhileDo UntilWhile迴圈根據布林表示式的評估結果重複(意味著表示式結果為“true”或“false”)。

複習題

[編輯 | 編輯原始碼]
  • ASP中有哪些型別的條件語句?
  • ASP中有哪些型別的迴圈結構?
  • For Next迴圈的三個引數是什麼?
  • 如何使用For Next迴圈倒著計數?
  • 使用哪個迴圈重複直到滿足條件?
  • 使用哪個迴圈重複當滿足條件時?
  • 如何終止Do While迴圈的程式塊?
  • 如何終止While迴圈的程式塊?
  • 建立一個For Next迴圈,輸出從10到100且能被10整除的整數。
上一頁:表示式 索引 下一頁:函式和子程式
華夏公益教科書