2010-10-15

PureBASIC 判斷式

摘錄自PureBasic - A Beginner's Guide for Computer Programming, written by Gary Willoughby

謝謝該書作者大方分享!


If 判斷式

If 判斷式
    ......  <-- 符合判斷式
else
    ......  <-- 不符合判斷式
endif
Value1.l = 10
Value2.l = 5
Value3.l = 1

If Value1 >= 10 And (Value2 / 5) = Value3
 Debug "The expression evaluates as true"
Else
 Debug "The expression evaluates as false"
EndIf
在IF...EndIf用法上,還可以加入ElseIf的方式來增加判斷情況,實際用法如下:
NumberOfBeads.l = 10

If NumberOfBeads < 5
 Debug "The variable has a value below '5'"
ElseIf NumberOfBeads > 5
 Debug "The variable has a value above '5'"
Else
 Debug "The variable has a value of '5'"
EndIf

Select判斷式

跟著PureBASIC有種很像C語言中While的判斷式,叫做Select。它的語法如下
Select variable/expression
    Case
        ....
    Case
        ....
    Default
        ....
EndSelect
Weight.l = 12

Select Weight
 Case 0
  Debug "No Weight"
 Case 1, 2, 3
  Debug "Light"
 Case 4 To 15
  Debug "Medium"
 Case 16 To 30
  Debug "Heavy"
 Default
  Debug "Massive"
EndSelect
接下來用一個比較複雜一點,但卻帶有PureBASIC標準人機互動的程式,來說明Select
If OpenConsole()
 PrintN("1. Official PureBasic Home")
 PrintN("2. Official PureBasic Forums")
 PrintN("3. PureArea.net")
 PrintN("")
 PrintN("Enter a number from 1 To 3 and press Return: ")
 Destination.s = Input()
 Select Destination
  Case "1"
   RunProgram("http://www.purebasic.com")
  Case "2"
   RunProgram("http://forums.purebasic.com")
  Case "3"
   RunProgram("http://www.purearea.net")
 EndSelect
EndIf
End
PureBASIC如果要用傳統文字方式來輸出入,就需要用OpenConsole()來打開一個傳統終端機視窗。PrintN則是一個輸出一行後會直接換行的函式。Input()則是讀取標準輸入,接著RunProgram則是會執行外部指令。

For迴圈

接著要介紹的是迴圈(loop),這裡是一個最基本的'For'迴圈語法。
For x.l = 1 To 10
 Debug x
Next x

而接下來,我們來看看如何利用For迴圈來輕易地叫出陣列中的所有元素
Dim Names.s(3)

Names(0) = "Gary"
Names(1) = "Sara"
Names(2) = "Stella"
Names(3) = "MiniMunch"

For x.l = 0 To 3
 Debug Names(x)
Next x
從上例我們可以看到,因為陣列因子也是採用數值,所以就可讓For迴圈來使用。因此我們也可以來看看For迴圈的判斷式內如何加入運算過程:
StartVar.l = 5
StopVar.l = 10

For x = StartVar - 4 To StopVar / 2
 Debug x
Next x
當然,如此一來也可以透過巢狀迴圈來支援多維陣列
Dim Numbers.l(2, 2)

Numbers(0, 0) = 1
Numbers(0, 1) = 2
Numbers(0, 2) = 3
Numbers(1, 0) = 4
Numbers(1, 1) = 5
Numbers(1, 2) = 6
Numbers(2, 0) = 7
Numbers(2, 1) = 8
Numbers(2, 2) = 9

For x = 0 To 2
 For y = 0 To 2
  Debug Numbers(x, y)
 Next y
Next x
這裡還要補充一個For迴圈的設定值step,它可以決定每次的值要更動多少:
For x.l = 0 To 10 Step 2
 Debug x
Next x

Foreach 迴圈
這迴圈比較特別,只針對連結串列(Linked List)
NewList Shopping.s()

AddElement(Shopping())
Shopping() = "Bunch of bananas"

AddElement(Shopping())
Shopping() = "Tea bags"

AddElement(Shopping())
Shopping() = "Cheese"

ForEach Shopping()
 Debug Shopping()
Next

While迴圈

這是很常見的一種迴圈,以While開頭,進入判斷式,符合者就進入並且一直重複檢查,直到條件被滿足時,就跳到Wend結尾。不過要特別注意的就是,如果一開始條件就不滿足,則迴圈內容就完全不會被執行。

Monkeys.l = 0

While Monkeys < 10
 Debug Monkeys
 Monkeys + 1
Wend
Repeat迴圈 這跟While迴圈很類似,只是判斷式位置不同。不過它可以配合的關鍵字有until與forever兩種,以下先看until的案例:
Bananas.l = 0

Repeat
 Debug Bananas
 Bananas + 1
Until Bananas > 10
因為它把判斷式放在最後,所以與while不同的是,縱使一開始條件就不符合,但迴圈內容也至少會被執行過一次才會結束。此外,我們接著來看Forever的案例。不過也正因為它如字面所示,會一直持續執行下去,所以撰寫者要謹記在心,你得另外安排判斷式,以供條件滿足時,可以跳離迴圈。否則只能用強制手段中止整個程式。譬如透過Menu:Debugger裡面的kill program來處理
Counter.l = 0

Repeat
 Debug Counter
 Counter + 1
ForEver
PureBASIC有預留兩個關鍵字來預防這種情況,分別是'Break'與'Continue'。接著先來看看Break的案例:
For x = 1 To 10
 If x = 5
  Break
 EndIf
 Debug x
Next x
這時候你會看到程式迴圈只輸出到4就結束了。而另外一個例子是:
For x.l = 1 To 10
 Counter = 0
 Repeat
  If x = 5
   Break 2
  EndIf
  Counter + 1
 Until Counter > 1
 Debug x
Next
接著來看continue這個關鍵字的範例
For x.l = 1 To 10
 If x = 5
  Continue
 EndIf
 Debug x
Next

沒有留言: