第五章 語句

簡單語句和複合語句

Pascal 簡單語句中不包含任何別的語句,賦值語句和過程調用即是簡單語句的例子。簡單語句用分號隔開,如下所示:

X := Y + Z;  // assignment
Randomize;   // procedure call

begin 和end 將簡單語句括起來即組成複合語句,複合語句用法與普通的Pascal 語句相同,見下例:

begin
  A := B;
  C := A * 2;
end;

end之前的最後一條語句末尾分號不是必需的,你可以寫成:

begin
  A := B;
  C := A * 2
end;

這兩種寫法都是正確的。第一種多了一個無用(但也無害)的分號。分號實際上是一個空語

句,也就是說,是一個沒有代碼的語句。有時,空語句可用在循環體或其他特殊情況中。

賦值語句

Pascal 語言中賦值語句用冒號-等號操作符“:=”,對使用其他語言的編程人員來說這是一個奇怪的符號。在其他語言中用作賦值符號的“=”在Pascal 中用作關係運算符,用於判斷是否相等

 

條件語句

條件語句通過條件檢測,判斷是否執行該條件語句中包含的語句。條件語句可有兩種基本形式:if語句和case語句。

If語句

if-then型語句,僅當條件滿足時,語句才執行;對if-then-else型,if語句在兩條語句中選擇一條執行。條件用布爾表達式建立

procedure TForm1.Button1Click(Sender: TObject);
begin
  // simple if statement
  if CheckBox1.Checked then
    ShowMessage ('CheckBox1 is checked')
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  // if-then-else statement
  if CheckBox2.Checked then
    ShowMessage ('CheckBox2 is checked')  //沒有 分號
  else
    ShowMessage ('CheckBox2 is NOT checked');
end;
要注意的是,不能在第一句之後、else 關鍵詞之前加分號,否則編譯器將告知語法錯誤。
實際上,if-then-else 語句是單純的一條語句,因此不能在語句中間加分號。
Case語句 

如果你的if語句變得非常複雜,有時可以用case語句代替它。case語句包括用來選值的

表達式、可能值序列或一個取值範圍。這些值應該是常量,並且它們必須唯一,而且應屬於

有序類型。Case語句最後可以帶一個else 語句,當沒有一個標籤與選擇器的值一致時,

執行else語句。下面是兩個簡單的例子:

case Number of
  1: Text := 'One';
  2: Text := 'Two';
  3: Text := 'Three';
end;

case MyChar of
  '+' : Text := 'Plus sign';
  '-' : Text := 'Minus sign';
  '*', '/': Text := 'Multiplication or division';
  '0'..'9': Text := 'Number';
  'a'..'z': Text := 'Lowercase character';
  'A'..'Z': Text := 'Uppercase character';
else
  Text := 'Unknown character';
end;
Pascal語言中的循環 

其它編程語言中使用的循環語句,Pascal語言中都有,它們包括 forwhilerepeat

語句。如果你用過其他編程語言,你會發現Pascal中的循環語句沒什麼特別的,因此這裏

我只作簡要的說明。

For循環

Pascal 中的for循環嚴格地建立在計數器基礎上,循環每執行一次,計數器不是增加一個值

就是減小一個值。下面是一個for語句的簡例,用來將前十個數加起來:

var
  K, I: Integer;
begin
  K := 0;
  for I := 1 to 10 do
    K := K + I;

同樣的for語句可以用正好相反的計數器來寫:

var
  K, I: Integer;
begin
  K := 0;
  for I := 10 downto 1 do
    K := K + I;

Pascal 中的for循環語句其靈活性比其他語言小(它不能指定1之外的步長),不過簡單也

容易理解。如果需判斷的條件比較複雜,或想自定義計數器,你可以用while語句或 repeat

語句,而不是for循環語句。

注意for循環計數器不必非是數字,它可以是任何有序類型的值,例如一個字符或一個枚舉類

型值。

while語句和repeat語句

while-do 循環語句和 repeat-until 語句的不同點在於repeat 循環語句的代碼至少要執行

一次。從下面的簡例很容易理解這一點:

while (I <= 100) and (J <= 100) do
begin
  // use I and J to compute something...
  I := I + 1;
  J := J + 1;
end;

repeat
  // use I and J to compute something...
  I := I + 1;
  J := J + 1;
until (I > 100) or (J > 100);

從上可見即使 I J 的初始值大於100,repeat-until循環中的代碼也仍會執行一次。

注意:兩種循環另一個關鍵的不同點是,repeat-until 循環的條件是反向的條件,只要不滿足

這個條件,循環就執行;當條件滿足時,循環終止。這正好與while-do 循環相反,while-do

循環當條件是真值時才執行。爲此,我不得不在上面代碼中用反向條件來獲得相同的結果。

 

注意:用 BreakContinue 系統過程可以改變循環執行的標準流程。Break 中斷循環;

Continue直接跳至循環測試句,或使計數器增加一個步長,然後繼續循環(除非條件爲空或

計數器達到最大值)。還有兩個系統過程 ExitHalt,讓你立即從函數或過程中返回,或者

終止程序。

With語句

我要講的最後一種Pascal 語句是With語句,With語句是Pascal編程語言獨有的語句,不過

最近JavaScript 和Visual Basic也添加了這種語句,它在Delphi程序設計中很有用。

With語句是一種用於簡化代碼的語句。如你要訪問一個記錄類型變量(或一個對象),用

With語句就不必每次重複變量的名字。例如對於以下的記錄類型代碼:

type
  Date = record
    Year: Integer;
    Month: Byte;
    Day: Byte;
  end;

var
  BirthDay: Date;

begin
  BirthDay.Year := 1997;
  BirthDay.Month := 2;
  BirthDay.Day := 14;

可以用with語句改進後半部分代碼,如下:

begin
  with BirthDay do
  begin
    Year := 1995;
    Month := 2;
    Day := 14;
  end;

Delphi程序中,這種方法能用於訪問控件和類變量。現在通過with語句訪問列表框的條目,

我們重寫上面循環例子的最後部分:

procedure TForm1.WhileButtonClick(Sender: TObject);
var
  I: Integer;
begin
  with ListBox1.Items do
  begin
    Clear; // shortcut
    Randomize;
    I := 0;
    while I < 1000 do
    begin
      I := I + Random (100);
      // shortcut:
      Add ('Random Number: ' + IntToStr (I));
    end;
  end;
end;

當你使用控件或類時,with語句通常能簡化你的代碼,尤其對嵌套域。例如,你要改變

窗體畫筆的寬度和顏色,你可以寫代碼如下:

Form1.Canvas.Pen.Width := 2;
Form1.Canvas.Pen.Color := clRed;

但如果用With語句代碼會更簡單:

with Form1.Canvas.Pen do
begin
  Width := 2;
  Color := clRed;
end;

當編寫的代碼很複雜時,with語句會很有用,也可省去一些臨時變量。但是這樣做也有

缺點,因爲這樣將使代碼的可讀性變差,特別對有相似或相同屬性的對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章