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运算符) |