NotOnlyCode / NOC

關於部落格
an open platform for discussing about the generative design on Rhinoceros
  • 4991

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

07=Introduction to RhinoSrcipt (Conditional Statements)

        在之前最早的介紹中,我們有提到過 Rhino 中 Marcos 與 Scripts 之間的差異。簡單的說,前者是線性序列的,而後者則是一種非線性序列的、動態的程式。Scripts 之所以可以達到非線性序列的原因主要來自 Flow Control,如果我們用最簡單的方式來解釋 Flow Control,它是可以使某些「命令列」(lists) 重複執行或是跳過某些命令列不執行的功能。在VB語言中的 Flow Control 主要來自兩者:Loops, Conditional Statements。Loops 就是之前我們已經介紹過的迴圈,透過迴圈我們可以讓某些命令列不斷重複執行。本文要說明的則是 Conditional Statements,就字面上的解釋我們可以稱之為條件陳述。簡單地說,透過 Conditional Statements 我們可以使得某些命令列執行或者跳過不執行,關鍵就在於是否符合或不符合我們所設下的條件。在VB語言中的 Conditional Statements 主要分為兩種:(1) If...Then、(2) Select Case,以下就上述兩者做進一步說明。
(1) If...Then
        就字面上來口譯,If...Then 就是「如果***,就***」。也就是說,當程式符合某個我們所設下的條件時,就執行某個 (些) 命令列,如果不符合就跳過某個 (些) 命令列而接著繼續讀碼。一個典型的 If...Then 語法如下:

        If <condition> Then
            Statement(s)
        Else
            Statements
        End If

        上述式子可以口譯為「如果符合***,就做***,如果不符合就做***」。以下我們用個例子來練習,試求某數為奇數或偶數:

        Sub Check_Number(N)
            If (N Mod 2 = 0) Then
                Call Rhino.Print(N & " is an even number")
            Else
                Call Rhino.Print(N & " is an odd number")
            End If
        End Sub

        Call Check_Number(1)
        Call Check_Number(2)
        Call Check_Number(3)
        Call Check_Number(4)

        上面這個式子一開始設定了一個 Sub 叫做 Check_Number,這個 Sub 可以送入一個數值 N。當 N 送入之後進入一個 If...Then 的條件陳述式,如果送入的 N 除以 2 餘數為 0,則列印 N is an even number,如果不符和上述條件則列印 N is an odd number。我們從這個式子中發現並不是每行的命令列都被執行,而是選擇執行某命令列跳過某命令列,這就是本文一開始提到 Flow Control 的特性。到目前為止,如果能夠善用 Loops 與 If...Then 其實已經可以寫出很多有趣的小程式,也就是說,當能夠活用 Loops 與 If...Then 已經可以算是個會寫程式的人了。
(2) Select Case
        如果說 If...Then 比較像是非此即彼,那麼 Select Case 則是可以設定多種條件,所以當我們的條件狀態在三種以上時,基本上我們會建議使用 Select Case。我們直接用範例來說明 Select Case 的使用方式,以下的式子是求出某數值除以3之後的餘數為何。

Sub Remainder(N)
  Select Case (N Mod 3)
  Case 0 Call Rhino.Print("the remainder of " & N & "divided by 3 is 0")
  Case 1 Call Rhino.Print("the remainder of " & N & "divided by 3 is 1")
  Case 2 Call Rhino.Print("the remainder of " & N & "divided by 3 is 2")
  End Select
End Sub

Call Remainder(6)
Call Remainder(7)
Call Remainder(8)

        上述的式子一開始設定了一個名為 Remainder 的 Sub,這個 Sub 必須送入一個變數 N。當變數 N 送入之後,求出 N 除以 3 的餘數,如果餘數為 0 則列印 the remainder of N divied by 3 is 0,如果餘數為 1 則列印 the remainder of N divied by 3 is 1,如果餘數為 2 則列印 the remainder of N divied by 3 is 2。這個例子很簡單地說明了當條件狀態不只兩個 (非此即彼) 的時候,該如何運用 Select Case 的方式。
        本文介紹的兩個 Conditonal Statements 功能,各位可以自行設定一些簡單的數學題目或是邏輯關係加以進一步練習,因為在日後的實戰演練中,我們將經常地使用此兩者與 Loops 之間的交互運用。






相簿設定
標籤設定
相簿狀態