2

について質問がありcfargumentます。を呼び出すときにパラメーターを送信している場合、.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. 常にtypecfargument タグで属性を指定してください。の使用は避けてくださいtype="any"
  3. 引数が必要な場合は、属性値required="true"を指定しますが、指定しないでください。default
  4. 引数が不要な場合はrequired="false"default属性値を指定して指定します。
  5. 必須ではない引数が提供されたかどうかを検出する必要がある場合は、 を指定せずdefault、代わりstructKeyExists(arguments,"ARGNAME")に関数本体で使用します ( を指定するdefaultと、その引数を省略した呼び出し元と同じデフォルトを指定した呼び出し元の違いがわからないことに注意してください)引数としての値)。
  6. 関数に引数として渡された変数を参照する場合、常に引数のスコープを参照します。(参照しないでくださいfoo、参照してくださいarguments.foo。)
  7. 関数に渡された引数の値を操作しないでください。CF は一部の変数のデータ型を参照によって渡し、関数内で操作を行うと、呼び出し元のレベルで変数の値が変更されます。duplicate() を使用して引数構造体を関数ローカル変数にコピーして競合を回避し、必要に応じて関数ローカル変数を操作します。
  8. 最初に関数に渡されなかった引数構造体にキーを追加しないでください。新しいキーを追加すると、デバッグが非常に困難になる可能性があります。代わりに、複製を使用して引数構造体を新しい関数ローカル変数にコピーし、競合を回避してその構造体に新しいキーを追加します。

HTH

于 2016-11-02T17:00:04.273 に答える