`
pascal4123
  • 浏览: 111101 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Object Pascal精要

    博客分类:
  • GP
 
阅读更多

1. 滥用delphi的专属类型(比如子界类型),虽然提高了可读性,但降低了跨语言可移植性,以及可扩展性。一般情况下,使用常用的数据类型即可。不要过分追求数据与其含义的一体化。可采用多语言的最小集合原则。

 

2. 集合运算是一个有用的亮点

3. 数组要跟C语言看齐,下标尽可能从0开始。遍历数组,保险起见尽可能通过Low/High函数获取数组边界。

   var

      List: array [1..10] of Integer; X, I: Integer;

   begin

      // initialize the array

      for I := Low (List) to High (List)  do

         List [I] := I * 2;

      // call X := Sum (List);

 

4. 常量定义有2种方法

   const

       VAL = 100;

   不需要声明类型,会自动匹配相关类型,并分配内存。且可移植性好一些。推荐!

   const

      VAL :Integer = 100;

   每次使用时都要复制常量值。

 

5. 资源串常量,一种特殊的字符串常量,保存到程序资源的字符串表中

   resourcestring

       VAL = ‘abcd';

 

6. 全局变量允许初始化值

   var

      V : Integer =100;

   

7. 字符串类型

   string的具体类型要根据编译开关$H决定

    $H+意味着是AnsiString,类似于C的0结尾字符串,长度理论上可以无限长

    WideString跟AnsiString相似,只是以unicode码为单位

   古老的ShortString最大长度是255

 

   AnsiString转C字符串,用PChar(..),需要注意的是转了之后,delphi代码不能再对AnsiString变量做改动了,除非再一次转回AnsiString -- AnsiString(PChar(..))

 

   

8. 指针

    用脱字符表示

   type

     P = ^ Integer;

   var

     T : Integer;

 

   P = @T;

 

10. Record类型在大多数语言里都能找到相应的实现

 

11. 在一些递归的场合,2个函数互相调用时,可以在一个函数的声明后面加关键字 forward; 其实现可在其他地方出现(不限于本单元)。

 

12. 尽量不用with语句,其降低了代码可读性。

13. 循环语句,尽量用一种,倾向while

14. case语句只针对有序类型。每个case分支或if分支用begin..end包裹。

15. windows函数

      stdcall是Windows标准的调用方式,dll调用需遵从此调用方式。

      调用外部dll函数,依据的是dll以及函数名称

      function LineTo; external'gdi32.dll'name'LineTo';

16.过程类型

     pascal的过程类型与c的函数指针很形似,如果是函数加个返回值

     type

          IntProc = procedure (var Num: Integer);

17. 重载

      需要重载的过程/函数的声明以及实现部分都要加上overload

 

18.uses部分前面模块的函数会被后面模块的同名函数覆盖掉。一种避免重名的方式是在函数名前加上模块名前缀。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics