Управляющие операторы

Управляющими операторами (control statement) называются исполняемые операторы, меняющие последовательность выполнения инструкций программы. Из всех операторов, использующихся в языках программирования, операторы управления вызвали больше всего споров. Основным предметом дискуссий является самый простой оператор управления goto. Он позволяет изменить порядок выполнения программы и перейти к выполнению программы, начиная с определенного места, которое обозначено именем или числом. Следовательно, этот оператор является не чем иным, как непосредственным применением команды перехода машинного языка. Наличие такого оператора в языке высокого уровня позволяет программистам писать такие бессистемные программы1:

goto 40 20 Применить процедуру Evade

goto 70 40 if (KryptoniteLevel < LethalDose) then goto 60

goto 20

60 Применить процедуру RescueDamsel 70...

тогда как все эти действия можно записать с помощью одной структуры:

if (KryptoniteLevel < LethalDose)

then (применить процедуру RescueDamsel) else (применить процедуру Evade)

Для того чтобы избежать таких сложностей, современные языки программирования содержат такие операторы управления, которые позволяют записывать ветвящиеся структуры с помощью одного выражения. Некоторые общепринятые ветвящиеся структуры и соответствующие им в разных языках программирования операторы управления изображены на рис. 5.7. Обратите внимание на го, что с первыми двумя структурами мы уже встречались в главе 4. В нашем псевдокоде они представлены операторами if-then-else и while. Третью структуру, которая называется выбором, можно рассматривать как расширение структуры i f-then-el se. Различие между ними состоит в том, что оператор if-then-else позволяет выбирать из двух вариантов, а оператор case — из нескольких.

Другой распространенной структурой является оператор цикла for (рис. 5.8), подобный оператору while нашего псевдокода. Различие между ними заключается в том, что инициализация, модификация и проверка условия завершения цикла объединены в одном операторе. Такой оператор удобно использовать, когда тело цикла нужно выполнить определенное количество раз — один раз для каждого значения переменной-счетчика в заданном интервале. В частности, оператор, изображенный на рис. 5.8, предписывает, чтобы тело цикла было выполнено несколько раз: когда значение переменной Count равно 1, затем когда ее значение равно 2 и последний раз, когда ее значение равно 3.

Из приведенных примеров можно сделать вывод, что ветвящиеся структуры с незначительными вариациями присутствуют и в императивных, и в объектно-ориентированных языках программирования. В теоретической вычислительной технике существует предположение, что решение любой задачи, имеющей алгоритмическое решение, можно записать с помощью ограниченного количества структур. Мы обсудим это утверждение в главе 11. А пока следует заметить, что изучение языка программирования — это не бесконечное изучение различных операторов управления. На самом деле большинство структур управления, используемых в современных языках программирования, являются разновидностью структур, описанных в этой главе.

Выбор того, какие структуры включить в язык программирования, дело вкуса. Перед создателем языка стоит цель разработать язык, который не только позволяет записывать алгоритмы в удобном для чтения виде, но также помогает программисту в этом. Эта цель достигается с помощью ограничения использования тех элементов, которые исторически привели к неаккуратному программированию, и введения хорошо продуманных элементов. В результате мы имеем структурное программирование (structured programming), которое объединяет в себе методы написания программ и правильное использование операторов управления. Цель состоит в том, чтобы создать программу, легкую для понимания и выполняющую поставленные перед ней задачи.

Комментарии

Опыт показывает, что когда человек пытается понять программу большого размера, не столь важно, насколько хорошо продуман язык программирования и как используются его свойства, сколь полезна или даже обязательна дополнительная информация, представленная на нормальном человеческом языке. Поэтому в языках программирования предусмотрена возможность размещения в программе поясняющих комментариев (comments). Транслятор игнорирует комментарии, поэтому их присутствие или отсутствие никак не отражается на программе с точки зрения машины. Версия программы на машинном языке, порождаемая транслятором, остается неизменной, с комментариями или без них. Но информация, которую они содержат, является важной для человека. Без нее невозможно было бы понять большие и сложные программы.

VISUAL BASIC

Visual Basic является объектно-ориентированным языком программирования. Он был разработан компанией Microsoft как инструмент, с помощью которого пользователи операционной системы Microsoft Windows могли бы разрабатывать свой собственный графический пользовательский интерфейс. На самом деле Visual Basic — это больше, чем просто язык программирования. Он представляет собой полный пакет для разработки программного обеспечения, который позволяет программисту создавать пользовательский интерфейс из определенных компонентов (таких как кнопки, флажки, текстовые поля, полосы прокрутки и т. д.) и переделывать эти компоненты согласно своим потребностям, описывая, как они должны реагировать на определенные события. Например, в случае с кнопкой программист может описать, что должно происходить, если щелкнуть на ней мышью. Этот метод создания программного обеспечения из заранее определенных компонентов является современной тенденцией в разработке программного обеспечения.

