параметры проверки действительно полезны? - PullRequest
5 голосов
/ 29 марта 2011

Я изучаю функции PowerShell и параметры его проверки.Однако я не могу понять, действительно ли они полезны.

Я приведу простой пример.

function get-choice(
[parameter(Mandatory=$true)][String][ValidateSet('Y','N')]$choice
)
{return $choice}

get-choice k

Эта функция возвращает мне эту ошибку:

get-choice : Impossibile convalidare l'argomento sul parametro 'choice'. L'argomento "k" non appartiene al set "Y,N" specificato dall'attributo ValidateSet. Fornire un argomento inclu
so nel set ed eseguire di nuovo il comando.
In riga:6 car:11
+ get-choice <<<<  k
    + CategoryInfo          : InvalidData: (:) [get-choice], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,get-choice

ЕслиЯ не указываю действительный набор значений, я могу проверить их в своем коде:

function get-choice2(
[parameter(Mandatory=$true)][String]$choice
) {
    if($choice -ne 'y' -and $choice -ne 'n') {
        write-host "you must choose between yes and no"
        return
    }
return $choice
}

get-choice2 k

и получаю более дружеское сообщение:

you must choose between yes and no

Прежде всего, я быХотелось бы узнать, возможно ли настроить сообщение об ошибке с помощью validateset.Тогда я надеюсь, что кто-то сможет объяснить, почему я должен предпочесть первый подход.Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 29 марта 2011

Некоторые причины использования стандартной проверки:

  • декларативный код;гораздо легче читать, чем оператор if
  • намного короче (4 строки кода по сравнению с 1 строкой только с оператором return)
  • пользовательский код может иметь некоторые ошибки
  • позже в Vx of PowerShell могут появиться некоторые пользовательские сообщения проверки (?) (Просто снится)
  • ...

Проверка Улучшенные сообщения об ошибках для PowerShell ValidatePattern - сообщение @jaykul.Вы увидите, как вы можете настроить сообщение об ошибке.Он немного ориентирован на разработчиков, но его стоит прочитать.

2 голосов
/ 29 марта 2011

Преимущество использования проверки параметров заключается в том, что вам не нужно делать это самостоятельно.Это много скучного, стандартного кода, который больше не нужно писать и тестировать.Большая победа в моей книге, хотя это приводит к менее дружественным сообщениям об ошибках.

Вы можете написать справочную документацию для своей функции, чтобы пользователь мог набрать help get-choice2, и посмотреть объяснение того, что этоПараметр означает:

function get-choice(
[parameter(Mandatory=$true)][String][ValidateSet('Y','N')]$choice
)
{
    <#
    .SYNOPSIS
    Gets the user's choice.

    .PARAMETER choice
    The choice.  Must be Y or N.
    #>

    return $choice
}

Выполните help about_comment_based_help для получения дополнительной информации или см. документацию MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...