处理可选参数:CFArgument与isDefined

时间:2016-11-02 14:53:40

标签: coldfusion parameter-passing cffunction

我对cfargument有疑问。如果我在调用.cfc时发送参数,那么将它定义为参数是否有任何好处?

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

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

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

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

1 个答案:

答案 0 :(得分:8)

这不是关于效率,而是关于文档。这是我公司在cfargument上编码标准文件的例外情况。

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

  • 名称
  • 类型
  • 必需
  • 提示

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

规则:

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