养成良好的编程习惯,一定要给参数加上修饰符。

经过我写博客的总结: delphi 设计修饰符的目的 就是这样,就是想让你告诉编译器,参数是否会再函数内发生改变,或输出out。所以请养成习惯,不要省略。

1.无修饰符:

delphi会当成 unkown 来处理,这个时候 处理的很好,但是效率低(比如string等堆栈式存储的类型,他是会把指针复制一份入栈的,以防止你函数内部修改,因为一旦你函数内部修改了,为了避免影响原来调用此函数的函数内部的值跟着连带改变,所以他是把栈中的指针复制一份,若函数内部发生修改,就用这个新入栈的指针指向 新开辟的内存空间,这样不影响调用者内部的值发生连带改变。)可见delphi为了 开发者 设想的 很多啊,你少些了代码,delphi依然让你尽可能的不犯错,但是这是以牺牲效率为代价的。

 

2.const修饰符 

若参数再函数内部 不会发生改变,那么尽量多用这个,因为这个是直接把变量的指针自身传递过去,并没有把指针复制一份入栈,即没有任何新入栈的数据,所以效率高。包括 类的属性、记录的成员变量、接口等。

都是这个规则。

 

3.var 修饰符

若参数 无论是string 还是 object 还是 interface 只要参数 需要再函数内部发生改变,那么就要 使用var 。var 也是直接传变量自身,没有复制变量指针新入栈。且允许 函数内部修改。

 

4.out 修饰符

 我猜测delphi发明这个修饰符的目的是 让函数 可以对外输出一个实例变量。function abc(a: string): tobject; 与 procedure abc(a: string; out b: tobject) 相比,或许用out 更能节省前台的代码。

即使不是为了节省前台的代码,那么一个函数 如果想输出一个实例变量 也又多了一种方式。更加灵活。所以 如上 你如果想输出b ,那么请你 不要对b进行初始化,因为即使你初始化了,b进入方法abc后

之前的初始化也会被洗刷掉,那么又为何初始化呢,既然是函数向外输出,那么又为什么,你又要初始化后再传入函数呢。

原文地址:https://www.cnblogs.com/del88/p/6674802.html