Когда в параметры процедуры и функции посылаются данные или "arguments" то рекомендуется, чтобы вы проверили, что данные, которые получают процедуры и функции именно те, которые ожидаются. Вы можете использовать функции TYPE( ) и PARAMETERS( ) для проверки типа и числа аргументов, посланных в процедуры или функции.

Проверка типа данных, посылаемых в параметры

Вы можете использовать функцию TYPE( ) для проверки, что данные посланные в параметры имеют корректный тип. В приведенном ниже примере функция принимает значение даты через параметр dDate. Функция возвращает дату, которая на представляет дату на 14 дней более позднюю, чем посланная функции:

 CopyCode image Скопировать код
FUNCTION plus2weeks( dDate )
   PARAMETERS dDate
   RETURN dDate + 14
ENDFUNC

Параметр в функции требует значения типа Date. Приведенная далее версия функции включает в себя код, который использует функцию TYPE( ) для того, чтобы убедиться, что посланное значение имеет корректный тип:

 CopyCode image Скопировать код
FUNCTION plus2weeks( dDate )
   IF TYPE("dDate") = "D"
      RETURN dDate + 14
   ELSE
      MESSAGEBOX( "Function requires a date value." )
      RETURN { - - }      && Return an empty date.
   ENDIF
ENDFUNC

Проверка корректного числа аргументов

Когда программа посылает процедуре или функции большее число параметров, чем их ожидаемое число, Visual FoxPro генерирует сообщение ошибке. Когда программа посылает меньшее число аргумнтов, чем их число, ожидаемое процедурой или функцией, оставшиеся параметры инициализируется в False (.F.).

Например, предположим, что вы включили два параметра в определение процедуры, но вы вызвали ее с тремя аргумнтами; в этом случае Visual FoxPro сгенерирует сообщение об ошибке. Однако, если вы вызовите процедуру только с одним параметров, оставшиеся параметры инициализируются в False (.F.). Однако, здесь не имеется способа узнать - был ли аргумент для последнего параметры действительно опущен или явно оценен в .F.. Поэтому приведенный ниже пример кода использует функцию PARAMETERS( ) для проверки подходящего числа аргументов:

 CopyCode image Скопировать код
FUNCTION SaveValue( cStoreTo, cNewVal, lIsInTable )
   IF PARAMETERS( ) < 3
      MESSAGEBOX( "Too few parameters passed." )
      RETURN .F.
   ENDIF
   IF lIsInTable
      REPLACE (cStoreTo) WITH (cNewVal)
   ELSE
      &cStoreTo = cNewVal
   ENDIF
   RETURN .T.
ENDFUNC

Смотрите также