2

我有一个关于cfargument. 如果我在调用 a 时发送参数.cfc,首先将其定义为参数有什么好处吗?

<cffunction name="someFunction" ....>
    <cfargument name="myArg" required="no">

或者我可以在函数内部使用 IsDefined() 而不定义参数吗?

<cffunction name="someFunction" ....>
   ...
   <cfif isDefined("arguments.myArg")>
      do something
   </cfif>

我试过了,知道它们都有效。但是,定义参数和使用 isDefined() 有什么区别?这会影响效率吗?

4

1 回答 1

10

这不是关于效率,而是关于文档。这是我公司在cfargument.

在 ColdFusion 函数中使用 CFARGUMENT 标签时,需要以下属性:

  • 姓名
  • 类型
  • 必需的
  • 暗示

ColdFusion 不要求您使用cfargument标签,但它们提供验证(类型安全)并充当附加文档,因此始终为cfargument您的函数期望的每个命名参数提供一个标签。

规则:

  1. 参数的名称不必以数据类型为前缀(避免使用匈牙利符号)。
  2. 始终type在您的 cfargument 标记中指定属性。尽量避免使用type="any".
  3. 如果需要参数,请指定required="true"但不指定default属性值。
  4. 如果不需要参数,请指定required="false"并指定default属性值。
  5. 如果您需要检测是否提供了非必需参数,请不要指定default,而是structKeyExists(arguments,"ARGNAME")在函数体中使用(请记住,当您指定 时default,您无法区分调用者省略该参数和提供相同默认值的调用者值作为参数)。
  6. 当引用作为参数传递给函数的变量时,总是引用参数范围。(不要参考foo,参考arguments.foo。)
  7. 不要操纵传递给函数的参数的值。CF 通过引用传递一些变量数据类型,并且在函数内完成的任何操作都会在调用它的级别更改变量的值。使用 duplicate() 将参数结构复制到函数局部变量以避免冲突,然后根据需要操作函数局部变量。
  8. 不要将键添加到最初没有传递给函数的参数结构中。添加新密钥会使调试变得非常困难。相反,使用副本将参数结构复制到新的函数局部变量以避免冲突并向该结构添加新键。

高温高压

于 2016-11-02T17:00:04.273 回答