【问题标题】:Does the order of const, var, out parameters matter?const、var、out 参数的顺序是否重要?
【发布时间】:2016-03-12 15:02:08
【问题描述】:

我正在重构一个大过程,现在我得到了很多小过程,函数有很多来回传递的参数。由于我想保持相同/相似的性能和可维护的重构,我试图了解什么是最好的方法,这样我就不会破坏代码。

这是这些新功能最常见的外观:

function ProcessA(const ProjName,ProjPath:string; 
   ProjID:integer; 
   var ProjDest:string):string;

function ProcessB(const ProjName,ProjPath:string; 
   const ProjID,ProjHID,ProjGID:integer; 
   var ProjDest:string; 
   out ProjDelPath:string):string;

我阅读了很多关于 const、var、out 参数的信息。我是否应该先将它们全部订购 const,然后全部订购正常,然后 var 并最后...

它们的顺序重要吗?


编辑:

为了澄清问题的原因或是否有人使用相同的 this,我使用了 IDE 的 Refactor/Extract Method 功能,该功能做得很好,但它对放置的参数没有任何意义。因此,当我重新排序和更改参数名称时,我发现了参数类型没有标准顺序的问题。

【问题讨论】:

  • 顺序并不重要。但是,您希望某些参数首先出现通常是有原因的。例如,您可能需要在输出参数之前输入参数。这取决于你。
  • 具有默认值的常量和值参数必须出现在参数列表的末尾。否则你可以随心所欲。
  • @DavidHeffernan 是的,这也是我的想法,首先输入然后混合(var)并最后输出。我使用 Refactor/Extract 方法 来帮助我,我每次都需要对参数进行排序,因为它只是混淆了输入、输出参数,不好。所以,我想让它变得有意义和标准化。
  • 顺序在某种程度上确实很重要,因为它会影响使用 CPU 寄存器传递的参数以及使用调用堆栈传递的参数。性能差异很小,但可能很重要,具体取决于调用的上下文。
  • @MikeTorrettinni:如果您搜索该信息,则很容易获得。 Embarcadero 的文档中有一些信息:Calling Conventions

标签: delphi delphi-xe7


【解决方案1】:

参数种类的顺序无关紧要,只有一个例外;默认参数(如 fn(AFloat: single; AInt:integer = 0): integer; ),这意味着如果您对默认值感到满意,您不必为 AInt 传递任何内容。这些参数必须在参数列表的末尾,并且只能从末尾省略。 你可以阅读更多关于参数here的信息。

【讨论】:

  • 很高兴指出这一点,将确保我按设计使用它!
猜你喜欢
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2015-04-17
相关资源
最近更新 更多