ObjectPascal总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OBJECT PASCAL语言简介
1.字符集和符号
Object PASCAL不区分字符的大小写。
Object PASCAL字符集,由下面的字符组成:
●字母(Letters):大小写的英文字母A~Z、a~z(不区分大小写)和下划线(_)
●数字(Digits):阿拉伯数字0~9
●十六进制数字(Hex Digits):阿拉伯数字0~9、字母A~F或a~f
●空白(Blanks):空格字符(ASCII码值为32)和所有不可见的ASCII控制字符
(ASCII码值为0~31),其中回车符的ASCII码为13
●特殊字符(Special):+、-、*、/、^、:、;、'、#、$和@
●关系运算符:=、<>、>、<、>=和<=
●赋值运算符::=
●子界运算符:..
2.标识符
标识符用来表示常数、常量、字段、类型、属性、过程、函数、程序、单元、库、包和记录中的域等。
标识符必须以字母或下划线开始,后面为字母、数字、下
划线等,但不能包含空格符,其长度是任意的(但只有前面255个字符有效)。
●预定义的标准标识符
这些标识符在Object Pascal中具有特定的含义,主要用作标准的常量名、类型名、过程名和文件名等。
●用户自定义标识符
在程序设计是自己定义的标识符,可用来表示常量、变量、类型、函数、过程等的名称。
●标识符的限定
若使用在另一个地方定义的标识符,需要限定标识符。
限定标识符的格式为:标识符1.标识符2
其中标识符1限定标识符2。
限定符可以嵌套,如Form1.Button1.Click表示调用Form1窗体Button1的Click方
法。
关键字是Object Pascal 的保留标识符,在语言中有着特殊含义。
保留字不能用作标识符。
3.变量
变量在使用前必须声明,声明变量时必须指定一种数据类型。
下面是变量声明的例子:
var
Value: Integer;
IsCorrect: Boolean;
A, B: Char;
关键字var可以在许多地方使用,例如放在函数或过程的开始部分,用来声明函数或过程的局部变量;也可以放在单元中,用于声明全程变量。
var关键字之后是一组变量名列表,每个变量名后跟一个冒号和数据类型名,一行中可以声明多个变量,如上例中最后一句。
一旦变量的类型被指定,你只能对变量执行该变量类型支持的操作。
例如,在判断操作中用布尔值,在数字表达式中用整型值,你不能将布尔值和整型值混用(在C语言中可以这样)。
使用简单的赋值语句,可写出下面的代码:
Value := 10;
IsCorrect := True;
但下面的语句是不正确的,因为两个变量数据类型不同:
Value := IsCorrect; // error
把变量的值从一种类型转换到另一种类型往往不难做到,有些情况下类型转换会自动实现,不过一般情况下需要调用特殊的系统函数,通过改变数据内部表示来实现类型转换。
在Delphi 中,当你声明全程变量时,你可以赋给它一个初值。
例如,你可以这样写:
var
Value: Integer = 10;
Correct: Boolean = True;
这种初始化方法只能用于全程变量,不能用于过程或方法的变量。
4.常量
对于在程序运行期间保持不变的值,Pascal 允许通过常量来声明。
声明常量不必特定数据类型,但需要赋一个初值。
编译器会根据所赋初值自动选用合适的数据类型。
例如:
const
Thousand = 1000;
Pi = 3.14;
AuthorName = 'Marco Cantù';
Delphi 根据常量的值来决定它的数据类型。
5.资源串常量
当定义字符串常量时,你可这样写:
const
AuthorName = 'Marco Cantù';
resourcestring
AuthorName = 'Marco Cantù';
上面两个语句都定义了一个常量,也就是定义了一个在程序运行期间保持不变的值,但两者的实现过程却不同,用resourcestring指令定义的字符串变量将被保存到程序资源的字符串表中。
从例子ResStr你可了解资源串的实际作用,例子中设置了一个按钮, 相应代码如下:
resourcestring
AuthorName = 'M arco Cantù';
BookName = 'Essential Pascal';
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage (BookName + #13 + AuthorName);
end;
6.数据类型
在Object Pascal中基本的数据类型包括整数类型、实数类型、字符类型和布尔类型。
7.表达式
表达式(Expression)是由运算符(Operator)和运算对象(Operand)组成的。
在Object Pascal中的运算符大部分是二元运算符(有两个运算数的运算符)。
二元表达式的形式与一般的代数形式相同。
只有一个运算对象的运算符称之为一元运算符,一元运算符出现在运算对象之前。
在复杂的表达式中,各运算符的处理顺序是按照运算符的优先级来进行的。
运算符可分为算术运算符、逻辑运算符、串运算符、字符指针运算符等。
8.语句
1)赋值语句
赋值语句是以表达式代表的数值代替变量中的当前值,它的语法格式为:
<变量标识符>:=<表达式>;
Delphi组件属性的赋值
给属性赋值的语法格式为:<对象.属性>:=<属性值>
组件属性的重要类别有些对象本身就是对象,如Font属性,设置这些对象属性可以使用下列的方法:
Edit1.Font.Size:=24; {设置字体的大小} Edit1.Font.Color:=ClRed; {设置字体的颜色}
同时设置一个对象的多个属性若要同时设置一个对象的多个属性时,可使用With语句。
2)过程语句
过程语句的语法格式为:
过程标识符(实际参数表);
或
函数标识符(实际参数表);
过程语句实现对过程标识符(或函数标识符)所规定的过程(或函数)的调用。
若被调用的过程(或函数)中包含了形式参数(简称形参),则过程语句就必须有相应的实际参数(简称实参)。
实参中参数的个数、类型和顺序都要与形参相一致
3)Goto(无条件转移)语句
Goto语句将程序的执行顺序转移到指定标号的语句处,其语法格式为:Goto n1 其中“标号”是0~9999之间的整数或标识符。
标号所在的语句必须与Goto语句在同一个语句块内,即不能用Goto语句在函数或过程之间进行跳转。
标号要在定义之后才能使用,定义标号的方法是: Label <标号表>; Goto语句与结构化程序设计的思想是相违背的,因此在程序设计中尽量不要使用该语句。
4)复合语句
复合语句是由BEGIN和END之间的多个语句组成的,
其语法形式为:
BEGIN
<语句>;
END;
5)IF语句
单分支的条件语句
单分支条件语句的语法格式为:
IF e1 THEN
<语句1>;
其中e1为Boolean表达式。
单分支的条件语句的含义为当e1的值为真时,执行<语句1>,当e1的值为假时,则执行<语句1>下面的语句。
procedure TForm1.Button1Click(Sender: TObject);
begin
// simple if statement
if CheckBox1.Checked then
ShowMessage ('CheckBox1 is checked')
end;
6)双分支的条件语句
双分支条件语句的语法格式为:
IF e1 THEN
<语句1>
ELSE
<语句2>;
其中e1为Boolean表达式。
双分支的条件语句的含义为当e1的值为真时,执行<语句1>,当e1的值为假时,则执行<语句2>。
procedure TForm1.Button2Click(Sender: TObject);
begin
// if-then-else statement
if CheckBox2.Checked then
ShowMessage ('CheckBox2 is checked')
else
ShowMessage ('CheckBox2 is NOT checked');
end;
要注意的是,不能在第一句之后、else 关键词之前加分号,否则编译器将告知语法错误。
实际上,if-then-else 语句是单纯的一条语句,因此不能在语句中间加分号。
7)嵌套形式的条件语句
嵌套形式条件语句的语法格式为:
IF e1 THEN
<语句1>
ELSE
IF e2 THEN
<语句2> ... ...
ELSE
IF en THEN
<语句n>
ELSE
<语句0>;
其中e1~en为Boolean表达式。
嵌套形式的条件语句的含义为当e1的值为真时,执行<语句1>,当e1的值为假时,若e2的值为真时,则执行<语句2>,…。
procedure TForm1.Button3Click(Sender: TObject);
begin
// statement with a double condition
if CheckBox1.Checked and CheckBox2.Checked then
ShowMessage ('Both check boxes are checked')
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
// compound if statement
if CheckBox1.Checked then
if CheckBox2.Checked then
ShowMessage ('CheckBox1 and 2 are checked')
else
ShowMessage ('Only CheckBox1 is checked')
else
ShowMessage (
'Checkbox1 is not checked, who cares for Checkbox2?')
end;
8)CASE语句
CASE语句在很多情况下可以代替嵌套IF语句,去实现不同情况的选择,其语法格式为:
CASE e1 OF
x1:<语句1>;
x2:<语句2>; ... ...
xn:<语句n>;
ELSE
<语句>;
END
e1可以是任何返回值为有序类型(整型、字符型、布尔型、枚举型、子界型)的表达式,而x1~xn可以是一个数、一个定义过的变量或其它常量表达式,但必须是与e1兼容的有序类型。
CASE语句的含义为,当e1的值与x1,x2,...,xn相同时,就执行它后面的语句,否则执行ELSE后面的<语句>。
case Number of
1: Text := 'One';
2: Text := 'Two';
3: Text := 'Three';
end;
case MyChar of
'+' : Text := 'Plus sign';
'-' : Text := 'Minus sign';
'*', '/': Text := 'Multiplication or division';
'0'..'9': Text := 'Number';
'a'..'z': Text := 'Lowercase character';
'A'..'Z': Text := 'Uppercase character';
else
Text := 'Unknown character';
end;
9)Repeat(直到型循环)语句
当需要多次执行某一个(或一组)语句或一个程序段时,Object Pascal提供三种可供选用的重复语句:REPEA T、WHILE和FOR语句。
Repeat语句就是重复一个代码块的执行,直到满足条件为止。
这种循环的执行次数是不确定的,
其语法格式为:
REPEA T
<语句>;
UNTIL <表达式>;
<语句>被称为循环体。
由于REPEA T语句是先执行循环体,再对表达式求值,所以REPEA T语句至少执行循环体一次。
repeat
// use I and J to compute something...
I := I + 1;
J := J + 1;
until (I > 100) or (J > 100);
10)While(当型循环)语句
While语句的语法格式为:
WHILE <e1> DO
<语句>;
当条件为真时,执行循环<语句>。
与Repeat语句不同的是先计算表达式的值,若为真,则执行循环体,直到表达式的值为假。
若在开始时,表达式的值为假,则不执行循环体。
while (I <= 100) and (J <= 100) do
begin
// use I and J to compute something...
I := I + 1;
J := J + 1;
end;
11)For(计数型循环)语句
For语句的语法格式为:
FOR var1:=exp1 TO/DOWNTO exp2 DO
<语句>;
这里exp1为初值表达式,exp2为终值表达式。
在执行FOR语句的过程中,初值表达式和终值表达式只计算一次。
FOR语句执行规定次数的循环。
开始时让循环变量等于初值,若初值后使用的是“TO”(“DOWNTO”),并且循环变量的值小于等于(大于等于)终值,则执行循环体一次,同时循环变量的值加(减)1。
这时如果循环变量的指仍小于(大于)终值,就再执行一次循环体,直到循环变量的值大于(小于)终值时为止。
var
K, I: Integer;
begin
K := 0;
for I := 1 to 10 do
K := K + I;
同样的for语句可以用正好相反的计数器来写:
var
K, I: Integer;
begin
K := 0;
for I := 10 downto 1 do
K := K + I;
12)FOR语句的嵌套
FOR语句的循环体还可以是一个FOR语句,从而构成多重循环。
使用FOR语句的注意事项
(1) 在循环体内不能改变循环变量的值
(2) 循环变量的值在循环结束后不再确定
三种循环语句的关系
对已知循环次数的情形,可以使用FOR语句;对循环次数未知,而只知道循环的执行条件时,可以使用REPEA T语句或WHILE语句。
若至少执行一次循环体,则用REPEA T语句,否则使用WHILE语句。
实际上FOR语句也可以表示为REPEA T语句或WHILE语句。
13)With语句
With语句是一种用于简化代码的语句。
如你要访问一个记录类型变量(或一个对象),用With语句就不必每次重复变量的名字。
其语法格式为:
WITH <RecordName> DO
<语句>
例如对于以下的记录类型代码:
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;
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语句会很有用,也可省去一些临时变量。
但是这样做也有缺点,因为这样将使代码的可读性变差,特别对有相似或相同属性的对象。
14)Break(强制退出循环)语句
Break语句用于从For语句、While语句或Repeat语句中强行退出。
15)Continue(强制缩短循环)语句
Continue语句用于从For语句、While语句或Repeat语句中强行结束本次循环,开始下一次循环。
16)Exit(强制退出程序块)语句
Exit语句用于从当前代码块中退出。
若该代码为主程序,则终止该程序,若是函数或过程,则立即退出该过程或函数。
17)Halt(强制终止程序执行)语句
Halt用于强行终止应用程序的执行,返回到操作系统,其语法格式为:procedure Halt[(退出码:Integer)]; 其中“退出码”可以省略。
通常在遇到严重错误时,如非法内存访问、磁盘操作冲突等才使用halt这种非正常退出方式。
在退出前,应关闭当前打开的文件或数据库、断开与服务器的廉洁、释放所有可以释放的资源,以免造成不必要的损失。
“除了遵循语法规则外,你应该怎样来写代码呢?”
总的来说,任何编码风格的目标都是使代码清楚、明晰,采用某种风格和格式只是一种简略方法,用于更清楚地表达你的代码要干什么。
实现代码清楚明晰的基本原则是保持代码的一致性,也就是无论选用哪种风格,在整个工程中要始终保持同一风格。