Функциональные параметры в PowerShell

Есть ли причина использовать конструкцию "Param (...)" в определении функции?

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

Пример:

function Foo([string]$Bar){
   #Body of function
}

Или

function Foo{
     Param([string]$Bar)

}

Ответы

Ответ 1

В V1 это действительно предпочтение. Использование оператора param традиционно было более формальным, но функционально это одно и тоже.

Вероятно, вы увидите гораздо больше использования PARAM в PowerShell V2 из-за возможности добавлять атрибуты к параметрам, аналогичным атрибутам на С#.

param
(
[Parameter( Mandatory=$true,
            Position=0,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true)]
[Alias("name")]
[String]
$path
)

Здесь вы можете указать атрибут параметра и кучу аргументов для этого атрибута. Вы также можете указать псевдонимы и ряд других мер по исправлению валидации.

Кит делает пару замечательных моментов. Вы можете использовать оператор param для передачи параметров в анонимные скриптовые блоки (лямбда-выражения) или PS1 script.

Ответ 2

param() требуется для указания параметров для файла script и для скриптовых блоков:

PS> $sb = {param($x,$y) $x + $y}
PS> &$sb 1 3
4

Наличие его также для традиционных функций - это просто последовательность IMO. Это лучше для продвинутых функций, которые имеют тенденцию иметь много багажа, метаданных, для каждого параметра.

Ответ 3

Возможно, как мера согласованности? Всегда задавая параметры таким же образом, улучшается читаемость.

Ответ 4

Параметр - это функция, которая используется для извлечения значения переменной формы, которая передается вашей программе (может быть Perl или любой скриптовый язык, вероятно, который использует CGI).

Например, в форме XHTML, когда вы используете элемент ввода (тег) и указываете тип "текст", вы также используете параметр под названием "имя". name присваивается значение, например num, и это значение должно быть параметром для функции param, чтобы он мог извлечь значение, которое пользователь вводит в текстовое поле в вашей форме.