DELPHI语法基础(1)
注释
在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 |
运算符 (数学) |
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 |
类型 |
then |
语句 (if) |
threadvar |
声明 |
to |
语句 (for) |
try |
语句 (异常处理) |
type |
声明 |
unit |
单元结构 |
until |
语句 |
uses |
单元结构 |
var |
声明 |
virtual |
指令 (方法) |
while |
语句 |
with |
语句 |
write |
属性类别符 |
writeonly |
dispatch 界面类别符 |
xor |
运算符 (布尔) |