Octave 中的敘述(statements)可以是簡單的常數或是複雜的運算式與判斷式。控制敘述(control statements)可以控制 Octave 程式的執行,例如:if
或 while
等敘述。許多控制敘述中還會包含了其他的敘述,例如 if
敘述就常常包含了一些可執行或是不可執行的敘述。
每一個控制敘述都會包含一個對應的結束敘述,例如 endif
就是表示 if
敘述的結束,endwhile
則表示 while
敘述的結束,所有的結束敘述都可以簡寫成 end
,但建議還是以完整的結束敘述為主,因為使用完整的結束敘述可以提供 Octave 更多資訊以偵測程式上可能發生的錯誤(例如漏寫了結束敘述等)。
介於控制敘述(例如
if
)與其對應的結束敘述(例如 endif
)之間的敘述,稱為此控制敘述的主體(body)。
if 敘述(The if Statement)
if
敘述會根據使用者指定的條件判斷式而決定是否要執行某一段程式,此敘述有三種用法,最簡單的就像這樣:
if (condition) # then-body endif
if
敘述會根據 condition
的結果來決定是否要接下去執行,若 condition
的結果為 true
,則會執行 then-body
部分的程式碼。而 condition
的計算結果若為 0
,則會被視為 false
,若不是 0
則視為 true
;若 condition
的結果是一個向量,則只有在向量中所有的元素都是 0
的情況下才會被視為 false
,其他的情形都會被視為 true
。
if
敘述的第二種使用方式是多加入一個 else
敘述:
if (condition) # then-body else # else-body endif
若 condition
的結果為 true
則執行 then-body
,否則執行 else-body
。例如:
if (rem (x, 2) == 0) printf ("x is even\n"); else printf ("x is odd\n"); endif
在這個列子中,若是 rem (x, 2) == 0
的結果為 true
(即 x
被 2
整除),則第一個 printf
會被執行,否則執行第二個 printf
。
if
敘述的第三種使用方式(也是最常見的方式)是再加入一個 elseif
敘述,這樣可以允許加入多個不同的判斷式:
if (condition) # then-body elseif (condition) # elseif-body else # else-body endif
elseif
敘述的個數沒有限制,這些判斷式會依照順序執行,當其中一個 condition
的結果為 true
時,則會執行其對應的程式碼,之後剩餘的 elseif
則會直接跳過,不會繼續檢查;若每一個判斷式皆為 false
,則會執行 else-body
。else
敘述必須放在最後一個位置,並且一組 if
敘述中最多只能有一個 else
敘述。
下面的範例中,當 rem (x, 2) == 0
的結果為 true
時(即 x
被 2
整除),則會執行第一個 printf
,若其結果為 false
,則會繼續判斷第二的 elseif
中的 rem (x, 3) == 0
,若其結果為 true
(即 x
被 3
整除),則會執行第二個 printf
;若兩個判斷式的結果都是 false
,則會執行最後一個 printf
。
if (rem (x, 2) == 0) printf ("x is even\n"); elseif (rem (x, 3) == 0) printf ("x is odd and divisible by 3\n"); else printf ("x is odd\n"); endif
elseif
不能像 Fortran 語言一樣拆成 else if
,如果拆成這樣的寫法,Octave 視為在一個 else
敘述中包含另外一個 if
敘述,例如:
if (c1) # body-1 else if (c2) # body-2 endif
若是這樣寫 Octave 會將最後一行的 endif
視為第二個 if
敘述的結束,若是使用互動是的命列列輸入,則 Octave 會繼續等待使用者輸入程式碼,直到輸入了第一個 if
敘述的 endif
為止;若從檔案中載入程式碼,則 Octave 可能會出現警告訊息或是直接產生錯誤的結。將此程式碼重新排版後,更可以看出問題所在:
if (c1) # body-1 else if (c2) # body-2 endif
這樣就可以很明顯的看出最後少了一個 endif
敘述。