2014年8月7日 星期四

簡單if區塊

指令是程式最基本組成單元,其特徵是每道指令必有一個分號 ; 作結束,
因此,要數程式有幾道指令,最簡單方法就是數有幾個分號。
指令中最簡單就屬空指令,即單獨一個分號,前面不寫任何東西。
程式若遇空指令則不作事,直接跳到下一道指令執行。

又許多指令可以合併成一個區塊,其特徵是每個區塊必有一組大括號 {} 包夾起來。
區塊內可以放置眾多指令,供依序執行之用。
最簡單的區塊不外乎空區塊,內含0個指令,其作用和空指令相當,不作事。
次簡單的區塊則為單指令區塊,只含一個指令。
語法上,單指令區塊,其包夾之大括號皆可省略,
但初學者宜留著大括號,以方便區塊結構之辨識。

一個區塊的地位等同於一道指令,凡可以放置指令的地方都可以放置區塊
因此,區塊內除了放置指令,也可以放置區塊,形成多層區塊包夾情形。

程式正常是一道一道指令循序執行,若將每道指令視為單指令區塊,
則程式也可看成是一個一個區塊循序執行
如果在循序執行過程,希望有某區塊能依情況略過不執行
這時簡單if區塊就可以派上用場,其結構如下,

if(條件)
{
   // 此處放置條件成立情況下想執行之區塊指令
}

其中,if區塊最前面的條件可決定該區塊要不要執行,有點像流程轉向控制開關。
條件可放置任何能算出真或假值的邏輯運算式
若條件得到真,則區塊會進入執行;
若得到假,則略過區塊,跳到下一指令或區塊執行。

舉例: 假設scanner為初始化之掃瞄器物件。

int x;

x=scanner.nextInt();  // cin >> x;

if(x>5)
{
  System.out.printf("x:%d > 5\n", x);  // cout << "x:" << x << ">5" << endl;
}

System.out.printf("x:%d\n", x); // cout << "x:" << x << endl;

以上程式碼以區塊觀點共分成4區塊,
第1區塊宣告配置整數變數x指令,
第2區塊為x由掃瞄器物件給初值指令,
第3區塊為if區塊,含列印x>5指令,
但區塊執不執行由條件x>5為真否決定,
第4區塊為列印x值指令。

循序執行4區塊結果,於第2區塊接收x值後,
若x值大於5,則x>5條件成立,會進入第3的if區塊印x>5;
若x值小於等於5,則x>5條件不成立,會略過第3的if區塊不印x>5;
但不管印不印x>5,最後都會到第4區塊印x值。

可見簡單if區塊的用途適合在選擇性決定要不要多作事的情況。
選擇的依據就是區塊前的給定條件,多作事的內容則記錄在區塊內。

至於為何稱為簡單if區塊結構?
理由是以後還有完整if區塊結構,除了原來成立要執行的if區塊,
還有不成立要執行的else區塊,算是簡單if區塊的擴充完整版。


PS: 中英對照
分號  semicolon
大括號 brace
指令 statement
區塊 block
空指令  null statement
空區塊  null block
包夾 enclose
條件 condition
邏輯運算式 logical expression
循序執行 sequential execution
單指令區塊 single-statement block
簡單if區塊 simple if-block
完整if區塊 complete if-block
結構  construct,structure

沒有留言: