Обработка необязательных аргументов: CFArgument против isDefined

У меня есть вопрос о cfargument, Если я посылаю параметр при вызове .cfcЕсть ли польза от определения его в качестве аргумента в первую очередь?

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

Или я могу просто использовать IsDefined() внутри функции, без определения аргумента?

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

Я попробовал их и знаю, что они оба работают. Однако в чем разница между определением аргумента и использованием isDefined()? Может ли это повлиять на эффективность?

1 ответ

Решение

Дело не в эффективности, а в документации. Вот выдержка из документа о стандартах кодирования моей компании на cfargument,

При использовании тега CFARGUMENT в функции ColdFusion необходимы следующие атрибуты:

  • название
  • Тип
  • необходимые
  • намек

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 передает некоторые переменные типы данных по ссылке, и любые манипуляции, выполняемые внутри функции, изменяют значение переменной на уровне, с которого она была вызвана. Скопируйте struct arguments в локальную переменную функции, используя duplicate(), чтобы избежать конфликтов, а затем при необходимости измените локальную переменную функции.
  8. Не добавляйте ключи к структуре аргументов, которые изначально не были переданы в функцию. Добавление новых ключей может затруднить отладку. Вместо этого скопируйте структуру arguments в локальную переменную новой функции, используя дубликат, чтобы избежать конфликтов и добавьте новые ключи в эту структуру.

НТН

Другие вопросы по тегам