Delphi语法基础.doc
《Delphi语法基础.doc》由会员分享,可在线阅读,更多相关《Delphi语法基础.doc(65页珍藏版)》请在咨信网上搜索。
1、DELPHI语法基础注释 在Pascal中,注释括在大括号中或带星号的圆括号中。Delphi 也认可C+ 风格的注释,即把注释放在双斜线后。例如this is a comment(* this is another comment *)/ this is a comment up to the end of the line第一种注释方式较简略,使用也较为普遍;第二种方式在欧洲使用较广 ,因为欧洲的键盘缺少大括号;第三种方式的注释是从C+借用来的,只在32位版本的Delphi中可用,它在给一行代码加短注释时非常有用。上述三种不同的注释方式有益于进行嵌套注释。例如你要注销一段代码,而代码行中又包
2、含真正的注释行,这时采用同一种注释方式是不对的: . codecomment, creating problems. code 正确的方法是插入第二种注释方式: . code/this comment is OK. code 注意:如果左大括号或圆括号-星号后面跟美元符号($),那么其中的内容就成了编译指令,如 $X+。使用大写字母 Pascal 编译器(不象其他语言的编译器)不考虑字符的大小写,因此标识符Myname、 MyName、 myname、 myName、 和MYNAME是完全相同的。总体上来说,这是Pascal的一大优点,因为在大小写敏感的语言中,许多语法错误是由不正确的大写引起
3、的。然而大小写不敏感也有不便之处:第一,你必须注意大小写不一致的标识符实际上是相同的,以避免把他们当成不同的元素使用;第二,你必须尽量保持大写使用的一致性,以提高代码的可读性。大写使用的一致性不是编译器强制要求的,但是保持大写使用的一致性是值得提倡的好习惯。一个常用的方法是将每个标识符的第一个字母大写,标识符若由几个词组合而成(中间不能插入空格),每个词的第一个字母应大写:MyLongIdentifierMyVeryLongAndAlmostStupidIdentifier此外,编译器不编译代码中的空格、空行和Tab键空格,这些元素通称为空白,它们只用来提高代码的可读性,不影响编译过程。不同于
4、BASIC, Pascal 语句允许分行书写,即将一条长指令分割成两个或更多的代码行。允许语句分行的缺点(至少对许多BASIC程序员)是:语句结束时不能忘了加分号,更确切地说,必须记着把语句和紧接它的语句分开。语句分行唯一的限制是字符串不能跨行。关于空格和语句分行的使用没有既定的规则,以下是几点经验: Delphi 代码编辑器中有一条竖线叫右边线(Right Margin),你可以把右边线设置在60或70个字符处。如果以这条线为基准,代码不超过这条界限,那么打印到纸上的代码看起来会很好看。否则,打印时长语句会被随意分行,甚至在一个词的中间断开。 当一个函数或过程有多个参数,通常的做法是把各参数
5、放在不同的行上。 你可以在注释行前留一行空白,或把长的代码句分成较小的部分,这样能提高代码的可读性。 用空格隔开函数调用的参数,表达式中的运算符也最好用空格隔开。优化版面 关于代码编写风格的最后一条建议是:尽量使用空白优化版面。这一条很容易做到,只需要在写复合句时,以上一句为参照,下一句向右缩进两个空格,复合句内嵌的复合句缩进四个空格,依此类推。例如:if . then statement;if . thenbegin statement1; statement2;end;if . thenbegin if . then statement1; statement2;end;相似的缩进格式常用
6、于变量或数据类型声名区,也可用于语句的续行:type Letters = set of Char;var Name: string;begin long comment and long statement, going on in the following line and indented two spaces MessageDlg (This is a message, mtInformation, mbOk, 0);提出以上代码编写格式只是向你建个议而已,这样代码能更加易读,其实代码格式并不影响编译结果。关键字 关键字是Object Pascal 的保留标识符,在语言中有着特殊含义。
7、保留字不能用作标识符,指令字也同样不应该用作标识符,即使编译器允许也最好不用。在实际中你不应该把任何关键字用作标识符。表2.1是面向对象 Pascal 语言(Delphi 4)中特殊标识符的完整列表,其中包括关键字及保留字。表2.1:面向对象Pascal语言中的关键字及保留字 关键字 作用absolute 指令 (变量)abstract 指令 (方法)and 运算符 (布尔)array 类型as 运算符 (RTTI)asm 语句assembler 向后兼容 (汇编)at 语句 (异常处理)automated 访问类别符 (类)begin 块标记case 语句cdecl 函数调用协定class
8、类型const 声明或指令(参数)constructor 特殊方法contains 运算符 (集合)default 指令 (属性)destructor 特殊方法dispid dispinterface 界面类别符dispinterface类型div 运算符do 语句downto 语句 (for)dynamic 指令 (方法)else 语句 (if 或 case)end 块标记except 语句 (异常处理)export 向后兼容 (类)exports 声明external 指令 (函数)far 向后兼容 (类)file 类型finalization单元结构finally 语句 (异常处理)fo
9、r 语句forward 函数指令function 声明goto 语句if 语句implementation单元结构implements 指令 (属性)in 运算符 (集合) - 工程结构index 指令 (dipinterface界面)inherited 语句initialization单元结构inline 向后兼容 (见 asm)interface 类型is 运算符 (RTTI)label 声明library 程序结构message 指令 (方法)mod 运算符 (数学)name 指令 (函数)near 向后兼容 (类)nil 数值nodefault 指令 (属性)not 运算符 (布尔)o
10、bject 向后兼容 (类)of 语句 (case)on 语句 (异常处理)or 运算符 (布尔)out 指令 (参数)overload 函数指令override 函数指令package 程序结构 (控件包)packed 指令 (记录)pascal 函数调用协定private 访问类别符 (class)procedure 声明program 程序结构property 声明protected 访问类别符 (类)public 访问类别符 (类)published 访问类别符 (类)raise 语句 (异常处理)read 属性类别符readonly dispatch 界面类别符record 类型re
11、gister 函数调用协定reintroduce 函数指令repeat 语句requires 程序结构 (控件包)resident 指令 (函数)resourcestring类型safecall 函数调用协定set 类型shl 运算符 (数学)shr 运算符 (数学)stdcall 函数调用协定stored 指令 (属性)string 类型then 语句 (if)threadvar 声明to 语句 (for)try 语句 (异常处理)type 声明unit 单元结构until 语句uses 单元结构var 声明virtual 指令 (方法)while 语句with 语句write 属性类别符w
12、riteonly dispatch 界面类别符xor 运算符 (布尔)表达式和运算符 建立表达式没有通用的方法,因为要取决于所用的运算符,Pascal包括有逻辑运算符、算术运算符、布尔运算符、关系运算符和集合运算符等等。表达式可用于确定赋给一个变量的值、计算函数或过程的参数、或者判断一个条件,表达式也可以包含函数调用。表达式是对一个标识符的值而不是标识符本身进行运算。所有编程语言中的表达式都是常量、变量、数值、运算符和函数值的合法组合。表达式可以传递给过程或函数的值参,但不能传递给过程或函数中的引用参数。运算符及其优先级 如果你以前写过程序,那么你已经知道表达式是什么了。这里我专门讲一下Pas
13、cal 运算符的特殊部分:运算符的优先级。表2.2中按优先级分组列出了Pascal语言的运算符。与大多数编程语言相反,Pascal语言中and和or运算符的优先级比关系运算符高。因此,如果你的代码为a b and c d,编译器首先会编译and运算符,由此导致编译出错。为此你应该把每个 表达式用小括号括起来: (a b) and (c d)。 同一种运算符用于不同数据类型时它的作用不同。例如,运算符 + 可以计算两个数字的和、连接两个字符串、求两个集合的并集、甚至给PChar 指针加一个偏移量。然而,你不能象在C语言中那样将两个字符相加。另一个特殊的运算符是 div。在Pascal 中,你能用
14、 / 计算两个数字(实数或整数)的商,而且你总能得到一个实型结果。如果计算两个整数的商并想要一个整型结果,那么就需要用 div 运算符。表 2.2: Pascal语言中的运算符及其优先级 单目运算符 (最高优先级)取变量或函数的地址(返回一个指针)not逻辑取反或按位取反乘除及按位运算符*相乘或集合交集/浮点相除div整数相除mod取模 (整数相除的余数)as程序运行阶段类型转换 (RTTI运算符)and逻辑或按位求和shl按位左移shr按位右移加减运算符+相加、集合并集、字符串连接或指针增加一个偏移量-相减、集合差集或指针减少一个偏移量or逻辑或按位或运算xor逻辑或按位异或运算关系及比较运
15、算符(最低优先级)=判断是否相等判断是否不相等判断是否大于=判断是否大于或等于,或是否是一个集合的父集in判断是否是集合成员is判断对象是否类型兼容 (又一个RTTI运算符)集合运算符 集合运算符包括并(+)、差(-)、交(*)、成员检测(in),及一些关系运算符。要把一个元素添加到集合中,你可以采用集合并运算。下面是一个选择字体的Delphi 例子:Style := Style + fsBold;Style := Style + fsBold, fsItalic - fsUnderline;另一种方法是利用标准过程Include 和Exclude,它们效率更高(但不能用于控件的集合类型属性,
16、因为只能操纵一个元素):Include (Style, fsBold);变量 Pascal 变量在使用前必须声明,声明变量时必须指定一种数据类型。下面是变量声明的例子:var Value: Integer; IsCorrect: Boolean; A, B: Char;关键字var可以在许多地方使用,例如放在函数或过程的开始部分,用来声明函数或过程的局部变量;也可以放在单元中,用于声明全程变量。var关键字之后是一组变量名列表,每个变量名后跟一个冒号和数据类型名,一行中可以声明多个变量,如上例中最后一句。一旦变量的类型被指定,你只能对变量执行该变量类型支持的操作。例如,在判断操作中用布尔值,在
17、数字表达式中用整型值,你不能将布尔值和整型值混用(在C语言中可以这样)。使用简单的赋值语句,可写出下面的代码:Value := 10;IsCorrect := True;但下面的语句是不正确的,因为两个变量数据类型不同:Value := IsCorrect; / error在Delphi中编译这句代码,会出现错误信息:Incompatible types: Integer and Boolean.(类型不兼容:整型和布尔型)。象这样的错误通常是编程错误,因为把一个 True 或 False 的值赋给一个整型变量没有什么意义。你不该责怪Delphi 提示这样的错误信息,代码中有不对的地方Delp
18、hi当然要提出警告。把变量的值从一种类型转换到另一种类型往往不难做到,有些情况下类型转换会自动实现,不过一般情况下需要调用特殊的系统函数,通过改变数据内部表示来实现类型转换。在Delphi 中,当你声明全程变量时,你可以赋给它一个初值。例如,你可以这样写:var Value: Integer = 10; Correct: Boolean = True;这种初始化方法只能用于全程变量,不能用于过程或方法的变量。常量 对于在程序运行期间保持不变的值,Pascal 允许通过常量来声明。声明常量不必特定数据类型,但需要赋一个初值。编译器会根据所赋初值自动选用合适的数据类型。例如:const Thous
19、and = 1000; Pi = 3.14; AuthorName = Marco Cant;Delphi 根据常量的值来决定它的数据类型。上例中的Thousand 变量,Delphi会选用SmallInt数据类型 (短整型-能容纳Thousand变量的最小整数类型)。如果你想告诉Delphi 采用特定的类型,你可在声明中加入类型名,方法如下:const Thousand: Integer = 1000;对于声名的常量,编译器有两种编译选择:第一种为常量分配内存,并把常量的值放入内存;第二种在常量每次使用时复制常量值。第二种方法比较适合简单常量。注意:16位的Delphi 允许你在程序运行期间
20、改变已定义的常量值,就象一个变量一样。32位的Delphi为了向后兼容仍容许这种操作,只要你附加 $J 编译指令,或选择工程选项对话框中Compiler (编译器) 页的Assignable typed constants复选框就行。资源串常量 当定义字符串常量时,你可这样写:const AuthorName = Marco Cant;从Delphi 3 开始,你可以用另一种方式写:resourcestring AuthorName = Marco Cant;上面两个语句都定义了一个常量,也就是定义了一个在程序运行期间保持不变的值,但两者的实现过程却不同,用resourcestring 指令定
21、义的字符串变量将被保存到程序资源的字符串表中。从例子ResStr你可了解资源串的实际作用,例子中设置了一个按钮, 相应代码如下:resourcestring AuthorName = Marco Cant; BookName = Essential Pascal;procedure TForm1.Button1Click(Sender: TObject);begin ShowMessage (BookName + #13 + AuthorName);end;以上代码中的两个字符串将分两行输出显示,因为字符串被分行符 #13 隔开。有趣的是,当你用资源编辑器打开执行文件时,你会在程序资源中看到你
22、所定义的字符串。这意味着字符串并没有进入编译代码,而是保存在执行文件 (EXE文件) 的一个单独区域。注意:简而言之,采用资源的好处一方面可让Windows 来完成有效的内存处理,另一方面不用更改源代码就可实现程序的本地化 (把字符串翻译成不同的语言)。数据类型 Pascal 中有多种预定义的数据类型,它们可分为三大类:有序数据类型,实数类型和字符串类型。Delphi 还包括一种无类型的可变数据类型,称作variant, variant是一种无需类型检测的数据类型,它在Delphi 2 中引入,用于处理OLE Automation(OLE 自动化)。有序类型 有序类型是建立在概念“顺序”或“序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 语法 基础
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。