ЧП ПРОМКОД - Официальный сайт Телефоны ЧП ПРОМКОД: В Киеве: +38(044)38-38-773, В Херсоне: +38(0552)39-10-24

 Официальный сайт Частного предприятия «ПРОМКОД».

Поиск   
Главная :: О компании :: Контакты :: Обратная связь
  Навигатор:
Информация для клиентов
Доработки к Бухгалтерии для Украины ред. 1.2
Советы бухгалтеру
Язык программирования Перфолента.Net
  Все статьи

   >   >   >   > 



Оператор условного выбора блока кода Выбор Для

Оператор Выбор Для это отличная замена оператору Если в тех случаях, когда одно и тоже выражение используется в проверяемых условиях многократно.


Оператор Выбор Для в данном случае не поможет.

В языке Перфолента.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
            Тогда
    //блок кода    
Иначе
    //блок кода    
КонецВыбора        

 

Вывод:

Условный блочный оператор Выбор Для позволяет сделать код программы лучше читаемым, а часто и быстрее работающим. Он может с успехом применяться для замены оператора Если в тех случаях, когда одно и то же значение проверяется в условиях несколько раз.

 

 



  Новости ПРОМКОД:
      27.10.2019 Обновился до версии 0.4 дистрибутив языка программирования Перфолента.Net
      23.07.2019 Опубликована первая пробная версия языка программирования Перфолента
      03.07.2018 На портале поддержки пользователей опубликованы внешние формы отчетов "Декларация по НДС, Уточняющий расчет по НДС"
      27.06.2018 На сайте поддержки пользователей опубликована информация о проблемных ситуациях в типовых конфигурациях для Украины
      21.06.2018 Выпущены новые релизы типовых конфигураций для Украины на платформе 1С:Підприємство 7.7
       Все новости ПРОМКОД

  Развлечения:
Загрузка...
 



Официальный сайт ЧП ПРОМКОД
Copyright (c) ЧП ПРОМКОД, 2014-2020