Difference between revisions of "Basic Pascal Tutorial/Chapter 4/Scope/bg"

From Lazarus wiki
Jump to navigationJump to search
m (Kai Burghardt moved page Scope/bg to Basic Pascal Tutorial/Chapter 4/Scope/bg: tidy up main name space: create subpage hierarchy for basic Pascal tutorial [cf. [[Special: PermaLink/149778#Cluttering o...)
m (bypass language bar/categorization template redirect [cf. discussion])
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
{{Scope}}
+
{{Basic Pascal Tutorial/Chapter 4/Scope}}
{{TYNavigator|Functions|Recursion}}
+
{{TYNavigator|Chapter 4/Functions|Chapter 4/Recursion}}
  
 
4D - Scope (author: Tao Yue, state: unchanged)
 
4D - Scope (author: Tao Yue, state: unchanged)
Line 47: Line 47:
 
* Функция <tt> Beta2 </tt> може да извика всяка подпрограма, включително себе си (основната програма не е подпрограма).  
 
* Функция <tt> Beta2 </tt> може да извика всяка подпрограма, включително себе си (основната програма не е подпрограма).  
  
{{TYNavigator|Functions|Recursion}}
+
{{TYNavigator|Chapter 4/Functions|Chapter 4/Recursion}}

Latest revision as of 15:20, 20 August 2022

български (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 може да извика всяка подпрограма, включително себе си (основната програма не е подпрограма).
 ◄   ▲   ►