第3章Delphi的语法基础本章学习要点l学习ObjectPascal的基本概念l学习ObjectPascal的变量、常量及数据类型l掌握顺序和选择结构l掌握三种循环结构l掌握过程与函数的创建与调用Delphi是一个基于ObjectPascal语言的Windows应用程序开发系统,在所有的事件处理过程和应用程序中都是使用它来编写程序代码,因此学习Delphi的关键是学习和掌握ObjectPascal语言的语法与使用方法。ObjectPascal语言保留了Pascal语言具有可读性好、编写容易的特点,这使得它很适合作Windows平台上的快速开发语言。同时,使用ObjectPascal语言编译器刨建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得ObjectPascal成为Delphi这种先进集成开发包的编程语言。下面将讲解有关ObjectPascal语言的一些基本语法规则,而不是Pascal语言的一切细节。如果用户不熟悉TurboPascal编程而又希望了解有关的内容的话,请参阅一些基础的Pascal教程。3.1基本概念首先介绍ObjectPascal语言的最基本内容:标识符和运算符以及语句的书写规则和符号约定。3.1.1标识符标识符是所有编程语言都要使用到的概念。ObjectPascal语言程序是由多种语法成分构成的,这些语法成分包括常量、变量、类型、函数、过程、单元等等。为了能够在程序中使用这些语法成分的实例,用户就需要为这些实例各自取一个名字也就是标识符。在使用标识符前,用户必须首先声明它们。ObjectPascal语言的编译器会自动检查标识符的类型以确保标识符的赋值是正确的类型。ObjectPascal语言对标识符的定义有着明确的规定。标识符不区分大小写,标识符只能以字母或下划线开头,标识符中只有前255位有效,标识符中不能包含空格,标识符不能使用ObjectPascal语言的保留字,对不同对象中相同标识符的成分必须使用“.”分隔表示所属关系。保留字(ReservedWords)是由系统规定的、具有特定意义的单词。在编程时不能被重新定义或另作他用。ObjectPascal语言规定的保留字在Delphi集成开发环境的代码编辑器中是以黑体加粗显示的。这些保留字包括:and、array、as、asm、begin、case、class、const、constructor、destructor、dispinterface、div、do、downto、else、end、except、exports、file、finalization、finally、for、function、goto、if、implementation、in、inherited、initialization、inline、interface、is、label、library、mod、nil、not、object、of、or、out、packed、proceduce、program、property、raise、record、repeat、resourcestring、set、shl、shr、string、then、threadvar、to、try、type、unit、until、uses、var、while、with、xor、private、protected、public、published、automated、at、on。ObjectPascal编程语言对单词的大小写是不敏感的。即不区分所有标识符和保留字的大小写。3.1.2运算符ObjectPascal语言的运算符分为数学运算符、逻辑运算符、指针运算符、关系运算符、字符串运算符、集合运算符、类运算符和@运算符。其中数学运算符包括:+、-、*、/、div、mod。逻辑运算符包括:not、and、or、xor、shl、shr。指针运算符包括;、、=、=。关系运算符包括:=、、=、=、、。集合运算符包括:+、-、*、=、、=、=、in。类运算符包括:as、in。3.1.3语句的书写规则ObjectPascal程序语句书写比较自由,可以把多个语句放在一个程序行中,也可把一个语句分多行书写,但需要记住ObjectPascal的每个语句都必须以分号“;”(半角)结束。在编写自己的ObjectPascal程序时,要注意程序的可读性。Pascal语言是英式结构语言,在程序中选择合适的缩排、大小写风格,并在需要时将程序代码分行,会使得程序代码能够很容易地被自己和他人读懂。对于较为复杂的程序常用到复合语句,复合语句是指将多个语句用begin和end两个保留字包围起来,格式如下:begin语句1;…;语句n;end;复合语句在ObjectPascal中被视为一个语句,因此在end后必须加上分号“;”。3.1.4语句格式中的符号约定为了解释语法规则,在说明各语句、函数的格式和功能时用到表3-1中所列符号,这些符号的含义详见表3-1。符号含义必选参数表示符。尖括号中的中文提示说明,由使用者根据问题的需要提供具体参数,如果缺少必选参数,语句则发生错误[]可选参数表示符。方括号中的中文提示说明,由使用者根据问题的需要决定是否选用该参数,如果省略则为默认值|多中取一表示符。含义为“或者选择”,竖线分隔多个选择项,必须选择其中一个选项{}包含符号。其中包含多选一的各个选项,同类项目的重复…省略了在当时叙述中不涉及的部分表3-1语句格式中的符号约定3.2常量、变量及数据类型常量和变量都是存储数据的载体,它们在同一时刻只存储一个数据值或字符串。存储于常量中的值从不改变,存储于变量中的值常常随着程序的运行而改变。使用常量代替文字数据值可以使程序易于理解和调试。而当需要改变数据时,可通过变量来引用内存单元。ObjectPascal是一种强类型的语言,其变量在使用之前均要求声明其数据类型。数据类型描述了变量和常量的使用倩况,能够存储数据的形式以及能存储数据的多少。在声明变量时.必须确定其类型;在声明常量时,常量值本身就代表其类型.Pascal具有丰富的数据类型,可以将其数据类型分为简单数据类型、字符串类型、构造类型、指针类型、过程类型和可变数据类型等。下面首先介绍常量和变量。3.2.1常量常量是程序执行过程中不发生变化的值。说明常量时,不必指定其数据类型,只需赋予初值,编译器会自动识别该值并确定正确的类型。例如:constcircleate=3.14;i=10;showmessage=’你成功地设置了几种类型的常量’;在声明常量时也可以指定常量的类型,这样能完全控制编译器对常量的处理,例如:constcircleate:double=3.14;i:integer=10;showmessage:string=’你成功地设置了几种类型的常量’;标准Pascal只允许使用简单的常量,而在ObjectPascal中允许使用常量表达式。这些常量表达式应遵循普通表达式的构造规则。在常量表达式中,可以使用编译期间的函数,这些函数如表3-2。函数说明Abs(x)求x的绝对值Addr(x)定义一个指向对象的指针Chr(x)返回值为x的字符Length(x)求字符串x的长度Odd(x)判断x是否为奇数Ord(x)返回序数类型变量x的序数值Pred(x)返回序数类型变量x的前一个值Round(x)把x四舍五入SizeOf(x)返回x占用的字节数Succ(x)返回序数类型变量x的后续值Swap(x)交换16位整数的高位和低位Trunc(x)把实数x截断为整数表3-2可以在常量表达式中引用的标准函数下面是一些常量表达式的例子:ConstMax=100;Min=0;Medium=(Max-Min)Div2;Beta=Chr(255);Numchara=Ord(‘z’)-Ord(‘a’)+1;MyMessage=’WorngOperation’;ErrStr=’Error:’+MyMessage+’!’;ErrPos=80-Length(ErrStr)Div2Num=[‘0’..’9’];Alpha=[‘A’..’Z’,’a’..’z’];AlphaNum=Alpha+Num;注意:如果程序试图改变常量的值,Delphi编译器就会有一个警告,认为程序违反了规则,因为常量值是只读的。3.2.2变量变量就是在程序运行时其值可以改变的标识符,不同的变量是内存中不同地址的符号表示,用户可以使用这个名称来对该内存地址进行读或写操作。变量就像是一个数据容器,由于它们被赋予了特定的数据类型,因此,它们能够告诉编译器如何对其存放的数据进行解释。变量声明的最基本的语法是:var变量名1…变量名n:类型名;例如:vari:integer;定义了一个整型变量。varx,y:real;定义了x和y两个实型变量。当连续进行几个变量声明时,可以不必每次都写出其中的保留字var,例如:varx,y,z:Double;i,j,k:Integer;Digit:0..9;Okay:Boolean;在过程或者函数内部进行声明的变量通常称为局部变量,否则称之为全局变量,全局变量可以在变量声明时就对它进行初始化,其语法为:var变量名:类型名=常量表达式;例如要声明一个全局变量:vari:integer=7;就相当于:vari:integer;…i:=7;当同时声明多个全局变量时(如varx,y,z:real;),不能对变量进行初始化,另外,也不能声明文件类型和其他类型的变量。如果没有初始化全局变量,编译器就自动将其初始化为0,而与此相对应,由于局部变量不能进行初始化,因此,在赋值以前,这个局部变量在内存中的值是随机的。当声明一个变量时,其实用户是在给它分配自由的内存空间,该变量不再使用时,Delphi会自动释放它所占用的内存空间。需要指出的是,局部变量仅仅在程序中它们被声明的函数或过程中才有效。3.2.5指针类型Pascal允许建立动态数据结构,它采用指针类型数据,指针类型变量的引入大大增强了程序的灵活性。一个指针类型变量用于保存一个内存地址,由于该内存地址指向的是一个动态分配的变量,所以,在定义指针类型数据时,必须说明它所指向变量的类型。例如:TypePbirthday=^TBirthday;TBirthday=RecordName:String[30];Year:Integer;Month:1..12;Date:1..31;VarPbirthday1:Pbirthday;Pint:^Integer;BeginPbirthday1^.Name:='Smith';Pint^:=18;End;3.3顺序结构3.3.1赋值语句顺序结构是程序中最简单、最常见的基本结构。在该结构中,各操作模块(对应于程序中的“程序段”)按照出现的先后顺序依次执行,它是任何程序的主体基本结构,即使在选择结构或者更为复杂的循环结构中,也常以顺序结构作为其子结构。在顺序结构中,通常使用基本控件完成输入及输出操作,使用赋值语句等简单的操作语句组成顺序结构即可实现顺序结构程序的编写。赋值语句的语法格式为:变量标识符:=表达式;该语句的功能是计算赋值号右边表达式的值,并把此值赋给左边变量。例如:x:=y*z;b:=(x=1)or(y=4)and(z0);t:=sqrt(m)+4*sin(x);3.4选择结构3.4.1If语句在日常生活和工作中,经常需要根据给定的条件进行分析、比较和判断,以采取相应的操作。选择结构是计算机科学用来描述自然界和社会生活中分支现象的重要手段。其特点是:根据所给定的条件成立(真)或者(假),决定从实际可能的不同分支中执行某一分支的相应操作。在Delphi中,实现选择结构的语句是IF语句和Case语句,这两种语句又称为条件语句,条件语句的功能就是根据表达式的值有选择地执行一组语句。在执行一段代码以前,if语句能让用户判断某个条件是否满足。下面的代码列出了if语句在Pascal中的用法:ifx=4theny:=x;注意如果在一