上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
DELPHI语法编程基础(7)
作者:未知 申领版权
2010年12月12日 共有 1598 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    With语句 
    要讲的最后一种Pascal 语句是With语句,它在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语句会很有用,也可省去一些临时变量。但是这样做也有缺点,因为这样将使代码的可读性变差,特别对有相似或相同属性的对象。
    更严重的是,使用with语句可能会在代码中融入微妙的逻辑错误,甚至连编译器都难以发现。例如:
    with Button1 do
    begin
    Width := 200;
    Caption := 'New Caption';
    Color := clRed;
    end;
    这段代码改变了按钮的Caption 和 Width属性,但也改变了窗体的Color属性,而不是按钮的颜色!其原因是 TButton 控件没有Color属性, 又由于执行的代码是针对窗体对象的(我们正在写窗体的方法),所以窗体对象即成为默认的访问对象。如果这样写:
    Button1.Width := 200;
    Button1.Caption := 'New Caption';
    Button1.Color := clRed; // error!
    编译器会给出一个错误。通常,由于with语句在当前的块中定义了新的标识符,省略了原有的标识符,可能引起在同一块内错误地访问另一个标识符(就象上面的这段代码)。即使存在种种缺陷,我还是建议你习惯于使用with语句,因为with语句确实是非常便利,并且有时也会使代码更容易读懂。
    然而,你应该避免使用多个with语句,如:
    with ListBox1, Button1 do...
    这样会使后面的代码非常难读,因为,对该块中定义的每个属性,你都要根据相应的属性以及控件的次序,才能推出所访问的控件。
    注意:说到可读性,要知道Pascal 没有endif 或endcase 语句。如果if语句有一个begin-end 块,那么end标志语句结束;另外,case语句也总是以一个end结束。所有这些end语句,常常是一个接一个,使代码难以理解,只有通过缩排跟踪,才能追出一个end所对应的语句。解决这个问题的一个通用办法, 也是使代码更可读的办法,是在end后面加注释,如下例:
    if ... then
    ...
    end; // if
    Pascal 过程与函数 
    Pascal中的例程有两种形式:过程和函数。理论上说,过程是你要求计算机执行的操作,函数是能返回值的计算。两者突出的不同点在于:函数能返回计算结果,即有一个返回值,而过程没有。两种类型的例程都可以带多个给定类型的参数。
    不过实际上函数和过程差别不大,因为你可以调用函数完成一系列操作,跳过其返回值(用可选的出错代码或类似的东西代替返回值);也可以通过过程的参数传递计算结果(这种参数称为引用,下一部分会讲到)。
    下例定义了一个过程、两个函数,两个函数的语法略有不同,结果是完全相同的。
    procedure Hello;
    begin
    ShowMessage ('Hello world!');
    end;
    
    function Double (Value: Integer) : Integer;
    begin
    Double := Value * 2;
    end;
    
    // or, as an alternative
    function Double2 (Value: Integer) : Integer;
    begin
    Result := Value * 2;
    end;
    流行的做法是用Result 给函数赋返回值,而不是用函数名。
    一旦定义了这些例程,你就可以多次调用,其中调用过程可执行操作;调用函数能计算返回值。如下:
    procedure TForm1.Button1Click (Sender: TObject);
    begin
    Hello;
    end;
    
    procedure TForm1.Button2Click (Sender: TObject);
    var
    X, Y: Integer;
    begin
    X := Double (StrToInt (Edit1.Text));
    Y := Double (X);
    ShowMessage (IntToStr (Y));
    end;
    提示:当调用一个现有的Delphi 函数、过程或任何VCL方法时,你应该记住参数的个数及其数据类型。不过,只要键入函数或过程名及左括号,Delphi 编辑器中会出现即时提示条,列出函数或过程的参数表供参考。这一特性被称为代码参数(Code Parameters) ,是代码识别技术的一部分。

    

 

相关新闻

每一个程序员要遵守的一些优秀编程风格
代词it, that, one, the one 的辨析
《VB程序设计基础》选择题
Is Family Life Changing
设计模式之Iterator
设计模式之Visitor
设计模式之Interpreter(解释器)
设计模式之Mediator(中介者)
设计模式之Strategy(策略)
设计模式之State

您可能对这些感兴趣  

第7讲 综合分析BIM在运用与推广中的障碍问题
考核学生质量的困难
日本福岛核电站事故初步分析
论科技异化与科技人化
中国科技计划项目管理现状与对策
财政科技资金的审计重点和内容
软科学研究机构在政府决策中的功效、困境及对策研究
打造超级DOS系统(下)
DOS命令基础应用(6)
打造超级DOS系统(上)

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》