Basic Pascal Tutorial/Chapter 4/Scope/bg
│
български (bg) │
English (en) │
français (fr) │
日本語 (ja) │
中文(中国大陆) (zh_CN) │
4D - Scope (author: Tao Yue, state: unchanged)
Обхва се отнася за мястото, където са видими определени променливи. Имате процедури вътре в процедурите, променливи вътре в процедурите и вашата работа е да се опитате да разберете кога всяка една променлива може да се види от процедурата.
Глобалната променлива е променлива, дефинирана в основната програма. Всяка подпрограма може да ги вижда, използва и модифицира. Всички подпрограми могат да се извикат и могат да извикат всички други подпрограми, определени преди тях.
Основната точка е: в рамките на всеки блок от код (процедура, функция), единствените идентификатори, които се виждат, са дефинираните преди този блок и са намират вътре или извън този блок.
program ScopeDemo;
var A : integer;
procedure ScopeInner;
var A : integer;
begin
A := 10;
writeln (A)
end;
begin (* Main *)
A := 20;
writeln (A);
ScopeInner;
writeln (A);
end. (* Main *)
Резултатът от горната програма е:
20 10 20
Причината е, че ако две променливи с еднакви идентификатори са декларирани едновременно в подпрограма и в основната програма, основната програма вижда своята а подпрограмата вижда нейната (не основната). Когато един идентификатор е дефиниран два пъти на различни места се използва локалната дефиниция.
Ето една диаграма на обхвата, която в основата си представлява подредено копие на програма само с променливите и без логиката. Като премахнете логиката на приложението и заградите блокове в рамки, понякога е по-лесно да видите къде са налични зададените променливи.
- Всеки може да види глобални променливи A, B и C .
- Въпреки това, в процедура Alpha глобалната дефиниция на A се заменя с локалната дефиниция.
- Beta1 и Beta2 могат да виждат променливи VCR, Betamax и cassette .
- Beta1 не може да види променлива FailureToo и Beta2 не може да види Failure .
- Никоя подпрограма освен Alpha няма достъп до F и G .
- Процедурата Beta може да извика Alpha и Beta .
- Функция Beta2 може да извика всяка подпрограма, включително себе си (основната програма не е подпрограма).