(delphi11最新学习资料) Object Pascal 学习笔记---第3章第5.2节( Break和Continue语句)

Object Pascal 学习笔记,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆豆爸

3.5.2 使用Break和Continue语句改变执行流程

​ 尽管每种循环之间存在一定差异,但是每种循环都允许您基于一定规则多次执行一组语句。但是,在某些情况下,您可能希望添加一些额外的行为。例如,假设您有一个for循环,其中搜索给定字母的出现次数(此代码是FlowTest示例的一部分):

var
  S: string;
  I: Integer;
  Found: Boolean;
begin
  S := 'Hello World';
  Found := False;
  for I := Low(S) to High(S) do
    if S[I] = 'o' then
      Found := True;

​ 最后,您可以检查found的值,以查看给定的字母是否是字符串的一部分。问题是,程序会不断重复循环,即使在找到一个给定的字符后仍然要继续查找该字符(这在字符串很长的情况下是个问题)。

​ 一个经典的替代方法是将其转换为 while 循环,同时检查两个条件(循环计数器和 Found 的值):

var
  S: string;
  I: Integer;
  Found: Boolean;
begin
  S := 'Hello World';
  Found := False;
  I := Low(S);
  while not Found and (I < = High(S)) do
  begin
    if S[I] = 'o' then
      Found := True;
    Inc(I);
  end;

​ 虽然这段代码逻辑性和可读性强,但需要的代码量较多,而且如果条件变得多样化和复杂,将所有各种选项组合在一起将使代码非常难以理解。

​ 这就是为什么这种语言(或更确切地说,其运行时支持)提供系统过程(system procedure)允许您改变循环执行的标准流程:

  • Break过程中断循环,直接跳到循环体后的第一条语句,结束循环执行。
  • Continue过程跳转到循环测试或计数器增量,继续循环的下一次迭代(除非条件不再为真或计数器达到其最大值)。

​ 使用Break操作,我们可以修改原始匹配字符的循环如下:

var
  S: string;
  I: Integer;
  Found: Boolean;
begin
  S := 'Hello World';
  Found := False;
  for I := Low(S) to High(S) do
    if S[I] = 'o' then
    begin
      Found := True;
      Break; // 跳出for循环
    end;

​ 另外两个系统过程ExitHalt,让您立即从当前函数或过程返回或终止程序。我将在下一章中介绍Exit,而实际上没必要调用Halt,因为它会突然终止程序(因此我不会在书中真正讨论它)。

难道Goto语句来了?不会!

​ 实际上,除了上面介绍的四个系统过程之外,还有更多的方式来中断程序执行流程。最初的 Pascal 语言的特点之一就是臭名昭著的 goto 语句,,该语句允许你在源代码的任何一行附加一个标签,并从程序的另一个位置跳转到该行。条件语句和循环语句都揭示了为什么要偏离顺序代码流,而 goto 语句则不同,它一般看起来像不规则的跳转,而且确实是完全不受欢迎的。我有提到它们在Object Pascal中受到支持吗?没有,我根本没有提,并且我也不会向您展示代码示例。对我来说,goto已经过时。

注解:还有其他语言语句,我到目前为止还没有涉及,但它们是语言定义的一部分。其中之一是with语句,与记录专门相关,因此我将在第5章中进行介绍。with是另一个备受争议的语言特性,但仍然经常使用。

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值