|
Часть 4
Глава 2. Блоки, локальность и область действия
Блоки состоят из описаний, которые записаны и скомбинированы в любом порядке, и операторов. Каждый блок является частью описания процедуры или функции, или частью программы или модуля. Все идентификаторы и метки, объявленные в разделе описаний, являются
для блока локальными.
Синтаксис
В общем виде любой блок имеет следующий формат:
ЪДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДї
блок ДДДДДДі раздел описаний ГДДДДДДі раздел операторов ГДД
АДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДДЩ
раздел ДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВД
описания і ЪДДДДДДДДДДДДДДДДДДДДДї і
і ГДДіраздел описания метокГДДДДДДДДДДДДДДДґ і
і і АДДДДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДДДДДДДї і і
і ГДДіраздел описания константГДДДДДДДДДДДДґ і
і і АДДДДДДДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДДДДї і і
і ГДДіраздел описания типовГДДДДДДДДДДДДДДДґ і
і і АДДДДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДДДДДДДДДї і і
і ГДДіраздел описания переменныхГДДДДДДДДДДґ і
і і АДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і і
і АДДіраздел описания процедур и функцийГДДЩ і
і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Раздел описания меток - это та часть блока, где описываются метки, присваиваемые операторам в соответствующем разделе операторов. Каждая метка должна помечать только один оператор.
ХНННННё ЪДДДДДї ХНё
раздел описания меток ДДДіlabelГДДДДДіметкаГДДДВДДі;ГДДДДД
ФНННННѕ АДДДДДЩ і ФНѕ
і ХНё і
АДДДДДґ,ГДДДДДЩ
ФНѕ
Используемая в качестве метки последовательность цифр должна находиться в диапазоне от 0 до 9999.
Раздел описания констант содержит описания констант, локальных для этого блока.
ХНННННё ЪДДДДДДДДДДДДДДДДДДї
раздел описанияДДДіconstГДДДВДДіописание константыГДДДДДДДВД
констант ФНННННѕ і АДДДДДДДДДДДДДДДДДДЩ і
і і ЪДДДДДДДДДДДДДДДДДДДДДї і і
і АДДіописание типизованнойГДДЩ і
і іконстанты і і
і АДДДДДДДДДДДДДДДДДДДДДЩ і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Раздел описания типов включает в себя описания всех типов в блоке.
ХНННННё ЪДДДДДДДДДДДДДї
раздел описания типовДДДДіtype ГДДДДіописание типаГДДДВДД
ФНННННѕ АДДДДДДДДДДДДДЩ і
і і
АДДДДДДДДДДДДДДДДДДДДДЩ
Раздел описания переменных состоит из описаний переменных, локальных для этого блока.
ХНННё ЪДДДДДДДДДДДДДДДДДДДї
раздел описанияДДДіvarГДДДДіописание переменнойГДДДДДДВД
переменных ФНННѕ АДДДДДДДДДДДДДДДДДДДЩ і
і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Раздел описания процедур и функций состоит из описаний процедур и функций, локальных для этого блока.
ЪДДДДДДДДДДДДДДДДДДДДї
раздел описанияДДДДДВДВДДґ описание процедуры ГДДДДДДДДДДДДДДДД
процедур и функций і і АДДДДДДДДДДДДДДДДДДДДЩ
і і ЪДДДДДДДДДДДДДДДДДДДДї і і
і ГДі описание функции ГДДДДДДДґ і
і і АДДДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДДДДДДДї і і
і ГДі описание конструктора ГДДДґ і
і і АДДДДДДДДДДДДДДДДДДДДДДДДЩ і і
і і ЪДДДДДДДДДДДДДДДДДДДДДДДї і і
і АДі описание деструктора ГДДДДЩ і
і АДДДДДДДДДДДДДДДДДДДДДДДЩ і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Раздел операторов определяет операторы или алгоритмические действия, которые должны быть выполнены блоком.
ЪДДДДДДДДДДДДДДДДДДДДї
раздел операторовДДДДДДДі составной оператор ГДДДДДДДДДД
АДДДДДДДДДДДДДДДДДДДДЩ
Правила для области действия
Наличие идентификатора или метки в описании означает определение идентификатора или метки. Каждый раз, когда идентификатор или метка встречаются в программе, они должны находиться в области действия этого описания. Область действия идентификатора ил
и метки распространяется от их описания до конца текущего блока, включая все блоки, входящие в текущий блок. Ниже приводится несколько исключений.
- Переопределение во вложенном блоке. Допустим, что Exterior является блоком, в который вложен другой блок Interior. Если Exterior и Interior содержат идентификаторы с одинаковым именем, например, j, то Interior имеет доступ только к идентификатору
j, который в нем описан, и аналогично Exterior имеет доступ только к идентификатору j, описание которого он содержит.
- Положение описания внутри блока. Идентификаторы и метки нельзя использовать до тех пор, пока они не описаны. Описание идентификатора или метки должно предшествовать любому вхождению идентификатора или метки в тексте программы, с одним исключением.
Базовый тип типа указатель может быть идентификатором, который еще не описан. Однако, в конечном итоге этот идентификатор должен быть описан в том же разделе описания, где встречается данный тип указатель.
- Переопределение внутри блока. Идентификатор или метка могут быть описаны только один раз на внешнем уровне данного блока. Единственным исключением является случай, когда описание указывается внутри блока, входящего в данный, или когда описание ука
зывается в списке полей записи.
Идентификатор поля записи описывается в рамках типа запись и имеет значение только в сочетании со ссылкой на переменную этого типа запись. Поэтому вы можете повторно определить идентификатор поля (с таким же написанием) в том же самом блоке, но не н
а том же самом уровне в рамках указанного типа запись. Однако, идентификатор, который был ранее описан, может быть повторно определен как идентификатор поля в том же самом блоке.
Область действия компонентов объекта распространяется на область данного типа объекта (см. далее).
Область действия интерфейса и стандартных идентификаторов
Программы и модули, содержащие операторы uses (операторы использования) имеют доступ к идентификаторам, которые описаны в интерфейсной части модулей, указанных в этих операторах uses.
Каждый модуль в операторе uses определяет свою область действия, которая охватывает остальные модули и программу в целом. Первый модуль в операторе uses представляет самую внешнюю область действия, а последний модуль представляет самую внутреннюю об
ласть действия. Это означает, что если два или более модулей содержат описание одного и того же идентификатора, то при неуточненном обращении к этому идентификатору будет выбран тот вариант, который был описан в последнем модуле в операторе uses. Однако,
вы можете выбрать любой вариант этого идентификатора, указав уточненный идентификатор.
Идентификаторы встроенных констант, типов, переменных, процедур и функций Турбо Паскаля действуют так, как если бы они были описаны в блоке, охватывающем все используемые модули и программу в целом. В действительности эти стандартные объекты описаны
в модуле System, который используется любой программой или модулем прежде любого модуля, указанного в операторе uses. Это означает, что любой модуль или программа могут переопределить стандартные идентификаторы, а обращение к ним может быть выполнено с
помощью уточненного (составного) идентификатора, например, System.Integer или System.Writeln.
|