|
|||||||||||||||||||
|
ГЛАВА 2. БЛОКИ, ЛОКАЛИЗАЦИЯ И СФЕРА ДЕЙСТВИЯ  Блоки состоят из объявлений, которые записаны и скомбинированы в любом порядке, и операторов. Каждый блок является частью объявления процедуры или функции, или частью программы или модуля. Все идентификаторы и метки, объявленные в разделе объявлений, являются локальными для блока.
Синтаксис
В общем виде любой блок имеет следующий формат:
┌──────────┐ ┌──────────┐ блок ────Ў│ раздел ├────Ў│ раздел ├────Ў │объявления│ │операторов│ └──────────┘ └───────── $72;┘
раздел ──────────┬────────────────────────────────────┬───Ў объявления ° │ ° │ │ │ ┌──────────────────┐ │ │ │ ├───Ў│раздел объявления ├──────┤ │ │ │ │ меток │ │ │ │ │ └──────────────────┘ │ │ │ │ ┌──────────────────┐ │ │ │ ├───Ў│раздел объявления ├──────┤ │ │ │ │ констант │ │ │ │ │ └──────────────────┘ │ │ │ │ ┌──────────────────┐ │ │ │ ├───Ў│раздел объявления ├──────┤ │ │ │ │ типов │ │ │ │ │ └──────────────────┘ │ │ │ │ ┌──────────────────┐ │ │ │ ├───Ў│раздел объявления ├──────┤ │ │ │ │ переменных │ │ │ │ │ └──────────────────┘ │ │ │ │ ┌──────────────────┐ │ │ │ └───Ў│раздел объявления ├──────┘ │ │ │процедур и функций│ │ │ └──────────────────┘ │ └──────────────────────────────────────────┘   Раздел объявления меток - это та часть блока, где объявляются метки, присваеваемые оператором в соответствующем разделе операторов. Каждая метка должна помечать только один оператор. раздел ┌───────┐ ┌───────┐ ┌───┐ объявления ─────Ў│ label ├──────Ў│ метка ├──┬──Ў│ ; ├───Ў меток └───────┘ ° └───────┘ │ └───┘ │ ┌───┐ │ └───│ , │──────┘ └───┘   Используемая в качестве метки последовательность цифр должна находиться в диапазоне от 0 до 9999. Раздел объявления констант содержит объявления констант, локальных для этого блока. раздел ┌───────┐ ┌────────────┐ объявления ───Ў│ const ├────┬─Ў│ объявление ├───────────┬───Ў констант └───────┘ ° │ │ константы │ ° │ │ │ └────────────┘ │ │ │ │ ┌───────────────────┐ │ │ │ │ │объявленине типиро-│ │ │ │ └─Ў│ ванной константы ├─┘ │ │ └───────────────────┘ │ └──────────────────────────────┘   Раздел объявления типов включает объявления всех типов в блоке. раздел ┌───────┐ ┌────────────┐ объявления ───Ў│ type ├──────Ў│ объявление ├────┬───Ў типов └───────┘ ° │ типа │ │ │ └────────────┘ │ └──────────────────────┘   Раздел объявления переменных состоит из объявления переменных, локальных для этого блока. раздел ┌─────┐ ┌────────────┐ объявления ───Ў│ var ├──────Ў│ объявление ├────┬───Ў переменных └─────┘ ° │ переменной │ │ │ └────────────┘ │ └──────────────────────┘   Раздел объявления процедур и функций состоит из объявления процедур и функций, локальных для этого блока. раздел ┌────────────┐ объявления ─────────┬─Ў│ объявление ├─────┬────Ў процедур и ° │ │ процедуры │ ° │ функций │ │ └────────────┘ │ │ │ │ ┌────────────┐ │ │ │ └─Ў│ объявление ├──┘ │ │ │ функции │ │ │ └────────────┘ │ │ ┌────────────┐ │ ├────Ў│ объявление ├─────┤ │ │констрактора│ │ │ └────────────┘ │ │ ┌────────────┐ │ ├────Ў│ объявление ├─────┤ │ │дестрактора │ │ │ └────────────┘ │ └────────────────────────┘   Раздел операторов определяет операторы или алгоритмические действия, которые выполняются в блоке. раздел ┌───────────┐ операторов ─────Ў│ составной ├─────Ў │ оператор │ └───────────┘
Правила для сферы действияНаличие идентификатора или метки в объявлении означает определение идентификатора или метки. Каждый раз, когда идентификатор или метка встречаются в программе, они должны находиться в области действия этого объявления. Сфера действия идентификатора или метки распространяется от их объявления до конца текущего блока, включая все блоки, входящие в текущий блок ниже приводится несколько исключений:   - Переобъявление во вложенном блоке: допустим, что Exterior является блоком, в котором вложен другой блок Interior. Если Exterior и Interior имеют идентификаторы с одинаковым именем,  например, J, то Interior имеет доступ только к идентификатору  J, который в нем объявлен, и аналогично Exterior имеет доступ только к идентификатору J, объявление которого он содержит.   - Положение объявления внутри блока: идентификаторы и метки нельзя использовать до тех пор, пока они не объявлены. Объявление идентификатора или метки должно предшествовать любому вхождению идентификатора или метки в тексте программы с одним исключением. Базовый тип указателя может быть идентификатором, который еще не объявлен. Однако в конечном итоге этот идентификатор должен быть объявлен в том же разделе объявления, где встречается этот тип указателя. - Переобъявление внутри блока: идентификатор или метка могут быть объявлены только один раз на внешнем уровне данного блока. Единственным исключением является случай, когда объявление указывается в списке полей записи.   Идентификатор поля записи объявляется внутри типа записи и имеет смысл только в сочетании со ссылкой на переменную этого типа записи. Поэтому вы можете повторно объявить идентификатор поля (с таким же написанием) в том же самом блоке, но не на том же самом уровне в указанном типе записи. Однако идентификатор, который был ранее объявлен, может быть повторно определен как идентификатор поля в том же самом блоке.   Сфера действия идентификатора компоненты объекта расширяется на этот тип объекта. См. Главу 3 для дальнейшего объяснения.
Сфера действия интерфейса и стандартных идентификаторов.  Программы и модули, содержащие предложения uses, имеют доступ к идентификаторам, объявленным в разделах интерфейса модулей, указанных в этих предложениях uses.  Каждый модуль в предложении uses определяет свою область действия, которая охватывает остальные используемые модули и программу в целом. Первый модуль в предложении uses представляет самую внешнюю область действия, а последний модуль - самую внутреннюю. Это означает, что если два или более модулей содержат объявление одного и того же идентификатора, то при неуточненном обращении к этому идентификатору будет выбран тот вариант, который был описан в последнем модуле в предложении uses. Однако, вы можете выбрать любой экземпляр этого идентификатора, указав уточненный идентификатор. Идентификаторы предопределенных констант, типов, переменных, процедур и функций Turbo Pascal действуют, как если бы они были объявлены в блоке, охватывающем все используемые модули и программу в целом. В действительности эти стандартные обьекты определены в модуле System, который используется любой программой или модулем прежде любого модуля, указанного в предложении uses. Это означает, что любой модуль или программа могут переопределить стандартные идентификаторы, а обращение к ним может быть выполнено с помощью составного идентификатора, например, System.Integer или System.Writeln. |
|
Web дизайн: Бурлаков Михаил
Web программирование: Бурлаков Михаил