Cтраница 3
В приведенном ниже примере исключение генерируется оператором throw, находящемся в блоке try. Оператор throw также размещается в теле функции, вызываемой в блоке try, но управление по-прежнему перепрыгивает в присоединенный блок catch ( если только throw не находится внутри вложенного блока try), как будет описано в следующем разделе. [31]
Если во вложенном блоке какой-то идентификатор внешнего блока переопределен ( т.е. объявлен заново), то в этом вложенном блоке виден только переопределенный идентификатор. Например, если во внешнем блоке объявлена переменная In, а затем во вложенном блоке переменная In объявлена повторно, то эта новая локальная переменная не имеет ничего общего с внешней переменной. Во вложенном блоке, где переменная объявлена повторно, видна только эта новая переменная. А во внешнем блоке видна только внешняя переменная. [32]
Поскольку блок - это частный случай оператора, то, согласно синтаксису, блоки могут быть вложены один в другой. Объекты, описанные в каждом блоке, могут употребляться только внутри него и становятся недоступными при выходе из этого блока. Поэтому локальные объекты вложенного блока недоступны во внешнем блоке. Что касается описаний из внешнего блока, то их действие, как правило, распространяется и на внутренний блок; в частности, во внутреннем блоке можно употреблять все те же переменные, что и во внешнем блоке. [33]
Следующей немаловажной особенностью языка являются средства изображения структур и средства работы со структурами. Не пытаясь дать формального определения структуры, можно на нескольких примерах пояснить, что она обозначает. Например, система вложенных блоков программы представляет собой структуру, и ее характер может быть представлен системой открытых и закрытых скобок. [34]
Языки программирования использует определенные правила, связанные с оформлением программы. Большинство из них не влияет на ее выполнение, но значительно упрощает восприятие программы и поиск ошибок. Одним из таких правил является отступ вложенного блока по отношению к внешнему. В примере для кнопочной формы, приведенном выше, все операторы между началом и концом процедуры смещены влево на одну позицию табуляции, а операторы вложенных блоков ( таких как For... [35]
Блок-схема условного оператора. [36] |
Блоком в языке АЛГОЛ-60 называется один или несколько операторов, заключенных в операторные скобки begin и end, если сразу после begin следует описание переменных. Переменные, описанные после begin, считаются локализованными в данном блоке. Один блок может включать в себя несколько вложенных блоков. [37]
Программа main вызывает функцию Func, генерирующую исключение. При появлении исключения поток управления входит в два блока try, не выполняя ни один из них. Таким образом, исключение генерируется в контексте двух динамически вложенных блоков. Динамическое вложение try зависит от действительной последовательности вызовов функций перед возникновением исключения. [38]
Класс высокоуровневых языков, в которых программа составляется из блоков, в том числе вложенных; вложение может повторяться и осуществляться на любую глубину. Блок программы состоит из последовательности операторов и блоков, которой предшествуют объявления переменных. Переменные, объявленные в головной части блока, различимы по всему блоку и любым вложенным блокам, если, конечно, переменная с тем же самым именем не объявляется в головной части внутреннего блока. В этом случае новое объявление действует по всему внутреннему блоку, причем внешнее объявление снова начинает действовать в конце внутреннего блока. В таких ситуациях принято говорить, что переменные имеют вложенные области действия. Понятие блочная стонктноа было введено в процессе создания семейства языков Алгол ( А. Algol), поэтому языки с блочной структурой иногда называют алголоподобными. [39]
В основу синтаксиса Алгола положен принцип блочной организации структуры программы, организации, которая впервые была введена в этом языке. Программа состоит из вложенных блоков. Определения подпрограммы встречаются как описания внутри блоков, и в свою очередь состоят из вложенных блоков. Важность такой организации для управления средой ссылок уже подробно обсуждалась. Синтаксически блочная структура делает более ясной структуру программы. В отличие от Фортрана, где внутри отдельной программы не могут быть выделены, кроме инструкций, никакие подструктуры, структура Алгола допускает многоуровневую организацию внутри программы. [40]
Область существования метки, как и других объек тов программы, определяется по правилам, изложенным выше. Обычно нет необходимости в явном описании меток. Оно требуется только в том случае, если неявное описание приводит к ошибкам в программе, имеющей вложенные блоки. [41]
В каждом языке программирования существуют свои, правила определения областей активности и областей существования ассоциаций. Изменение среды ссылок ifpo - исходит при передаче управления подпрограмме, возврате управления из подпрограммы, при входе и выходе из блока. Понятие блока, блочной структуры получило широкое распространение и используется во многих языках: среди них Алгол-60, PL-1, Паскаль, Симула и др. В языках с блочной структурой программный модуль ( головная программа или подпрограмма) представляется набором вложенных блоков. [42]
Объявление связывает для определенных частей программы идентификаторы с атрибутами. Сама программа и определения любой процедуры называются блоками. Поскольку определения процедур также являются операторами, блоки могут вкладываться один в другой. Вложенный блок является подчиненным по отношению к содержащему его блоку. Включающим экстентом блока служит список операторов, образующих его тело, включая подчиненные блоки. Исключающим экстентом блока является список операторов, образующих его тело, без подчиненных блоков. Диапазон объявления в исключающем экстенте равен включающему экстенту данного блока. В исключающем экстенте блока идентификатор может иметь не больше одного объявления. [43]
В данной программе описываются две целые переменные x, z и функция-процедура func e одним целым аргументом у, вырабатывающая целое значение. Последняя в функции-процедуре не описывается и является для нее глобальной переменной. После описаний идут выполняемые операторы: присваивание целой переменной х значения, вызов функции-процедуры func и печать ее значения. Выполнение вложенного блока включает создание новой переменной и связывание ее с идентификатором х, присвоение переменной целого значения, вызов функции func и печать ее значения. [44]
При входе в первый блок-создаются данные - це лые переменные и вещественный массив. Выполняются операции именования данных: идентификаторы х, у ассоциируются с целыми переменными, идентификатор А ассоциируется с вещественным массивом. Эти ассоциации делаются активными. Затем последовательно выполняются операторы блока: операторы присваивания, первый вложенный блок, оператор печати, второй вложенный блок. [45]