Pascal精要笔记
Pascal语言的大小写不敏感特性有一个例外:控件包中的Register 过程必须以大写字母R开始,因为需要与C++Builder 兼容。
,编译器不编译代码中的空格、空行和Tab键空格,这些元素通称为空白,它们只用来提高代码的可读性,不影响编译过程。(也就是说: = 这样的写法没有问题,我原来还以为由问题那!)
记住要用代码模板(方便开发)快捷键:Ctrl+J
Absolute 关键字是共享变量地址有些象C++的共用体
var
Str: string[32];
StrLen: Byte absolute Str;
与大多数编程语言相反,Pascal语言中and和or运算符的优先级比关系运算符高。因此,如果你的代码为a < b and c < d,编译器首先会编译and运算符,由此导致编译出错。为此你应该把每个 < 表达式用小括号括起来: (a < b) and (c < d)。
集合,集合除了 并(+)差(-) 交(*) 等可以用INCLUDE和EXCLUDE效率更高
Include (Style, fsBold);
当时间和日期转换成字符串时,其转换格式取决于Windows 的系统设置。
Round转换一个实型值为四舍五入后的整型值
注意:在最近版本的Delphi Pascal 编译器中,Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的。这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 5.5、6.5) 实施Round函数时,处理器根据小数点前数字的奇、偶性来确定舍入与否,如 5.5 Round 结果为 6,而 6.5 Round 结果也为6, 因为 6 是偶数。并不只是DELPHI这样(VB也这样 )
注意:一般来说,你应该避免使用上述不命名类型,因为你不能把它们作为参数传给例程,也不能用于声名同一类型的其他变量。实际上,Pascal的类型兼容规则是基于类型名的,而不是基于实际的类型定义。两个类型相同的变量仍有可能是不兼容的,除非他们的类型有完全相同的名字。对于不命名类型,需要编译器给它分配一个内部名字,因此对于数据结构复杂的变量,要习惯于定义命名数据类型,你一定不会为此白费工夫的。
Delphi 编译会通过,但在运行时,如果你开启了范围检查编译选项(在工程选项对话框的编译器页设置),你将得到 Range check error (范围检测错误)信息。
注意:建议你在开发程序时开启上述编译选项,以使程序更健壮并易于调试。这样即使遇上错误,你也会得到一个明确的信息而不是难以琢磨的行为。最终完成程序时你可以去掉这个选项,使程序运行得快一些,不过影响很小。因此我建议你开启所有运行时的检测选项,如溢出检查和堆栈检查,甚至提交程序时仍然保留它们
Delphi 长字符串的情况略有不同,长字符串看起来象引用,但是如果你改变了该字符串的串变量,那么这个串在更新前将被拷贝下来。作为值参被传递的长字符串只在内存使用和操作速度方面才象引用,但是如果你改变了字符串的值,初始值将不受影响。相反,如果通过引用传递长字符串,那么串的初始值就可以改变。
实质上字符串的值传递类似引用,只不过系统在幕后进行了操作,这样效率会低。
在Delphi中不常使用指针,但是你经常会用一个极为相似的结构--引用(references)。每个对象实例实际上是一个隐含的指针,或说是对其实际数据的引用,利用引用,你能象用其他数据类型一样使用对象变量。
当通过引用传递参数时,引用参数用关键字var 标示
procedure DoubleTheValue (var Value: Integer);
Delphi 3增加了一种新的参数:out。out参数没有初始值,只是用来返回一个值。out参数应只用于COM过程和函数,一般情况下最好使用更有效的var参数。除了没有初始值这一点之外,out参数与var参数相同。
常量参数,不能够在过程或函数中改变传递过来的值。只可使用。
果你只传递数组的一部分,可使用Slice 函数,
明一个过程或函数,而且只给出它的名字和参数,不列出其实现代码,需要在句尾加forward 关键字:
关键字表
关键字
作用
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
运算符 (布尔)
运算符优先级表
单目运算符 (最高优先级)
@
取变量或函数的地址(返回一个指针)
not
逻辑取反或按位取反
乘除及按位运算符
*
相乘或集合交集
/
浮点相除
div
整数相除
mod
取模 (整数相除的余数)
as
程序运行阶段类型转换 (RTTI运算符)
and
逻辑或按位求和
shl
按位左移
shr
按位右移
加减运算符
+
相加、集合并集、字符串连接或指针增加一个偏移量
-
相减、集合差集或指针减少一个偏移量
or
逻辑或按位或运算
xor
逻辑或按位异或运算
关系及比较运算符(最低优先级)
=
判断是否相等
<>
判断是否不相等
<
判断是否小于
>
判断是否大于
<=
判断是否小于或等于,或是否是一个集合的子集
>=
判断是否大于或等于,或是否是一个集合的父集
in
判断是否是集合成员
is
判断对象是否类型兼容 (又一个RTTI运算符)