Basic Pascal Tutorial/Chapter 4/Scope/bg

From Lazarus wiki
(Redirected from Scope/bg)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

български (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

Причината е, че ако две променливи с еднакви идентификатори са декларирани едновременно в подпрограма и в основната програма, основната програма вижда своята а подпрограмата вижда нейната (не основната). Когато един идентификатор е дефиниран два пъти на различни места се използва локалната дефиниция.

Ето една диаграма на обхвата, която в основата си представлява подредено копие на програма само с променливите и без логиката. Като премахнете логиката на приложението и заградите блокове в рамки, понякога е по-лесно да видите къде са налични зададените променливи.

Scope.gif
  • Всеки може да види глобални променливи A, B и C .
  • Въпреки това, в процедура Alpha глобалната дефиниция на A се заменя с локалната дефиниция.
  • Beta1 и Beta2 могат да виждат променливи VCR, Betamax и cassette .
  • Beta1 не може да види променлива FailureToo и Beta2 не може да види Failure .
  • Никоя подпрограма освен Alpha няма достъп до F и G .
  • Процедурата Beta може да извика Alpha и Beta .
  • Функция Beta2 може да извика всяка подпрограма, включително себе си (основната програма не е подпрограма).
 ◄   ▲   ►