Тип «Булево» и логические операции
Настало время познакомиться с логическими операциями и новым типом данных – Булево.
Самая простая логическая операция – это операция Равно. Она выясняет, равны между собой два значения или нет.
Эта операция определена для значений любых типов: для чисел, для строк, для дат и так далее. Важно лишь, чтобы оба значения, которые вы сравниваете, были одного и того же типа. Например, два числа или две строки.
Логическая операция Равно обозначается знаком «=». В подавляющем большинстве случаев логические операции используются в инструкциях Если и Цикл. Но эти инструкции вам пока незнакомы.
Поэтому знакомиться с операцией Равно вы будете с помощью инструкции присваивания. В ней эта операция будет выглядеть немного странно, поэтому для пущей важности вы заключите ее в скобки (рис. 3.79).
Рис. 3.79. Заготовка для операции «Равно»
Теперь внутри скобок напишите операцию Равно. Например, 5 = 5.
Затем напишите еще одну инструкцию присваивания, но так, чтобы в операции Равно участвовали разные числа. Например, 5 и 2.
Запустите «1С:Предприятие» в режиме отладки и посмотрите, чему равны переменные в этих инструкциях (рис. 3.80).
Рис. 3.80. Значение «Истина» и значение «Ложь»
Вы увидите, что там, где сравниваются два одинаковых числа, результатом является значение Истина. А там, где сравниваются разные числа, результатом является значение Ложь. К тому же оба этих значения имеют тип Булево (ударение на букву «у»).
Значения типа Булево – это значения, получаемые в результате логических операций. Значений типа Булево не бесконечное множество, как чисел или строк, а всего лишь два: Истина и Ложь. |
Логических операций во встроенном языке, как и в жизни, довольно много. Все они интуитивно понятны, и нет особой надобности в том, чтобы тренироваться в их использовании. Единственное, что может вызвать трудность, – это то, какими символами они обозначаются. Но в этом вам поможет таблица 3.1.
Таблица 3.1. Операции сравнения
Название | Символ | Пример | Результат |
Равно | = | 5 = 5 2 = 5 | Истина Ложь |
Не равно | <> | 2 <> 5 5 <> 5 | Истина Ложь |
Больше | > | 5 > 2 2 > 5 | Истина Ложь |
Больше или равно | >= | 2 >= 2 2 >= 5 | Истина Ложь |
Меньше | < | 2 < 5 5 < 2 | Истина Ложь |
Меньше или равно | <= | 2 <= 2 5 <= 2 | Истина Ложь |
Все перечисленные в этой таблице операции называются операциями сравнения. Потому что они сравнивают два значения. Причем операции Равно и Не равно можно применять к значениям любых типов. Главное, чтобы типы были одинаковыми с одной и с другой стороны операции.
А вот оставшиеся четыре операции (больше/меньше) можно применять только к двум числам, двум строкам или к двум датам.
В этом разделе вы не будете выполнять примеры с операциями сравнения. Но когда вы познакомитесь с инструкцией Если, у вас будет возможность как следует поупражняться в написании разных операций сравнения.
Булевы операции
А сейчас можно познакомиться с самыми интересными логическими операциями. Кроме операций сравнения есть еще группа логических операций, которые называются булевы операции.
Если операции сравнения можно было выполнять (в основном) над числами, строками и датами, то булевы операции выполняются только со значениями типа Булево. То есть со значениями Истина и Ложь.
Пока что вам трудно представить, зачем это может понадобиться. Но сейчас на нескольких примерах вы сразу все поймете.
Для этих примеров вам понадобится записывать булевы значения прямо в тексте программы, то есть использовать литералы. Так вот, литералы типа Булево выглядят очень просто. Значение Истина обозначается Истина, а значение Ложь обозначается Ложь.
Например, если вы хотите создать переменную, которая будет описывать погоду за окном, вы можете написать так (рис. 3.81).
Рис. 3.81. Литерал значения «Истина»
А если в другой переменной вы хотите уточнить, есть на улице дождь или нет, вы можете написать так (рис. 3.82). Попробуйте и посмотрите, чему равны переменные.
Рис. 3.82. Литерал значения «Ложь»
Обратите внимание, что платформа раскрашивает слова Истина и Ложь красным цветом. Потому что это специальные зарезервированные слова. И это значит, что переменную с таким именем, если вам вдруг захочется, создать нельзя.
ПОДРОБНЕЕ Полный список зарезервированных слов вы можете посмотреть в документации «Руководство разработчика 8.3. Раздел 4.2.4.6. "Зарезервированные слова"». |
Чтобы познакомиться с первой булевой операцией, создайте две переменные: ЯУмеюПлавать и РядомЕстьМоре. Задайте им те значения, которые есть на самом деле. А в книге, для примера, я присвою им значение Истина (рис. 3.83).
Рис. 3.83. Переменные «ЯУмеюПлавать» и «РядомЕстьМоре»
Теперь вам нужно с помощью логической операции узнать, будете вы плавать в море или нет.
Сначала попробуйте сказать это обычными словами. Наверное, получится что-то вроде «если я умею плавать и если рядом есть море, то тогда я буду плавать в море».
А теперь посмотрите (рис. 3.84), как эта же фраза выглядит на встроенном языке.
Рис. 3.84. Операция «И»
Чтобы сказать то же самое на встроенном языке, используется операция И. Как она работает, вы можете проверить сами на этом примере, изменив значения переменных.
Плавать в море вы будете только в том случае, когда оно есть рядом и вы умеете плавать. Если моря рядом нет, то плавать просто негде. А если вы не умеете плавать, то у вас тоже ничего не получится. Это очень опасно, вы можете утонуть. Ну, а если и моря нет, и плавать вы не умеете, то тем более поплавать в море вам не удастся.
Итак, операция И возвращает значение Истина только в том случае, когда оба операнда имеют значение Истина. Во всех остальных случаях она возвращает значение Ложь. |
Теперь решите другую задачу. Создайте две переменные УМеняЕстьЛодка и УМеняЕстьПлот. Можете задать им любые значения. А в книге, для примера, я присвою им значение Истина (рис. 3.85).
Рис. 3.85. Переменные «УМеняЕстьЛодка» и «УМеняЕстьПлот»
Теперь вам нужно с помощью логической операции узнать, сможете вы переплыть через озеро или нет.
Сначала попробуйте сказать это обычными словами. Наверное, получится что-то вроде «если у меня есть плот или лодка, то я могу переплыть через озеро».
А теперь посмотрите (рис. 3.86), как эта же фраза выглядит на встроенном языке.
Рис. 3.86. Операция «ИЛИ»
Чтобы сказать то же самое на встроенном языке, используется операция ИЛИ. Как она работает, вы можете проверить сами на этом примере, изменив значения переменных.
Если у вас есть лодка, вы можете переплыть через озеро? Да.
А если у вас не лодка, а плот – тогда сможете? Да, сможете.
А если у вас есть и лодка, и плот? Конечно! Даже два раза! Один раз на лодке, а другой – на плоту (шутка)!
А в каком случае вам не удастся переплыть через озеро? Правильно. Когда у вас нет ни лодки, ни плота.
Итак, операция ИЛИ работает аналогично операции И, только в отношении значения Ложь. Она возвращает значение Ложь только в том случае, когда оба операнда имеют значение Ложь. Во всех остальных случаях она возвращает значение Истина. |
Теперь усложните свой пример и познакомьтесь с тем, что в одном выражении могут использоваться сразу несколько булевых операций.
Создайте три переменные: ЯУмеюПлавать, РядомЕстьМоре и РядомЕстьБассейн. Задайте им те значения, которые есть на самом деле. А в книге я снова не буду усложнять и присвою им значение Истина (рис. 3.87).
Рис. 3.87. Переменные «ЯУмеюПлавать», «РядомЕстьМоре» и «РядомЕстьБассейн»
А вопрос, решением которого вы займетесь, будет практически тем же самым. Чему будет равна переменная ЯБудуПлавать?
Если вы будете отвечать словами, то скажете: «Я буду плавать, если я умею плавать и рядом есть море или бассейн». Попробуйте записать это на встроенном языке (рис. 3.88).
Рис. 3.88. Переменная «ЯБудуПлавать»
На первый взгляд кажется, что все хорошо. Но нужно проверить.
Например, вы не умеете плавать. В этом случае не важно, есть рядом бассейн или нет: плавать вы не должны. Но что говорит вам программа? Попробуйте (рис. 3.89).
Рис. 3.89. «ЯБудуПлавать = Истина»
Программа говорит вам, что плавать вы будете. Получается какое-то «опасное» программирование. С таким программированием и утонуть недолго!
В чем же дело? Может быть, вы написали неправильные операции? Нет, правильные.
Просто вы не учли, что если несколько булевых операций встречаются в одном выражении, у них есть определенный порядок выполнения. Точно так же, как было с арифметическими операциями +, -, * и /.
Сначала выполняется операция И, а затем уже выполняется операция ИЛИ. А если подряд встречаются несколько одинаковых операций, то они выполняются в той последовательности, в которой написаны.
Поэтому в примере выражение было посчитано таким образом (рис. 3.90).
Рис. 3.90. Порядок вычисления выражения
Сначала была выполнена операция И, которая дала Ложь. А затем операция ИЛИ, результатом которой явилась Истина.
На самом же деле для вас в этом выражении важны две вещи. Что вы умеете плавать и что есть, где плавать. А море это или бассейн – не так важно.
Поэтому правильным решением будет РядомЕстьМоре ИЛИ РядомЕстьБассейн заключить в скобки (рис. 3.91). Попробуйте.
Рис. 3.91. «ЯБудуПлавать = Ложь»
Тогда платформа сначала вычислит то выражение, которое в скобках. То есть узнает, есть, где плавать, или плавать негде. А потом уже поинтересуется вашим умением плавать (рис. 3.92).
Рис. 3.92. Порядок вычисления выражения
Чтобы закрепить этот пример, немного измените его условие. Создайте три переменные: ЯУмеюПлавать, РядомЕстьМоре и РядомЕстьВанна. Задайте им те значения, которые были в последнем примере: Ложь, Истина и Истина (рис. 3.93).
Рис. 3.93. Переменные «ЯУмеюПлавать», «РядомЕстьМоре» и «РядомЕстьВанна»
А вычислить нужно будет переменную, которая называется ЯБудуКупаться. Будьте внимательны: имя переменной изменилось не просто так.
Попробуйте записать выражение на встроенном языке и потом сравните с тем, что на рисунке 3.94.
Рис. 3.94. «ЯБудуКупаться = Истина»
Запустите «1С:Предприятие» в режиме отладки и посмотрите, какой получается результат, если изменить значения переменных.
Почему в этом случае скобки не понадобились, хотя пример внешне очень похож на предыдущий? Скобки не понадобились потому, что «естественный» порядок выполнения логических операций в этом выражении вполне вас устраивает (рис. 3.95).
Рис. 3.95. Порядок вычисления выражения
Действительно, умение плавать важно только тогда, когда вы собираетесь зайти в море. Если вы хотите искупаться в ванне, то умение плавать вам совершенно не нужно.
Поэтому совершенно правильно, что сначала выполняется операция И и выясняется, можете ли вы купаться в море. А затем уже проверяется наличие ванны, для использования которой способность плавать не требуется.
В заключение нужно сказать еще об одной булевой операции – операции НЕ. Она очень простая. Она возвращает булево значение, противоположное тому, которое имеется.
Чтобы посмотреть, как она работает, вы можете использовать пример, показанный на рисунке 3.96.
Рис. 3.96. Операция «НЕ»
Обычно с использованием этой операции никаких трудностей не возникает. Единственное, что может вам понадобиться, это порядок выполнения булевых операций. Полностью он выглядит так:
- сначала выполняется то, что в скобках;
- затем операция НЕ;
- затем операция И;
- затем операция ИЛИ.
3.20. Задание простое Чтобы по пути на работу защититься от дождя, вы берете с собой зонт. С помощью переменных ЯИдуНаРаботу и ИдетДождь вычислите значение переменной НадоВзятьЗонт. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
3.21. Задание простое В каких случаях вы не ходите в школу? Когда выходной (праздники, каникулы) и когда вы болеете. С помощью переменных СегодняВыходной и ЯБолею вычислите значение переменной ЯНеИдуВШколу. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
3.22. Задание сложное В хорошую погоду, когда у вас нет занятий, вы всегда идете гулять. С помощью переменных ХорошаяПогода, СегодняВыходной и СегодняПраздник вычислите значение переменной ЯИдуГулять. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
3.23. Задание сложное Вы работаете только по будним дням. С помощью переменных СегодняСуббота и СегодняВоскресенье вычислите значение переменной ЯИдуНаРаботу. Проверьте, что ваша инструкция правильно работает при любых значениях исходных переменных. |
Инструкция «Если»
Наконец настало время познакомиться с еще одной инструкцией, которая используется во встроенном языке.
Если бы вы использовали только инструкцию присваивания, то ваша программа выглядела бы как прямая дорога из пункта «А» в пункт «Б». От начала к завершению (рис. 3.97).
Рис. 3.97. Прямая дорога из пункта «А» в пункт «Б»
Потому что инструкции присваивания выполняются одна за другой в том порядке, в котором они написаны.
Но на самом деле большинство программ выглядят по-другому. Между началом программы и ее завершением существует много разных путей, по которым может пойти исполнение программы (рис. 3.98).
Рис. 3.98. Много путей из пункта «А» в пункт «Б»
Для этого есть много разных причин. Например, это зависит от того, какие данные уже есть в программе. Если есть все необходимые данные, то исполнение пойдет по одному пути. Если каких-то данных не хватает, то по другому пути.
Также это зависит от того, что вы хотите получить в результате. Если из своего электронного дневника вы хотите узнать, будет завтра урок математики или нет, то это будет один путь, простой. А если вы хотите получить расписание уроков на всю неделю с указанием кабинетов, преподавателей и того, что задано, то это будет другой путь, сложный. Потому что программе нужно будет обойти много разных мест и собрать для вас всю информацию, которую вы просите.
Именно для того, чтобы направить исполнение программы по одному или по другому пути, существует инструкция Если. Выглядит она очень просто (рис. 3.99).
Рис. 3.99. Инструкция «Если»
Она позволяет выделить несколько инструкций, которые будут выполняться не всегда, а только тогда, когда в результате вычисления логического выражения получается Истина.
Слова Если, Тогда и КонецЕсли являются обязательными в этой инструкции. Логическое выражение пишется между словами Если и Тогда. А КонецЕсли показывает, где заканчиваются инструкции, выполнение которых зависит от условия.
Чтобы посмотреть, как это работает, сделайте небольшой пример. Создайте переменную и запишите в нее свой возраст. А затем создайте другую переменную, ЯИдуВДетскийСад, и присвойте ей значение Истина. Но эту переменную создайте только в том случае, если вы еще не достигли школьного возраста. Чтобы не запутаться, будем считать, что школьный возраст начинается с 7 лет.
Когда вы сделаете свой пример, сравните его с тем, что на рисунке 3.100.
Рис. 3.100. Пример
Установите точку останова на строке Если …, запустите «1С:Предприятие» в режиме отладки и посмотрите значение выражения МойВозраст < 7 (Shift + F9) (рис. 3.101).
Рис. 3.101. Значение выражения «МойВозраст < 7»
Вы увидите, что оно равно Ложь. И это правильно. Ваш возраст больше, чем 7 лет.
Раз выражение ложно, значит, платформа должна пропустить все инструкции, которые написаны внутри инструкции Если. Проверьте это с помощью пошагового исполнения (F11). Сделайте один шаг (рис. 3.102).
Рис. 3.102. Один шаг исполнения
Действительно, платформа перейдет на строку КонецЕсли. А если вы шагнете еще раз, то она остановится на строке КонецПроцедуры. При этом значение переменной ЯИдуВДетскийСад будет Неопределено, потому что эта инструкция не выполнялась и такая переменная даже не создавалась.
А теперь познакомьтесь с тем, как поведет себя платформа в том случае, когда выражение истинно. Для этого вы не будете изменять текст программы. Вы воспользуетесь возможностью изменения значений переменных прямо в процессе отладки.
Чтобы это сделать, вам потребуется сначала перезапустить отладку. Для этого выполните команду Отладка – Перезапустить (рис. 3.103).
Рис. 3.103. Перезапустить отладку
После того как отладка перезапустится, исполнение снова остановится на строке Если… Откройте локальные переменные (если это окно у вас закрыто).
Дважды щелкните мышью по ячейке со значением 25 (рис. 3.104).
Рис. 3.104. Изменение значения переменной
Она перейдет в режим редактирования. Введите 6 и нажмите Enter.
С этого момента значение переменной МойВозраст будет равно 6. А вы можете продолжать отладку так же, как и раньше.
Посмотрите значение выражения МойВозраст < 7. Теперь оно будет равно Истина (рис. 3.105).
Рис. 3.105. Значение выражения «МойВозраст < 7»
Сделайте один шаг. Исполнение зайдет «внутрь» инструкции Если (рис. 3.106).
Рис. 3.106. Один шаг исполнения
Теперь, если вы сделаете еще пару шагов, вы дойдете до конца процедуры. А значение переменной ЯИдуВДетскийСад будет равно Истина.
ПОДРОБНЕЕ Подробнее вы можете прочитать про изменение значений переменных при отладке в документации «Руководство разработчика 8.3. Раздел 28.2.10. "Изменение значения переменной"». |
До сих пор вы рассматривали самую простую форму инструкции Если. На самом деле она может быть более сложной. Смотрите.
В вашем примере «особенные» действия выполняются только в том случае, когда ваш возраст меньше 7 лет. Но представьте, что вам нужно принять решение из двух вариантов. Если меньше 7 лет, вы идете в детский сад. А во всех других случаях вы идете в школу. Как это записать на встроенном языке?
Оказывается, очень просто. Для этого используется ключевое слово Иначе (рис. 3.107).
Рис. 3.107. Ключевое слово «Иначе»
Доработайте пример так, чтобы в результате его работы у вас создавались две переменные: ЯИдуВДетскийСад и ЯИдуВШколу. И чтобы они принимали правильные значения (Истина или Ложь) в зависимости от возраста, указанного в переменной МойВозраст.
Сравните свой результат с тем, что показано на рис. 3.108.
Рис. 3.108. Доработанный пример
Запустите «1С:Предприятие» в режиме отладки и проверьте по шагам правильность работы примера для разных значений возраста. Изменяйте возраст прямо в процессе отладки.
Очень часто в инструкции Если анализируется не одно, а несколько условий. Например, в одно прекрасное утро вы проснулись и вспомнили, что вам нужно идти учиться. Но вы не помните, куда именно: в детский сад, в школу или в институт.
Зато вам известны правила. До 7 лет нужно идти в детский сад. После детского сада нужно идти в школу. Учиться в школе заканчивают в 18 лет. А в 19 лет поступают в институт.
Чтобы записать этот алгоритм на встроенном языке, вам понадобится еще одно ключевое слово – ИначеЕсли (рис. 3.109).
Рис. 3.109. Ключевое слово «ИначеЕсли»
В вашем примере его нужно будет написать вместо ключевого слова Иначе. А затем написать условие, при котором вам нужно идти в школу.
А в конце примера вы снова добавите слово Иначе и укажете, что во всех остальных случаях вы идете в институт. Попробуйте сделать пример самостоятельно.
Чтобы проверить свой результат, сравните его с рисунком 3.110.
Рис. 3.110. Пример «Я иду в институт»
В режиме отладки пройдите по разным веткам инструкции Если и посмотрите, как она работает.
Вы увидите, что выражения, которые указаны в инструкции Если, вычисляются и анализируются по очереди. В том порядке, в котором они написаны. Как только попадается истинное выражение, выполняется соответствующая ветка инструкции Если. После этого исполнение переходит на КонецЕсли. То есть инструкции, расположенные в тех ветках, где выражение было ложно, или в тех ветках, до которых проверка выражений не дошла, просто не выполняются.
В этом заключается особенность инструкции Если, о которой нужно помнить и которую нужно учитывать. Если вы откроете локальные переменные, то увидите, что после выполнения примера переменная ЯИдуВИнститут может оказаться не определена. Например, если ваш возраст равен 15 (рис. 3.111).
Рис. 3.111. Переменная «ЯИдуВИнститут» не определена
А если возраст равен 20, то не определены окажутся переменные ЯИдуВДетскийСад и ЯИдуВШколу (рис. 3.112).
Рис. 3.112. Не определены переменные «ЯИдуВДетскийСад» и «ЯИдуВШколу»
А ведь в «живой» программе вы наверняка будете создавать подобные переменные не просто так, а для того чтобы использовать их в дальнейшем. И если какой-то из этих переменных не окажется, ваша программа работать не сможет.
Какой выход из этой ситуации? Нудно и дотошно в каждой ветке инструкции Если прописывать создание всех переменных, которые вам могут понадобиться? Нет.
Есть гораздо более простое и удобное решение. Прямо перед инструкцией Если вы создаете все переменные, которые вам понадобятся. И присваиваете им некоторое стандартное значение – значение «по умолчанию». Например, Ложь.
А дальше, в ветках инструкции Если, вы меняете значения только тех переменных, которым это действительно нужно. Посмотрите пример на рисунке 3.113.
Рис. 3.113. Другой вариант примера
Сделайте этот пример в своей конфигурации и посмотрите, как он работает.
При любых значениях возраста будут существовать все переменные. И они будут иметь правильные значения (рис. 3.114).
Рис. 3.114. Все переменные определены
3.24. Задание простое Вы с другом каждый день играете в игру через Интернет. В будний день родители разрешают вам играть только один час. В выходные дни вы можете играть по 4 часа. Используя переменную НомерДняНедели, вычислите, сколько часов вы можете играть с другом в выбранный день. Результат поместите в переменную ВремяДляИгры. |
3.25. Задание простое В задании 3.24 нужно учесть, что номер дня недели может быть задан с ошибкой. В случае ошибки ваша программа должна вернуть результат 0. |
3.26. Задание сложное Супермаркет работает с 9 часов утра до 8 часов вечера. Вам нужно сходить в супермаркет и купить кефир. Если кефира не будет, то ряженку. Если не будет ни того, ни другого, тогда нужно зайти в круглосуточный магазин и купить молоко, если оно там есть. Используйте переменные ЕстьКефир, ЕстьРяженка, ЕстьМолоко и ТекущийЧас. Название своей покупки в виде строки поместите в переменную МояПокупка. |
Красивая программа
Я уже говорил раньше, что ваша конфигурация должна быть красивой. Говорил о том, что имена переменных должны быть удобными, понятными. Говорил, что выражения должны быть записаны понятно и «читабельно». Теперь настал удобный случай рассказать о том, как должен выглядеть текст вашей программы.
Вы, наверное, уже привыкли к тому, что платформа сама раскрашивает слова в вашей программе. И это удобно. Еще, может быть, вы обратили внимание на то, что платформа сама делает отступ, когда вы пишете инструкцию Если.
Если вы этого не заметили, то поставьте маленький эксперимент. В модуле напишите Если а = 2 Тогда. И нажмите клавишу Enter (рис. 3.115).
Рис. 3.115. Синтаксический отступ
Вы увидите, что на новой строке курсор встанет не под буквой Е, а с некоторым сдвигом вправо. Этот сдвиг называется синтаксический отступ. Он помогает вам лучше и легче читать текст программы. Потому что «подчиненные» инструкции, расположенные внутри одной ветки, оказываются выделены визуально (рис. 3.116).
Рис. 3.116. Есть синтаксический отступ
Посмотрите, какая «каша» получилась бы, если бы синтаксического отступа не было (рис. 3.117).
Рис. 3.117. Нет синтаксического отступа
Прочитать такую «кашу» и разобраться в ней очень сложно.
Поэтому синтаксический отступ – это важная, обязательная часть программы. Именно поэтому платформа делает его автоматически, когда вы набираете текст инструкции последовательно.
Но далеко не всегда вы работаете именно так. Даже при выполнении ваших простых примеров вы видите, что приходится изменять то, что уже написано. Вставлять новые строки. Копировать из одного места в другое. В этих случаях платформа не может автоматически сделать синтаксический отступ. В результате у вас вполне может получиться такой текст (рис. 3.118).
Рис. 3.118. Текст с нарушенным форматированием
Как с ним быть? Двигать каждую строку вручную, чтобы было «красиво»? Это скучно, долго и неинтересно.
Поэтому в платформе есть команда, которая может сделать это автоматически. Но сейчас вы ее не видите. Панель Текст, в которой расположена эта команда, при стандартных настройках конфигуратора не показывается. Но вы всегда можете ее включить, чтобы команда форматирования была у вас под рукой.
Для этого нажмите правой кнопкой мыши на пустом месте справа в верхней командной панели (рис. 3.119).
Рис. 3.119. Настройка панелей конфигуратора
В появившемся меню щелкните по строке Текст. В нижней части окна появится новая командная панель (рис. 3.120).
Рис. 3.120. Командная панель «Текст» и команда «Форматировать»
В этой панели находится команда Форматировать, которая вам и нужна.
Пользоваться этой командой очень просто. Сначала вы выделяете текст, который нужно отформатировать. Для этого, например, нажимаете мышью на серой полосе в первой строке текста (рис. 3.121).
Рис. 3.121. Начало выделения текста
Затем, не отпуская кнопку мыши, ведете ее до последней строки, которая вам нужна (рис. 3.122).
Рис. 3.122. Выделен текст, который нужно форматировать
И нажимаете кнопку Форматировать. Текст сразу становится красивым и отформатированным (рис. 3.123).
Рис. 3.123. Отформатированный текст
ПОДРОБНЕЕ Подробнее вы можете прочитать про форматирование текста программы в документации «Руководство разработчика 8.3. Раздел 27.2.1.4.1. "Форматирование синтаксических конструкций"». |
Помимо синтаксического отступа есть и другие способы сделать текст более понятным. Например, один из хороших способов – это добавление пустых строк в текст программы. Они позволяют разделить текст на несколько отдельных смысловых блоков.
Если взять пример с инструкцией Если, то такие смысловые блоки напрашиваются сами собой. Каждая ветка этой инструкции является отдельным смысловым блоком. Поэтому, если перед началом ветки вы добавите пустую строку, это только улучшит читаемость вашей программы (рис. 3.124).
Рис. 3.124. Использование пустых строк
Другой хороший и очень часто используемый прием – создание комментариев. Комментарий – это пояснение к программе, которое находится прямо в тексте программы (рис. 3.125).
Рис. 3.125. Комментарий
Комментарии всегда начинаются с пары косых черт – //. Платформа выделяет комментарии зеленым цветом.
Комментарии, конечно, могут быть разными. Сформулировать правило: «Комментарии должны быть вот такими...» – невозможно. Ситуации бывают разные.
Но в большинстве случаев нужно стремиться к тому, чтобы описать не ЧТО делается, а чтобы пояснить, ЗАЧЕМ это делается.
Главная сложность тут заключается в том, что в тот момент, когда вы пишете программу, вы прекрасно понимаете, зачем вы делаете то или это. И вам кажется, что писать по этому поводу комментарии совершенно не нужно. Ведь и так все понятно!
Но проходит неделя, месяц, год… Вы открываете свою старую программу и вдруг с удивлением обнаруживаете, что в ней вообще ничего не понятно. Иногда даже бывает такое ощущение, что все это писали не вы, а кто-то другой.
Поэтому всегда нужно самого себя немного «заставлять» писать комментарии. В этот момент можно представить, что вы пишете программу не «для себя», а для другого программиста. Которому нужно будет разобраться с ней без вашей помощи.
Если вы себе это представите, то сразу поймете, например, что такой комментарий будет бесполезен (рис. 3.126).
Рис. 3.126. Бесполезный комментарий
А если вы напишете комментарий так, то он, наоборот, очень поможет и вам, и другим (рис. 3.127).
Рис. 3.127. Полезный комментарий
Умение писать нужные и полезные комментарии можно приобрести только с опытом. Поэтому пробуйте, пишите, не ленитесь.
Чтобы комментарии выглядели понятно и красиво, придерживайтесь нескольких простых правил.
Большие комментарии и комментарии к блоку инструкций пишите с начала строки. Начинайте их с большой буквы. Между // и комментарием оставляйте пробел. Предложение завершайте точкой. Перед комментарием вставляйте пустую строку.
Например, так (рис. 3.128).
Рис. 3.128. Однострочный комментарий
Или так (рис. 3.129).
Рис. 3.129. Многострочный комментарий
Комментарии к отдельным строкам программы пишите в этих же строках. С маленькой буквы и без точки в конце (рис. 3.130).
Рис. 3.130. Небольшие комментарии в строках
ПОДРОБНЕЕ Подробнее вы можете прочитать про комментарии в документации «Руководство разработчика 8.3. Раздел 4.2.4.1. "Комментарии"». |
Инструкция «Цикл»
Представьте себе такую задачу. Вам нужно напечатать список. В этом списке должно быть указано, сколько занятий у вас в понедельник, во вторник и так далее:
- в 1-й день – 6 занятий;
- во 2-й день – 8 занятий;
- в 3-й день – 7 занятий и т. д.
Чтобы это сделать, у вас есть две переменные. Одна – ДеньНедели. В ней вы можете хранить порядковый номер дня недели. Другая – Занятий. В ней вы можете хранить количество занятий.
Печатать вы пока не умеете. Поэтому упростим задачу. Вместо того чтобы напечатать, вам будет достаточно выполнить такую инструкцию:
Рис. 3.131. Пример инструкции
То есть в переменную Сказать вы просто поместите ту строку, которую надо было бы напечатать.
Эта строка «склеивается» из нескольких частей, из нескольких строк. В ней используются переменные ДеньНедели и Занятий. Но поскольку эти переменные содержат числа, то в «голом» виде их в этой инструкции использовать нехорошо. Сначала нужно сделать из них строки. Для этого и используется два раза функция встроенного языка Строка(). То значение, которое указано у нее в скобках, она преобразует к значению типа Строка.
Но это я отвлекся от задачи. А она у вас такая. Есть две переменные, и есть инструкция. Нужно с их помощью «напечатать» список.
Если бы вы знали только инструкцию присваивания, вы бы стали делать эту задачу так (рис. 3.132).
Рис. 3.132. Последовательный способ решения задачи
Не поленитесь, сделайте в своей конфигурации этот пример. Чтобы три раза не писать одно и то же, напишите только для первого дня. А затем скопируйте эти строки два раза. В скопированных строках измените день недели и количество занятий.
В режиме отладки пройдите по шагам и посмотрите, какие строки получаются в переменной Сказать (рис. 3.133).
Рис. 3.133. Результат
Почему вы не стали доделывать этот пример до конца? Потому что каждый день делается одно и то же. Зная порядковый день недели, вы выясняете, сколько занятий в этот день. А для этого очень хорошо подходит инструкция Если (рис. 3.134).
Рис. 3.134. Пример использования инструкции «Если»
Расписание у вас таково, что в понедельник, четверг и пятницу у вас 6 занятий, во вторник 8, в среду 7, а в выходные занятий нет. Напишите это с помощью инструкции Если.
У вас получится такой пример (рис. 3.135).
Рис. 3.135. Инструкция «Если»
Если теперь после инструкции Если добавить вашу «печать», то получится именно то, что нужно сделать для каждого дня (рис. 3.136). Вы узнаете количество занятий и «печатаете».
Рис. 3.136. Инструкция «Если» и «печать»
Весь вопрос теперь в том, как выполнить эти строки программы для каждого дня недели. А для этого как раз и нужна инструкция Цикл. Она «снаружи» обрамляет тот фрагмент, который нужно выполнить несколько раз, и выглядит следующим образом (рис. 3.137). Сделайте такой же пример в своей конфигурации.
Рис. 3.137. Инструкция «Цикл»
Работает она следующим образо<