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中可用,它在给一行代码加短注释时非常有用。
上述三种不同的注释方式有益于进行嵌套注释。例如你要注销一段代码,而代码行中又包含真正的注释行,这时采用同一种注释方式是不对的:
{ ... code
{comment, creating problems}
... code }
正确的方法是插入第二种注释方式:
{ ... code
//this comment is OK
... code }
注意:如果左大括号或圆括号-星号后面跟美元符号($),那么其中的内容就成了编译指令,如{$X+}。
使用大写字母
Pascal 编译器(不象其他语言的编译器)不考虑字符的大小写,因此标识符Myname、MyName、myname、myName、和MYNAME是完全相同的。总体上来说,这是Pascal 的一大优点,因为在大小写敏感的语言中,许多语法错误是由不正确的大写引起的。
然而大小写不敏感也有不便之处:第一,你必须注意大小写不一致的标识符实际上是相同的,以避免把
他们当成不同的元素使用;第二,你必须尽量保持大写使用的一致性,以提高代码的可读性。
大写使用的一致性不是编译器强制要求的,但是保持大写使用的一致性是值得提倡的好习惯。一个常用的方法是将每个标识符的第一个字母大写,标识符若由几个词组合而成(中间不能插入空格),每个词的第一个字母应大写:
MyLongIdentifier
MyVeryLongAndAlmostStupidIdentifier
此外,编译器不编译代码中的空格、空行和Tab键空格,这些元素通称为空白,它们只用来提高代码的可读性,不影响编译过程。
不同于BASIC,Pascal 语句允许分行书写,即将一条长指令分割成两个或更多的代码行。允许语句分行的缺点(至少对许多BASIC程序员)是:语句结束时不能忘了加分号,更确切地说,必须记着把语句和紧接它的语句分开。语句分行唯一的限制是字符串不能跨行。
关于空格和语句分行的使用没有既定的规则,以下是几点经验:
•Delphi 代码编辑器中有一条竖线叫右边线(Right Margin),你可以把右边线设置在60或70个字符处。如果以这条线为基准,代码不超过这条界限,那么打印到纸上的代码
看起来会很好看。否则,打印时长语句会被随意分行,甚至在一个词的中间断开。
•当一个函数或过程有多个参数,通常的做法是把各参数放在不同的行上。
•你可以在注释行前留一行空白,或把长的代码句分成较小的部分,这样能提高代码的可读性。
•用空格隔开函数调用的参数,表达式中的运算符也最好用空格隔开。
优化版面
关于代码编写风格的最后一条建议是:尽量使用空白优化版面。这一条很容易做到,只需要在写复合句时,以上一句为参照,下一句向右缩进两个空格,复合句内嵌的复合句缩进四个空格,依此类推。例如:
if ... then
statement;
if ... then
begin
statement1;
statement2;
end;
if ... then
begin
if ... then
statement1;
statement2;
end;
相似的缩进格式常用于变量或数据类型声名区,也可用于语句的续行:
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 的保留标识符,在语言中有着特殊含义。保留字不能用作标识符,指令字也同样不应该用作标识符,即使编译器允许也最好不用。在实际中你不应该把任何关键字用作标识符。
表2.1是面向对象Pascal 语言(Delphi 4)中特殊标识符的完整列表,其中包括关键字及保留字。
表2.1:面向对象Pascal语言中的关键字及保留字
absolute 指令(变量)
abstract 指令(方法)
and 运算符(布尔)
array 类型
as 运算符(RTTI)
asm 语句
assembler 向后兼容(汇编)
at 语句(异常处理)
automated 访问类别符(类)
begin 块标记
case 语句
cdecl 函数调用协定
class 类型
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 语句(异常处理)
for 语句
forward 函数指令
function 声明
goto 语句
if 语句implementation 单元结构implements 指令(属性)
in 运算符(集合) - 工程结构index 指令(dipinterface界面) inherited 语句
initialization 单元结构
inline 向后兼容(见asm) interface 类型
is 运算符(RTTI)
label 声明
library 程序结构
message 指令(方法)
mod 运算符(数学)
in运算符的含义name 指令(函数)
near 向后兼容(类)
nil 数值
nodefault 指令(属性)
not 运算符(布尔)
object 向后兼容(类)
of 语句(case)
on 语句(异常处理)
or 运算符(布尔)
out 指令(参数) overload 函数指令
override 函数指令package 程序结构(控件包) packed 指令(记录) pascal 函数调用协定private 访问类别符(class) procedure 声明
program 程序结构
property 声明
protected 访问类别符(类) public 访问类别符(类) published 访问类别符(类) raise 语句(异常处理) read 属性类别符readonly dispatch 界面类别符record 类型
register 函数调用协定reintroduce 函数指令
repeat 语句
requires 程序结构(控件包) resident 指令(函数) resourcestring 类型
safecall 函数调用协定
set 类型
shl 运算符(数学)
shr 运算符(数学) stdcall 函数调用协定stored 指令(属性)
string 类型
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论