处理可选参数:cargument与isDefined



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

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

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

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

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

这不是关于效率,而是关于文档。以下是我公司cfargument编码标准文档中的一段节选。

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

    <
  • 名称/gh>
  • 需要
  • 提示

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

规则:

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

HTH

最新更新