РАЗДЕЛ about_Switch КРАТКОЕ ОПИСАНИЕ Описание использования инструкции Switch для обработки нескольких инструкций If. ПОЛНОЕ ОПИСАНИЕ Инструкция If используется для принятия решения в скрипте или программе. В сущности, она сообщает: "Если данное условие выполняется, то выполните это действие. В противном случае выполните следующее действие". Эту операцию можно выполнять сколько угодно раз, однако если список условий велик, использование инструкции If становится неудобным. Можно объединить длинный список условий в одной инструкции switch. Как и во всех инструкциях с ветвлением, блоки скриптов должны заключаться в скобки ({}). Инструкция Switch фактически представляет собой последовательность инструкций If. Она поочередно сопоставляет выражение с каждым условием. Если обнаружено совпадение, то выполняется действие, связанное с этим условием. Обычно инструкция switch выглядит следующим образом: PS> $a = 3 PS> switch ($a) { 1 {"Один."} 2 {"Два."} 3 {"Три."} 4 {"Четыре."} } Три. В этом простом примере значение сравнивается с каждым условием в списке. Это действие выводит строку совпадения. Однако при проверке всех условий может возникнуть проблема. Пример: PS> $day = "day5" PS> switch ($day){ day1 {"Понедельник"; break} day2 {"Вторник"; break} day3 {"Среда"; break} day4 {"Четверг"; break} day5 {"Пятница"; break} day6 {"Суббота"; break} day7 {"Воскресенье"; break} day5 {"Слишком много дней"; break} } Пятница В списке присутствует два условия day5. Однако инструкция break в конце каждого условия велит инструкции switch прекратить дальнейший поиск и выполнить найденное действие. Если бы инструкции break не было, были бы выполнены оба действия day5. Если инструкция switch применяется к массиву, проверяться будут все элементы массива по порядку, начиная с нулевого элемента (0). В массиве должен быть хотя бы один элемент, удовлетворяющий хотя бы одному условию. В противном случае произойдет ошибка. Если предложений по умолчанию несколько, результатом будет ошибка. Полный синтаксис switch следующий: switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline ) или switch [-regex|-wildcard|-exact][-casesensitive] -file filename с последующим { "string"|number|variable|{ expression } { statementlist } default { statementlist } } Если не использовать никакие параметры, оператор Switch выполняет действие, как если бы было обнаружено точное совпадение без учета регистра. Если результатом конвейера является массив, проверяться будут все элементы массива в восходящем порядке, начиная с нулевого элемента (0). В блоке кода Switch могут присутствовать только один условный элемент и только одно предложение по умолчанию. При наличии нескольких предложений по умолчанию возникает исключение ParseException. Инструкция Switch имеет следующие параметры. Regex Указывает, что удовлетворяющее критерию предложение, являющееся строкой, обрабатывается как строка Regex. Использование этого параметра отключает параметры Wildcard и Exact. Если удовлетворяющее критерию предложение не является строкой, этот параметр игнорируется. Wildcard Указывает, что удовлетворяющее критерию предложение, являющееся строкой, обрабатывается как строка с подстановочным символом. Использование этого параметра отключает параметры Regex и Exact. Если удовлетворяющее критерию предложение не является строкой, этот параметр игнорируется. Exact Указывает, что удовлетворяющее критерию предложение, являющееся строкой, должно точно соответствовать критерию. Использование этого параметра отключает параметры Wildcard и Regex. Если удовлетворяющее критерию предложение не является строкой, этот параметр игнорируется. CaseSensitive Указывает, что удовлетворяющее критерию предложение, являющееся строкой, изменяется с учетом регистра. Если удовлетворяющее критерию предложение не является строкой, этот параметр игнорируется. File Источник берется из файла (или представителя), а не из инструкции. При наличии нескольких параметров File используется только последний. Каждая строка файла считывается и передается через блок switch. Допускается многократное использование параметров Regex, Wildcard или Exact. Однако на действие влияет только последний использованный параметр. Ключевое слово Break означает, что обработка больше не выполняется и инструкция Switch завершает работу. Ключевое слово Continue указывает, что обработка текущего токена не будет продолжаться и начнется оценка следующего токена в условии. При отсутствии токенов оператор Switch завершает работу. Блок вида "{ expression }" может быть блоком кода, который будет оцениваться при сравнении. Текущий объект привязывается к автоматической переменной $_ и доступен во время проверки выражения. Считается, что результатом сравнения было совпадение, если выражение принимает значение "true". Это выражение вычисляется в новой области. Ключевое слово Default в инструкции switch указывает, что если соответствия не найдены, начнется проверка кодового блока, следующего за ключевым словом. Программному потоку будет запрещено переключение с блока на блок, поскольку закрывающая скобка ( } ) в составном списке является явным остановом. При обнаружении нескольких соответствий каждое соответствие приводит к запуску выражения. Во избежание этого для предотвращения дальнейшего сравнения можно использовать ключевые слова Break или Continue. СМ. ТАКЖЕ about_Break about_Continue about_If about_Script_Blocks