NotOnlyCode / NOC

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

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

04=Intorduction to RhinoScript (Loops-2 & Comparisons)

        本文接著要說明上文所提到的條件式迴圈,但因為這會運用到VB語言中的「比較」(comparisons)功能,因此,一開始我們將先就此部分做說明。在VB中的比較式其實已經非常接近一般的數學式,詳細如下:

                
       A  =  B   A and B are equal
       A <> B    A and B are not equal
       A > B     A is greater then B
       A >= B    A is greater then or equal to B
       A < B     A is less then B
       A <= B    A is less then or equal to B

        有了上述比較式的概念,我們就可以開始說明條件式迴圈了。首先,我們說明兩個前側式迴圈:Do While...Loop 以及 Do Until...Loop。如果我們用口語的方式來翻譯,會像是下面的說法:

                
       Do While...Loop        當符合***,就一直做
       Do Until...Loop        一直做,直到符合***為止

        上述口語翻譯中的***其實就是一個條件式,因此,Do While...Loop 的意思就是,當條件式成立時就進入迴圈,直到條件式式不成立才離開迴圈接著下一個命令列執行下去。而Do Until...Loop 則是如果一開始條件式不成立就進入迴圈,不斷重複到條件式成立才離開迴圈接著下一個命令列執行下去。這兩個迴圈的正式語法如下:

                
       Do While <condition>
          Statement(s)
       Loop
------------------------------------
       Do Until <condition>
          Statement(s)
       Loop

        而另外兩個後測式迴圈的語法基本上與前測式迴圈類似,唯一的差別只在於進入迴圈的先後順序,在一般狀態下前測式與後測式迴圈是不具差別的,但若要細微地控制進入迴圈的時間點就必須要特別留意了。舉例來說,Do While...Loop 是先判斷條件式是否成立,若成立才進入迴圈的「敘述區塊」(statements),而Do...Loop While 則是先進入迴圈中的敘述區塊,再判斷條件式是否成立,若成立則重複進入迴圈,若不成立則離開迴圈。兩個後測式迴圈的語法如下:

                
       Do
          Statement(s)
       Loop While <condition>
-------------------------------------
       Do
          Statement(s)
       Loop Until <condition>

        還有兩個迴圈我們還沒介紹,由於Do...Loop 這個無限迴圈一般來說在RhinoScript 很少使用,另一方面也經常會造成問題與困擾,所在此將不做說明。但是,另一個 While...Wend 則經常使用,甚至應該說很好用,所以大家可以特別注意一下,其口語翻譯如下:

                Whlie...Wend        當***為真就做,一直到***為假

        在此的***依舊是個條件式,整個迴圈的運作過程就是當條件式為「真」(True),則進入迴圈中的敘述區塊,接著當進行到 Wend 的陳述式時,再回去檢查一開始的條件式是否依舊為真,若為真就一直重複這些動作,直到當條件式為「假」(False)則離開迴圈接著下一個命令列執行下去。其正式語法如下:

               
                 Whlie <condition>
          Statement(s)
       Wend

        接下來,我們要對計數迴圈與條件式迴圈做個簡單的比較來說明兩者的適用時機。請比較下列兩個迴圈:


         Dim i

         For i = 0 To 10
            Call Rhino.Print(i)
         Next 
-------------------------------------------
         Dim n: n = 1

         Do While n<=10
            Call Rhino.Print(n)
            n = n+1
         Loop

        若各位有實際測試,應該會發現到得到的結果是相同的。那麼,For...Next 迴圈與Do...Loop 迴圈的差別究竟在哪裡?我們可以發現,For...Next 迴圈一開始就必須知道迴圈的執行次數,而 Do...Loop 迴圈則不用知道迴圈的執行次數。也就是說,當我們可以確認迴圈的執行次數時,將建議使用計數迴圈。但是,有些時候我們無法得知迴圈的執行次數,這時候就應該用條件式迴圈。此外,迴圈彼此還可以互相搭配,產生迴圈內還有迴圈,也就是所謂的「巢狀迴圈」(Nested Loop),這類相對目前來說比較複雜的運用之後我們會在實際範例中進行說明。
相簿設定
標籤設定
相簿狀態