Оператор условного выбора блока кода Выбор Для — различия между версиями
Тест (обсуждение | вклад) (Новая страница: «Оператор Выбор Для это отличная замена оператору Если в тех случаях, когда одно и тоже вы…») |
Bee (обсуждение | вклад) м (не понятно, о чем фраза "в данном случае", во втором предложении после введения) |
||
Строка 1: | Строка 1: | ||
Оператор Выбор Для это отличная замена оператору Если в тех случаях, когда одно и тоже выражение используется в проверяемых условиях многократно. | Оператор Выбор Для это отличная замена оператору Если в тех случаях, когда одно и тоже выражение используется в проверяемых условиях многократно. | ||
− | Оператор Выбор Для в | + | Оператор Выбор Для в случае необходимости проверки значения разных выражений в пределах одного блока, не поможет. |
В языке Перфолента.Net условный выбор блока кода можно сделать с помощью блочного оператора '''Если''', про синтаксис и использование которого можно почитать в статье [[Условный оператор Если]]. | В языке Перфолента.Net условный выбор блока кода можно сделать с помощью блочного оператора '''Если''', про синтаксис и использование которого можно почитать в статье [[Условный оператор Если]]. |
Версия 23:02, 18 июня 2020
Оператор Выбор Для это отличная замена оператору Если в тех случаях, когда одно и тоже выражение используется в проверяемых условиях многократно.
Оператор Выбор Для в случае необходимости проверки значения разных выражений в пределах одного блока, не поможет.
В языке Перфолента.Net условный выбор блока кода можно сделать с помощью блочного оператора Если, про синтаксис и использование которого можно почитать в статье Условный оператор Если.
Однако, синтаксис оператора Если иногда заставляет вас записывать одно и то же выражение снова и снова. Это не только увеличивает текст программы, но и ведет к снижению быстродействия. Рассмотрим пример, в котором значение переменной МоёЗначение проверяется несколько раз.
Если МоёЗначение = 1 Тогда //блок кода ИначеЕсли МоёЗначение = 3 или МоёЗначение = 4 или МоёЗначение = 5 Тогда //блок кода ИначеЕсли МоёЗначение = 10 Тогда //блок кода Иначе //блок кода КонецЕсли
Для сокращения записи и уменьшения количества вычислений можно использовать блочный оператор Выбор Для. Запишем предыдущий пример новым способом.
Выбор Для МоёЗначение Когда 1 Тогда //блок кода Когда 3, 4, 5 Тогда //блок кода Когда 10 Тогда //блок кода Иначе //блок кода КонецВыбора
Умнику на заметку: Ключевые слова Для и Тогда не являются обязательными и могут быть пропущены.
В приведенном примере значение переменной МоёЗначение вычисляется один раз и затем сравнивается со всеми проверяемыми значениями. Вместо переменной может быть задано любое выражение, результат вычисления которого будет использован при сравнениях в условиях после ключевого слова Когда.
Обратите внимание, что вместо оператора Или используется запятая.
Использование бинарных операторов сравнения
По умолчанию в операциях сравнения используется оператор равно, однако, его можно переопределить другим бинарным оператором сравнения, например, <, >, <=, >=, <>, Это, ЭтоНе, ЭтоТип, ЭтоНеТип.
Умнику на заметку: Другие бинарные и унарные операторы, кроме указанных операторов сравнения, воспринимаются как часть выражения правого операнда в операции сравнения. Вы можете допустить ошибку, если используете, например, унарный оператор Не. Запись Когда НЕ 5 трактуется как Когда =(НЕ 5), что эквивалентно Когда Ложь.
Выбор Инд Когда <3 ВыводСтроки "Значение Инд < 3" //меньше 3 Когда >16 ВыводСтроки "Значение Инд >16" //больше 16 Когда <>5 ВыводСтроки "Значение Инд <>5" //не равно 5 Иначе ВыводСтроки "Другое "+Инд КонецВыбора
Приведем пример с операторами сравнения Это и ЭтоНе. В этом случае мы будем сравнивать со значением Неопределено, но можно сравнивать и с конкретными объектами.
Выбор Для МойОбъект Когда Это Неопределено ВыводСтроки "Мой объект НЕ задан…" Когда ЭтоНе Неопределено ВыводСтроки "Мой объект существует!" КонецВыбора
И один из самых интересных случаев — это использование операторов ЭтоТип и ЭтоНеТип.
Допустим, что у нас есть классы Кот и Собака родителем которых является класс Животное, а переменная МоёЖивотное типа Животное содержит значение одного из двух возможных типов. Определим, кто же у нас в переменной.
Выбор Для МоёЖивотное Когда ЭтоТип Кот ВыводСтроки "Это мой кот!" Когда ЭтоТип Собака ВыводСтроки "Это моя собака!" КонецВыбора
Операторы ЭтоТип и ЭтоНеТип позволяют задавать тип двумя способами – непосредственной записью и при помощи функции Тип(). Выше мы использовали непосредственную запись, а теперь напишем то же самое с использованием функции Тип().
Выбор Для МоёЖивотное Когда ЭтоТип Тип("Кот") ВыводСтроки "Это мой кот!" Когда ЭтоТип Тип("Собака") ВыводСтроки "Это моя собака!" КонецВыбора
Добавочное условие При.
Иногда одного сравнения в условии не хватает. В таких случаях можно задать дополнительное условие с помощью ключевого слова При. Правила определения дополнительного условия такие же, как в операторе Если. Дополнительное условие проверяется только тогда, когда выполнилось основное условие.
Выбор Для МоёЖивотное Когда ЭтоТип Кот При МоёЖивотное.Цвет="рыжий" ВыводСтроки "Это мой рыжий кот!" Когда ЭтоТип Кот При МоёЖивотное.Цвет="черный" ВыводСтроки "Это мой черный кот!" Когда ЭтоТип Собака При МоёЖивотное.Цвет="рыжий" ВыводСтроки "Это моя рыжая собака!" Когда ЭтоТип Собака При МоёЖивотное.Цвет="черный" ВыводСтроки "Это моя черная собака!" КонецВыбора
В приведенном примере свойство Цвет принадлежит классу Животное, поэтому дополнительное условие проверяется одинаково для кота и для собаки, но что, если нам надо в дополнительном условии проверить одно или несколько свойств принадлежащих коту, в том случае, если это кот, или принадлежащих собаке, если это собака?
Это можно сделать, например, вот так:
Выбор Для МоёЖивотное Когда ЭтоТип Кот При ТипКТипу(МоёЖивотное, "Кот").ГибкостьСпины="высокая" И ТипКТипу(МоёЖивотное, "Кот").Пятнистость="высокая" ВыводСтроки "Это гибкий пятнистый кот! По имени "+ ТипКТипу(МоёЖивотное, "Кот").Имя Когда ЭтоТип Собака При ТипКТипу(МоёЖивотное, "Собака").ДлинаШерсти="высокая" И ТипКТипу(МоёЖивотное, "Собака").ГромкостьЛая="высокая" ВыводСтроки "Это громкая длинношерстная собака! По кличке "+ ТипКТипу(МоёЖивотное, "Собака").Кличка КонецВыбора
Выглядит довольно громоздко из-за того, что приходится приводить тип животного к классу, имеющему необходимые свойства. К тому же, операция приведения типа выполняется по 4 раза на каждую секцию Когда, а она вовсе не бесплатная и за неё приходится платить потерей быстродействия работы программы.
Для упрощения кода и улучшения его быстродействия воспользуемся дополнительным ключевым словом Для оператора ЭтоТип, с помощью которого будем создавать переменную для только что определенного в секции Когда типа.
Выбор Для МоёЖивотное Когда ЭтоТип Кот Для МойКотик При МойКотик.ГибкостьСпины="высокая" И МойКотик.Пятнистость="высокая" ВыводСтроки "Это гибкий пятнистый кот! По имени "+МойКотик.Имя Когда ЭтоТип Собака Для МояСобачка При МояСобачка.ДлинаШерсти="высокая" И МояСобачка.ГромкостьЛая="высокая" ВыводСтроки "Это громкая длинношерстная собака! По кличке "+МояСобачка.Кличка КонецВыбора
Переменные МойКотик и МояСобачка создаются в тот момент, когда выполняется условие в операторе ЭтоТип. При этом определение и приведение типа объекта к необходимому выполняется всего один раз на каждую секцию Когда.
Тот же приём можно использовать в случае, когда дополнительное условие не используется, но в самом блоке кода идет многократное обращение к только что определенному типу.
Выбор Для МоёЖивотное Когда ЭтоТип Кот Для МойКотик ВыводСтроки "Это кот по имени: "+МойКотик.Имя ВыводСтроки "Гибкость спины: "+МойКотик. ГибкостьСпины ВыводСтроки "Пятнистость: "+МойКотик. Пятнистость Когда ЭтоТип Собака Для МояСобачка ВыводСтроки "Это собака по кличке: "+ МояСобачка. Кличка ВыводСтроки "Длина шерсти: "+ МояСобачка. ДлинаШерсти ВыводСтроки "Громкость лая: "+ МояСобачка. ГромкостьЛая КонецВыбора
В том случае, когда в условии секции Когда перечисляются через запятую несколько выражений, дополнительное условие При используется для каждого выражения отдельно.
А=3 Б=5 Выбор Для МоёЗначение Когда 3 При А=3, 4 При А=4 или Б=4, 5 При Б=5 Тогда //блок кода Иначе //блок кода КонецВыбора
Вывод:
Условный блочный оператор Выбор Для позволяет сделать код программы лучше читаемым, а часто и быстрее работающим. Он может с успехом применяться для замены оператора Если в тех случаях, когда одно и то же значение проверяется в условиях несколько раз.