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