Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 4/Scope/bg: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
114D - Scope (author: Tao Yue, state: unchanged)
22
33*Обхва* се отнася за мястото, където са видими определени променливи. Имате процедури вътре в процедурите, променливи вътре в процедурите и вашата работа е да се опитате да разберете кога всяка една променлива може да се види от процедурата.
44
55Глобалната променлива е променлива, дефинирана в основната програма. Всяка подпрограма може да ги вижда, използва и модифицира. Всички подпрограми могат да се извикат и могат да извикат всички други подпрограми, определени преди тях.
66
77Основната точка е: в рамките на всеки блок от код (процедура, функция), единствените идентификатори, които се виждат, са дефинираните преди този блок и са намират вътре или извън този блок.
88
99``` pascal
1010program ScopeDemo;
1111var A : integer;
1212
1313 procedure ScopeInner;
1414 var A : integer;
1515 begin
1616 A := 10;
1717 writeln (A)
1818 end;
1919
2020begin (* Main *)
2121 A := 20;
2222 writeln (A);
2323 ScopeInner;
2424 writeln (A);
2525end. (* Main *)
2626```
2727
2828Резултатът от горната програма е:
2929
30-`20`\
31-`10`\
32-`20`
30+```
31+20
32+10
33+20
34+```
3335
3436Причината е, че ако две променливи с еднакви идентификатори са декларирани едновременно в подпрограма и в основната програма, основната програма вижда своята а подпрограмата вижда нейната (не основната). Когато един идентификатор е дефиниран два пъти на различни места се използва локалната дефиниция.
3537
3638Ето една диаграма на обхвата, която в основата си представлява подредено копие на програма само с променливите и без логиката. Като премахнете логиката на приложението и заградите блокове в рамки, понякога е по-лесно да видите къде са налични зададените променливи. ![centre](/wiki-images/4/47/Scope.gif)
3739
3840- Всеки може да види глобални променливи `A, B` и `C`.
3941- Въпреки това, в процедура `Alpha` глобалната дефиниция на `A` се заменя с локалната дефиниция.
4042- `Beta1` и `Beta2` могат да виждат променливи `VCR, Betamax` и `cassette`.
4143- `Beta1` не може да види променлива `FailureToo` и `Beta2` не може да види `Failure`.
4244- Никоя подпрограма освен `Alpha` няма достъп до `F` и `G`.
4345- Процедурата `Beta` може да извика `Alpha` и `Beta`.
4446- Функция `Beta2` може да извика всяка подпрограма, включително себе си (основната програма не е подпрограма).
4547
4648---
4749*From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 4/Scope/bg", as it stood on 2022-08-20 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history