Обработка аргументов функций в Windows PowerShell

Windows PowerShellВ предыдущих статьях о Windows PowerShell мы, в основном, концентрировались на стандартных командлетах, функциональность которых было невозможно изменить по причине недоступности исходного кода. В отличие от них, функции и сценарии доступны для изменения через язык PowerShell.

Обзорно мы разобрали функции ранее. Теперь же поговорим об обработке аргументов, с которыми работают функции.

В Windows PowerShell реализованы два механизма обработки аргументов, а именно, через переменную $Args и через задание формальных параметров. Рассмотрим поочередно оба метода.

Обработка аргументов функции через переменную $Args

Все переменные, с которыми работает функция, автоматически сохраняются в переменной $Args. Таким образом, в $Args содержится массив, элементами которого являются параметры функции, указанные при её запуске.

Для примера добавим переменную $Args в функцию Primer и вызовем её с двумя параметрами.

Function Primer{"Столицей России были $Args"}

Обработка аргументов функций в Windows PowerShell

Как видим, эти два параметра (в данном случае названия двух российских городов), появляются в выходной строке через пробел. Можно изменить разделитель при помощи специальной переменной $OFS.

Function Primer{
$OFS=","
"Столицей России были $Args"}

Обработка аргументов функций в Windows PowerShell

Так как переменная $Args является массивом, то внутри функции можно обращаться к отдельным её аргументам по их порядковому номеру (нумерация начинается с нуля), а с помощью метода Count посчитать общее количество аргументов. Приведем пример.

Function Summa{"Количество аргументов: $($Args.Count)"
$n=0
For($i=0; $i -lt $Args.Count; $i++) {$n+=$Args[$i]}
"Сумма аргументов: $n"}

Обработка аргументов функций в Windows PowerShell

Круглые скобки, окружающие выражения, показывают, что данные выражения должны быть вычислены.

Обработка аргументов функции через формальные параметры

Как и в других языках программирования, в PowerShell при описании функции можно задать список формальных параметров, значения которых во время выполнения функции будут заменены значениями фактически переданных аргументов.

Формальные параметры указывают в круглых скобках после имени функции. Для примера создадим функцию с двумя формальными параметрами, один из которых вычитается из другого.

Function Primer ($a, $b) {$a-$b}

Обработка аргументов функций в Windows PowerShell

В данном случае соответствие формальных параметров переданным аргументам определяется по позиции. Первый аргумент (число 5) подставляется вместо первого параметра, второй (число 3) — вместо второго.

При указании аргументов можно использовать имена формальных параметров, и тогда порядок их перечисления перестаёт играть роль.

Обработка аргументов функций в Windows PowerShell

Если указать один и тот же параметр два раза — возникнет ошибка.

Обработка аргументов функций в Windows PowerShell

Можно поступить и по другому. Некоторым аргументам задать имена, а оставшиеся безымянные аргументы будут сопоставлены с оставшимися формальными параметрами по позиции.

Обработка аргументов функций в Windows PowerShell

Как видим, здесь мы указали конкретный аргумент формальному параметру $d, остальные же аргументы были присвоены параметрам в соответствии с заданным порядком (сначала $a, потом $b, потом $c).

По умолчанию функции в PowerShell полиморфны. Это значит, что тип формальных параметров присваивается автоматически.

Обработка аргументов функций в Windows PowerShell

В примере выше PowerShell автоматически привел формальные параметры к нужному типа в зависимости от формы записи аргументов. Поэтому в первом случае нам возвращается число 12, а во втором строка «48». Проверить это можно через уже известный нам GetType.

Обработка аргументов функций в Windows PowerShell

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

Function Primer ([int] $a, [int] $b) {$a+$b}

Обработка аргументов функций в Windows PowerShell

Если преобразование к нужному типу выполнить невозможно, система выдаст ошибку.

Обработка аргументов функций в Windows PowerShell

В данном случае всё произошло из-за символа f.

Рассмотрим тот случае, когда функции было задано аргументов больше, чем у неё прописано формальных параметров. В таком случае всё оставшиеся аргументы прописываются в массиве $Args.

Function Primer ($a, $b) {
"Первый аргумент: $a"
"Второй агрумент: $b"
"Остальные аргументы: $Args"}

Обработка аргументов функций в Windows PowerShell

В примере выше мы создали два формальных параметра, а остальные аргументы определил в массив $Args. Когда задан лишь один аргумент, он по позиции присваивается параметру $a. При этом значение параметра $b устанавливается равным $Null, а массив $Args не содержит элементов ($Args.Length=0). Когда заданы два аргумента, они присваиваются соответствующим параметрам, а массив $Args остаётся пустым.

Теперь зададим три и четыре аргумента соответственно.

Обработка аргументов функций в Windows PowerShell

Как видим, все оставшиеся аргументы попадают в массив $Args.

При определении формальных параметров можно задавать их значения по умолчанию.

Function Primer ($a=5, $b=3) {$a+$b}

Обработка аргументов функций в Windows PowerShell

В данном случае функция отработала вообще без аргументов.

Если эту же функцию запустить с одним аргументов, то он будет присвоен по порядку параметру $a, а параметр $b примет значение по умолчанию.

Обработка аргументов функций в Windows PowerShell

Среди формальных параметров функции выделяется параметр-переключатель SwitchParameter, который используется под псевдонимом [Switch].

Function Primer ([Switch] $n) {
if ($n) {
"Переключатель включен"
}
else {
"Переключатель выключен"
}
}

Обработка аргументов функций в Windows PowerShell

В данном примере функция выполняет различные действия в зависимости от того, указываем мы её с параметром $n или нет. Параметр $n является переключателем и определяет, что делать функции.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *