第五章 语句

来源:互联网 发布:中兴软件南昌公司如何 编辑:程序博客网 时间:2024/04/24 01:27

简单语句和复合语句

Pascal 简单语句中不包含任何别的语句,赋值语句和过程调用即是简单语句的例子。简单语句用分号隔开,如下所示:

X := Y + Z;  // assignmentRandomize;   // procedure call

begin 和end 将简单语句括起来即组成复合语句,复合语句用法与普通的Pascal 语句相同,见下例:

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

end之前的最后一条语句末尾分号不是必需的,你可以写成:

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

这两种写法都是正确的。第一种多了一个无用(但也无害)的分号。分号实际上是一个空语

句,也就是说,是一个没有代码的语句。有时,空语句可用在循环体或其他特殊情况中。

赋值语句

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) dobegin  // 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 dobegin  Width := 2;  Color := clRed;end;

当编写的代码很复杂时,with语句会很有用,也可省去一些临时变量。但是这样做也有

缺点,因为这样将使代码的可读性变差,特别对有相似或相同属性的对象。