2016-11-02 54 views
2

我有一個關於cfargument的問題。如果我在調用.cfc時發送參數,首先將它定義爲參數有什麼好處嗎?處理可選參數:CF參數與isDefined

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

或者我可以在函數內部使用IsDefined(),而不需要定義參數嗎?

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

我試過他們,知道他們都工作。然而,定義參數和使用isDefined()有什麼區別?這會影響效率嗎?

+0

@KevinB那不是我的問題。 –

+2

@ KevinB的評論是通向答案的路徑。 –

+1

@DanBracuk * gong「Ohmmmmmmmm」 –

回答

8

這不是關於效率,而是關於文檔。這是我公司編碼標準文件cfargument的一個exceprt。

當使用一個ColdFusion功能CFARGUMENT標籤,需要以下屬性:

  • 名稱
  • 類型
  • 要求
  • 提示

的ColdFusion不要求您使用cfargument標籤,但它們提供驗證(類型安全)並充當附加文檔,因此始終爲您的函數期望的每個命名參數提供一個cfargument標記。

規則:

  1. 參數的名稱不必與數據類型(避免匈牙利表示法)前綴。
  2. 總是在您的cfargument標籤中指定type屬性。儘量避免使用type="any"
  3. 如果需要參數,請指定required="true",但不指定default屬性值。
  4. 如果不需要參數,請指定required="false"並指定default屬性值。
  5. 如果您需要檢測是否提供了非必需的參數,請不要指定default,而是在函數體中使用structKeyExists(arguments,"ARGNAME")(請注意,當您指定default時,不能區分調用方省略該參數與調用者提供與參數相同的默認值)。
  6. 當引用一個作爲參數傳遞給函數的變量時,總是引用參數範圍。 (不要參考foo,請參考arguments.foo。)
  7. 不要操縱傳遞給函數的參數的值。 CF通過引用傳遞一些可變數據類型,並且在函數內完成的任何操作改變變量的值在其被調用的級別。使用duplicate()將參數struct複製到函數局部變量以避免衝突,然後根據需要操作函數局部變量。
  8. 請勿將鍵最初傳遞給函數的參數struct添加到結構中。添加新密鑰可能會使調試變得非常困難。相反,使用重複將參數struct複製到新的函數局部變量以避免衝突並向該結構添加新的鍵。

HTH

+1

這將成爲SO的Coldfusion文檔頁面的一大亮點:http://stackoverflow.com/documentation/coldfusion/topics – beloitdavisja

+1

不判斷貴公司的準則,但規則#7可能會導致大量數據集開銷。人們應該考慮提供的論據實際使用的是什麼。通過引用傳遞內容(具有非確定性函數)沒有任何錯誤,如果相應記錄。諸如「總是重複論證範圍」等一般性強制措施可能會在某一天出現反效果。 – Alex

+0

#7只是在他們想要操縱參數值的情況下--WHEN--它是通過​​引用傳遞的(例如一個結構體)。我們在多個環境中進行多級代碼審查,性能審覈和測試,以解決您所描述的任何問題。不過,值得挖掘潛在的危險。 –