Inicjacja typu boolean

0

Witam, proszę o wyjaśnienie wartości inicjalizacji podczas deklaracji typu boolean.

Mam taki kod w którym mamy wartość True

var TestBool:Boolean;

if TestBool then
 begin
  ShowMessage('TestBool Inicjalizacja True'); //<<<<<<<<<<<<
 end else
 begin
  ShowMessage('TestBool Inicjalizacja False');
 end; 

i tutaj kod w którym mamy wartość False

var TestBool:Boolean;

if TestBool=True then
 begin
  ShowMessage('TestBool Inicjalizacja True'); 
 end else
 begin
  ShowMessage('TestBool Inicjalizacja False'); //<<<<<<<<<<< 
 end; 

Jaką wartość otrzymuje zmienna typu boolean podczas deklaracji i czy taką samą globalnie jak i lokalnie ?

1

Jako zmienna globalna, otrzyma false.

Jako zmienna lokalna, nie otrzyma żadnej wartości (zmienne lokalne muszą być inicjowane explicit), zatem Twój kod w wersji ze zmienną lokalną jest błędny i będzie zwracał "losowe" rezultaty.

Btw, podczas deklaracji zmienna nie otrzymuje żadnej wartości - jej wartość ustalana jest dopiero podczas definicji (albo i nie - patrz: zmienne lokalne).

0

Wszystko jest w dokumentacji:

Variables:

If you do not explicitly initialize a global variable, the compiler initializes it to 0. Object instance data (fields) are also initialized to 0. On the Wiin32 platform, the contents of a local variable are undefined until a value is assigned to them.

Globale są zerowane, lokale nie (zawierają śmieci).

0

... a jak jest z taką zmienną definiowaną w strukturze, czy zależy to analogicznie od tego gdzie dany typ struktury będzie definiowany tzn lokalnie czy globalnie ?

0

Tak jak w dokumentacji – globalna struktura zostanie wyzerowana, lokalna nie.

0

dobrą praktyką jest inicjowanie każdej zmiennej przed pierwszym odwołaniem się do jej wartości

0

Dobrą praktyką jest znajomość dokumentacji i działania kompilatora.

Przy czym składnia Delphi jest nieco przewrotna w tym miejscu. Zmienne, których inicjalizacja jest wymagana (czyli lokalne) nie mogą być inicjalizowane w miejscu deklaracji, a te których inicjalizować nie trzeba (zmienne globalne) można inicjalizować podczas deklaracji. Szkoda, bo inicjalizowanie lokali przy deklaracji nieco skraca kod.

We Free Pascalu można inicjalizować i jedne, i drugie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1