2.1.4 跳轉語句
Object Pascal的跳轉語句有if和case兩個。
2.1.4.1 if語句
if語句會計算一個表達式,並根據計算結果決定程序流程。在上文的例程中,根據ColorDialog.Execute的返回值,決定窗體的背景顏色。if保留字後跟隨一個生成Boolean值True或False的表達式。一般用“=”作為關系運算符,比較產生一個布爾型值。當表達式為True時,執行then後的語句。否則執行else後的代碼,if語句也可以不含else部分,表達式為False時自動跳到下一行程序。
if語句可以嵌套,當使用復合語句表達時,復合語句前後需加上begin…end。else保留字前不能加“;”,而且,編譯器會將else語句視為屬於最靠近的if語句。必要時,須使用begin…end保留字來強迫else部分屬於某一級的if語句。
2.1.4.2 case語句
case語句適用於被判斷的變量或屬性是整形、字符型、枚舉型或子界型時(LongInt除外)。用case語句進行邏輯跳轉比編寫復雜的if語句容易閱讀,而且程序代碼整形較快。
下面的例程顯示一個使用case語句的窗體:
建立如下的事件處理過程:
procedure TForm1.Button1Click(Sender: TObject);
var
Number : Integer;
begin
Number := StrToInt(Edit1.Text);
case Number of
1,3,5,7,9: Label2.Caption := '奇數';
0,2,4,6,8: Label2.Caption := '偶數';
10..100:
begin
Label2.Caption := '在10到100之間';
Form1.Color := clBlue;
end;
else
Label2.Caption := '大於100或為負數';
end;
end;
執行程序,當Edit1部件接受到一個值,並按動“OK”按鈕觸發程序後,Number便被賦值為用戶輸入的數值。case語句根據Number的值判斷該執行哪一條語句。象if語句一樣。case語句也有可選擇的else部分。case語句以end結尾。
2.1.5 循環語句
Object Pascal的循環語句有三種:repeat、while和for語句。
2.1.5.1 repeat語句
repeat語句會重復執行一行或一段語句直到某一狀態為真。語句以repeat開始,以until結束,其後跟隨被判斷的布爾表達式。參閱以下的例程:
i := 0;
repeat
i := i+1;
Writen(i);
until i=10;
當此語句被執行時,窗體的下方會出現1到10的數字。布爾表達式 i=10 (注意,與其他語言不同的是,“=”是關系運算符,而不能進行賦值操作)直到repeat..until程序段的結尾才會被計算,這意味著repeat語句至少會被執行一次。
2.1.5.2 while語句
while語句和repeat語句的不同之處是,它的布爾表達式在循環的開頭進行判斷。while保留字後面必須跟一個布爾表達式。如果該表達式的結果為真,循環被執行,否則會退出循環,執行while語句後面的程序。
下面的例程達到和上面的repeat例程達到同樣的效果:
i := 0;
while i<10 do
begin
i := i+1;
writeln(i);
end;
2.1.5.3 for語句
for語句的程序代碼會執行一定的次數。它需要一個循環變量來控制循環次數。您需要說明一個變量,它的類型可以是整形、布爾型、字符型、枚舉型或子界型。
下面的程序段會顯示1到5的數字,i為控制變量:
var
i : integer;
for i := 1 to 5 do
writeln(i);
以上介紹了三種循環語句。如果您知道循環要執行多少次的話,可以使用for語句。for循環執行速度快,效率比較高。如果您不知道循環要執行多少次,但至少會執行一次的話,選用repeat..until語句比較合適;當您認為程序可能一次都不執行的話,最好選用while..do語句。
2.1.6 程序模塊
程序模塊在Object Pascal中是很重要的概念。它們提供了應用程序的結構,決定了變量、屬性值的范圍及程序執行的過程。它由兩個部分組成:可選擇的說明部分和語句部分。如果有說明部分,則必在語句部分之前。說明部分包括變量說明、常量說明、類型說明、標號說明、程序,函數,方法的說明等。語句部分敘述了可執行的邏輯行動。
在Delphi中,最常見的程序模塊便是事件處理過程中的程序模塊。下面的事件處理過程是含有變量說明部分的程序模塊:
procedure TForm.Button1Click(Sender Tobject);
var {程序模塊的說明部分}
Name : string;
begin {程序模塊的語句部分}
Name := Edit1.Text;
Edit2.Text := 'Welcome to Delphi'+Name;
end; {程序模塊結束}
庫單元也是程序模塊。庫單元的interface部分含有庫函數、類型、私有,公有域的說明,也可以含有常量、變量的說明。這一部分可以作為程序模塊的說明部分。在庫單元的implementation部分中通常含有各種事件處理過程,它們可以視為模塊的語句部分,是事件處理模塊。庫單元模塊結束於庫單元結束的end.處。
程序模塊中可以包含其他的程序模塊。上文庫單元模塊中含有事件處理模塊。而庫單元模塊實際是在工程程序模塊中。
所有的Delphi應用程序都有相同的基本結構。當程序逐漸復雜時,在程序中加入模塊即可。例如在庫單元模塊中加入事件處理模塊,向工程中加入庫單元模塊等。模塊化編程使得程序結構良好,並且對數據具有保護作用。