Благодаря популярности операционной системы Windows и удобству использования пакета Visual Basic, язык Visual Basic стал сегодня одним из самых распространенных языков программирования. С другой стороны, из-за того что Visual Basic совместим только с программными средствами компании Microsoft, он не признается языком программирования общего назначения.

Существует два основных способа отделения комментариев от текста программы. Один из них — заключить комментарий в специальные скобки. Другой способ — обозначить начало комментария, который может занимать оставшуюся часть строки справа от знака. В языках C++, С# и Java возможны оба способа записи комментариев. В них комментарий можно поместить между знаками /* и */ или начать его с //. Таким образом, в C++, С# и Java допустимы обе записи:

/* Это комментарий. */

или

// Это комментарий.

Следует сказать несколько слов о том, что же стоит писать в комментариях. Начинающие программисты, когда им говорят о необходимости снабжать программу комментариями, обычно к такому выражению, как

ApproachAngle - SlipAngle - HyperSpacelncine:

добавляют комментарий «Вычесть HyperSpacelncine из SlipAngle и присвоить значение переменной ApproachAngle». Такие комментарии не делают программу более понятной, а только удлиняют ее. Запомните, что цель комментария — пояснить программу, а не повторить ее. В данном примере лучше объяснить, почему вычисляется значение переменной ApproachAngl e (если это не ясно из программы). Например, комментарий: «Переменная ApproachAngle используется позже для вычисления значения переменной ForceFiel dJetti sonVel ocity», намного полезнее, чем предыдущий.

Кроме того, комментарии, помещенные между операторами программы, иногда затрудняют чтение и понимание программы. Лучше всего помещать комментарии, касающиеся одного блока программы, в одном месте, например в его начале. Так создается некоторый участок программы, который содержит описание цели и общие характеристики блока программы где пользователь может найти необходимые объяснения. Если использовать такой прием для всех блоков программы, тогда программа приобретает единообразие: каждый блок состоит из пояснительных комментариев, за которыми следует формальное представление этого блока. Подобное единообразие значительно облегчает чтение программы.

Процедурные единицы

В предыдущих главах мы говорили о преимуществах разбиения больших программ на небольшие управляемые единицы. В этом разделе мы сосредоточим наше внимание на понятии процедуры, которая является основным средством получения модульного представления программы, написанной на императивном языке программирования. Процедура также является инструментом, который используется в программе, написанной на объектно-ориентированном языке, для описания того, как объект должен отвечать на различные входные сигналы.

Процедуры

Процедура (procedure) — это набор команд для выполнения некоторой задачи, который другие программные единицы могут использовать в качестве абстрактного инструмента. Управление передается процедуре (с помощью команды перехода машинного языка), когда ее действия необходимы, а затем, после завершения выполнения процедуры, снова возвращается исходной программной единице (рис. 5.9). Процесс передачи управления процедуре называется вызовом процедуры. Программную единицу, которая запрашивает выполнение процедуры, мы будем называть вызывающей программой или вызывающим модулем (calling unit).

Во многих отношениях процедура представляет собой небольшую программу, состоящую из операторов описания, за которыми следуют исполняемые операторы, определяющие выполняемые процедурой действия. Как правило, переменная, объявленная в процедуре, является локальной переменной (local variable), то есть ее можно использовать только в данной процедуре. Такой подход исключает путаницу, которая может возникнуть, если две независимые друг от друга про-дуры используют переменные с одинаковыми именами. Переменные, действие которых не ограничивается какой-либо одной частью программы, называются глобальными переменными (global variable), они доступны в любом месте программы. В большинстве языков программирования используются и локальные, и глобальные переменные.

В рассматриваемых нами языках программирования описание процедуры почти такое же, как в нашем псевдокоде (см. главу 4). Оно начинается с выражения, которое называется заголовком процедуры и которое помимо всего прочего содержит имя процедуры. За заголовком следуют операторы, определяющие процедуру более детально.

Однако в отличие от нашего нестрогого псевдокода, в котором мы запрашивали выполнение процедуры с помощью такого выражения, как «Применить процедуру Deacti vateCrypton», большинство современных языков программирования позволяют вызывать процедуру, просто указав ее имя. Например, если GetNames, SortNames и WriteNames являются именами процедур для получения, сортировки и вывода на печать списка имен, то программу, получающую список, сортирующую его и выводящую на печать, можно записать как

GetNames:

SortNames;

WriteNames;

а не

Применить процедуру GetNames. Применить процедуру SortNames. Применить процедуру WriteNames.

Обратите внимание на то, что поскольку мы присвоили каждой процедуре имя, которое обозначает действие, выполняемое этой процедурой, эта краткая форма записи представляет собой последовательность команд, отражающую назначение программы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: