PowerShell: прощай, Goto. Продолжение
Какой оператор использовать
Все четыре основных оператора итерации PowerShell (while, do while, do until и for) позволяют повторно выполнять код в зависимости от условия. Используйте тот оператор повторения, который позволяет получить более ясный программный код.
Оператор Foreach
Пользователям, более глубоко знающим PowerShell, известно об операторе foreach, или цикле foreach, который позволяет повторять команды для каждого элемента массива или коллекции объектов. Цикл foreach больше похож на команду For пакетного файла. В следующей статье я покажу, как можно заменить команду For пакетного файла в PowerShell.
Подпрограммы PowerShell
PowerShell не нуждается в команде Call или метках подпрограмм. Вместо этого в PowerShell применяются функции, как в других структурированных языках программирования. Функция — просто имя блока программного кода. Для запуска кода в функции просто вставьте имя функции в программу. В коде ниже содержится простой пример как определения, так и выполнения функции PowerShell.
function SayHello {
"Hello, world"
}
# Run the function
SayHelloПростая функция PowerShell
Ключевое слово function указывает PowerShell, что мы определяем функцию.
@Echo Off
Call :SAYHELLO Ken
Echo End of batch file
Goto :END
:SAYHELLO
Echo Hello, %1
:ENDПакетный файл с подпрограммой
Подпрограммы пакетного файла позволяют передавать параметры в подпрограмму с командой Call, и вы можете использовать подставляемые параметры в подпрограмме (%1 и т. д., как показано в коде выше). Оператор param в верхней части функции позволяет сделать то же в PowerShell: он определяет параметры функции.
function SayHello {
param($name)
"Hello, $name"
}
# Run the function
SayHello KenФункция PowerShell с параметром
Код выше представляет собой расширенный вариант кода «Пакетный файл с подпрограммой» с параметром. При выполнении программного кода в листинге 8 с параметром переменная Sname в функции заменяется параметром, переданным из последней строки (строка «Ken»).
function MyFunction {
$list = @(1,2,3)
$list
}
$result = MyFunction
# Output the list
$resultФункция PowerShell возвращает список
Напомню, что у подпрограмм пакетного файла нет собственного способа для возврата значений. Вывод функции в коде «Функция PowerShell с параметром» — собственно выходная строка. Кроме того, PowerShell без проблем возвращает несколько значений из функции; значения автоматически возвращаются списком (также именуемым массивом или коллекцией). В коде выше показана функция, которая возвращает список из трех чисел.
Таким образом, в PowerShell нет необходимости в командах Goto и Call. Циклические конструкции PowerShell (while, do while, do until и for) заменяют Goto, а функции заменяют команду Call. Если вы все еще создаете пакетные файлы, то эта статья поможет вам заменить команды Goto и Call в ваших будущих сценариях PowerShell.