Programowanie w języku Delphi

Zmienne

Zmienne definiujemy jako obszar w pamięci komputera, który służy do przechowywania danych tymczasowych (obecnych w pamięci do czasu wyłączenia programu), mających postać liczb, tekstu itp.

Czym byłby program, który nie mógłby zapisywać danych do pamięci komputera? Nie ma praktycznie aplikacji, która mogłaby obejść się bez zastosowania zmiennych ? są one podstawowym elementem każdego programu.

Przypisywanie wartości do zmiennych w językach wysokiego poziomu odbywa się w bardzo prosty sposób ? w rzeczywistości jest to dość złożony proces, ale my nie musimy się tym przejmować. Wszystko odbywa się w warstwie systemowej, na poziomie systemu operacyjnego.

Deklaracja zmiennych

Przed przydzieleniem danych do pamięci zmienną należy zadeklarować w kodzie programu. Deklaracja zmiennej powinna być umieszczona przed blokiem begin. Przykładowa deklaracja może wyglądać następująco:

program P3_4;
 
var
  Zmienna : String;
 
begin
 
end.

W razie potrzeby zadeklarowania zmiennej jest konieczne zastosowanie słowa kluczowego var (skrót od słowa variable ? zmienna). Stanowi to informację dla kompilatora, że po tym słowie kluczowym zostanie umieszczona deklaracja zmiennych.

Zmienna zawsze musi mieć nazwę! Dzięki tej nazwie możemy łatwo odwołać się do poszczególnych danych zapisanych w pamięci. Pierwszym członem deklaracji zmiennej musi być unikalna nazwa (nie mogą istnieć dwie zmienne o takiej samej nazwie w programie 1). Po znaku dwukropka należy wpisać typ zmiennej.

Z punktu widzenia kompilatora nie ma znaczenia, w jaki sposób zapiszemy (zadeklarujemy) zmienną ? może więc odbyć się to tak:

var
  zmienna: Integer;

lub tak:

var zmienna: Integer;

Dla zachowania przejrzystości kodu zaleca się jednak stosowanie deklaracji w formie przedstawionej w pierwszym przykładzie.

Trzeba zwrócić uwagę, że w odróżnieniu od języka C++ w Delphi najpierw jest podawana nazwa zmiennej, a dopiero później typ. Równoważna deklaracja w języku C++ miałaby postać następującą: int zmienna;

Typy danych


Typy danych opisane zostały w osobnym artykule.

Deklaracja kilku zmiennych


Po wpisaniu słowa kluczowego var można zadeklarować tyle zmiennych, ile będzie potrzebnych ? nie trzeba za każdym razem używać dyrektywy var.

program varApp;
 
var
  Zmienna1 : String;
  Zmienna2 : String;
  Zmienna3 : String;
 
begin
 
end.

W powyższym przypadku zadeklarowałem trzy zmienne typu String. Od tej pory dla kompilatora słowa Zmienna1, Zmienna2, Zmienna3 nie są już konstrukcjami nieznanymi ? wiadome będzie, że w tym przypadku chodzi o zmienne.

Podczas deklaracji kilku zmiennych tego samego typu można wpisać wszystkie zmienne razem, oddzielając ich nazwy przecinkami:

program varApp;
 
var
  Zmienna1, Zmienna2, Zmienna3 : String;
 
begin
 
end.

Z punktu widzenia kompilatora w tym przypadku również następuje deklaracja trzech zmiennych typu String. Chcąc jeszcze zadeklarować zmienne innego typu, należy to zrobić w następujący sposób:

program varApp;
 
var
  Zmienna1, Zmienna2, Zmienna3 : String;
  Liczba1, Liczba2 : Integer;
 
begin
 
end.

Przydział danych


Po uruchomieniu programu system rezerwuje taką ilość pamięci, jaka będzie potrzebna do działania owej aplikacji. Od tej pory program może przypisywać dane dowolnej zmiennej.

Przydzielanie danych do zmiennej musi odbywać się w bloku begin 2. Istnieje jednak możliwość przydzielenia danych w trakcie pisania programu.

Przydział statyczny


W celu określenia wartości konkretnej zmiennej, należy to zrobić podczas jej deklarowania, używając w tym celu znaku równości (=).

program varApp;
 
var
  Zmienna1 : String = 'Oto zmienna nr 1';
 
begin
 
end.

Taki kod spowoduje, że na samym starcie programu zmienna Zmienna1 będzie miała wartość Oto zmienna nr 1. Każdy tekst zadeklarowany w ramach zmiennej musi być ujęty w znaki apostrofów.
Podczas pisania programu nie można przydzielać wartości kilku zmiennym naraz:

program varApp;
 
var
  Zmienna1, Zmienna2 : String = 'Oto zmienna nr 1';
 
begin
 
end.

Próba uruchomienia takiego programu spowoduje wyświetlenie komunikatu o błędzie: [Error] varApp.dpr(4): Cannot initialize multiple variables.

program varApp;
 
var
  Zmienna1 : String = 'Oto zmienna nr 1';
  Zmienna2 : String = 'Oto zmienna nr 2';
 
begin
 
end.

Natomiast kod przedstawiony powyżej jest już całkiem prawidłowy.

Przydział wartości do zmiennej podczas pisania kodu często jest nazywany przydziałem domyślnym.

W przypadku próby uruchomienia programu, w którym kompilator znajdzie zmienną bez przypisanej żadnej wartości, zostanie wyświetlone ostrzeżenie: [Hint] varApp.dpr(4): Variable 'Zmienna1' is declared but never used in 'varApp'.


Przydział dynamiczny


Możliwa jest także zmiana zawartości danej zmiennej podczas pracy programu. Jest to czynność stosunkowo prosta ? polega na zastosowaniu znaku :=, tzw. operatora przydziału. Oto przykład:

program varApp;

var
  Zmienna1 : String;
  Zmienna2 : String;
 
begin
  Zmienna1 := 'Oto jest zmienna nr 1';
  Zmienna2 := 'Oto jest zmienna nr 2';
end.

Oczywiście ponowna zmiana wartości już raz zadeklarowanej zmiennej jest najzupełniej możliwa.

Czasami zajdzie potrzeba umieszczenia w zmiennej (w ciągu znakowym ? typ String) pojedynczego znaku apostrofu. W takim wypadku należy zastosować konwencję podwójnego apostrofu, np.:

Zmienna := 'My Mother''s bag';

Deklaracja zakresu danych


Wiadomo już, że deklarując zmienną typu Byte, można do niej przypisać wartość z przedziału od 0 do 255. Istnieje jednak możliwość samodzielnego określenia zakresu zmiennej:

var
   VarA : 0..20;

Taki zapis sprawia, że do zmiennej VarA będzie można przypisać liczbę od 0 do 20. Próba przypisania liczby spoza tego zakresu (np. 21) skończy się komunikatem o błędzie: [Error] Project1.dpr(11): Constant expression violates subrange bounds.

Niekoniecznie należy deklarować zakres zaczynający się od zera ? równie dobrze może to wyglądać w ten sposób:

var
   VarA : 10..20;

W takim przypadku jedynymi wartościami, jakie mogą zostać przypisane do zmiennej, są liczby z zakresu od 10 do 20.

Restrykcje w nazewnictwie


Nie jest do końca prawdą, że nazwa zmiennej może być zupełnie dowolna. Niestety, istnieją pewne restrykcje, o których trzeba wiedzieć. Na przykład pierwszym znakiem nazwy zmiennej nie może być cyfra ? musi rozpoczynać się od litery.

Nazwa zmiennej może jednak zawierać na początku znak _, ale już inne znaki, takie jak ( ) * & ^ % # @ ! / = + - [ } ] } ' " ; , . czy ?, są zabronione.

W praktyce jednak nie zachodzi potrzeba używania w zmiennej np. znaku ), więc nie ma się czym przejmować.

Nowością w Delphi 2005 jest możliwość używania polskich znaków w nazwach zmiennych, czy ogólnie ? w całym kodzie źródłowym. Wszystko dzięki temu, iż kompilator oraz edytor kodu obsługują kodowanie znaków w standardzie Unikod. Jest to standard kodowania, mający w zamierzeniu obejmować wszystkie rodzaje pisma używane na świecie. Nie ma więc przeciwwskazań, aby nazwa zmiennej była zapisana np. cyrylicą.

Trzeba też pamiętać, że poprzednie wersje Delphi traktowały polskie znaki w nazwie zmiennej jako błąd. Decydując się na używanie polskich znaków w kodzie źródłowym, trzeba mieć na uwadze fakt, że takie programy nie zostaną skompilowane we wcześniejszych wersjach Delphi.
Zobacz także:


[1] Chodzi o Zmienne globalne. Zmienne o takiej samej nazwie mogą istnieć w ramach procedur, funkcji czy metod.
[2] Wyjątkiem są moduły w których można przypisywać dane w sekcji Initialization.

10 komentarzy

9mateuszp 2010-02-23 19:53

Piszesz IntToStr(jakaś znmienna)
Np. Edit1.Text:=IntToStr(a);
a odwrotnie text na liczbę
StrToInt  
i to cała filozofia.
Nie wiem tylko jak to zrobić z liczbą rzeczywistą. Jakby ktoś mogł powiedzieć.

milosz28 2010-05-05 09:12

FloatToStr(zmienna) oraz StrToFloat(zmienna) - zamiana rzeczywistej na tekst i na odwrót

bahus 2009-02-27 18:56

Witam wszystkich... a ja mam pytanie... jak przekonwertować zmienną np. integer na string... chodzi o to że chciałbym wartość zmiennej wyświetlić w formie tekstu na ekranie...

Wolverine 2007-04-15 14:46

Nie, po uruchomieniu programu nie ma czegos takiego jak nazwa zmiennej, program odkad zostanie zrealokowany (zaladowany i uruchomiony przez system) posluguje sie jedynie adresami (a te sa zwyklymi liczbami).

Format 2006-11-03 18:48

hmm... ciekawe czy można przekonwertować nazwę zmiennej do stringa podczas działania programu ?

Wolverine 2006-09-14 13:41

"Wszystko odbywa się w warstwie systemowej, na poziomie systemu operacyjnego.", niee, na poziomie CPU, to sa zwykle mov'y :)

czis 2006-07-15 20:59

Bardzo ciekawy materiał dotyczący zmiennych.

Adam Boduch 2006-04-28 18:13

Polecam tekst: Typy danych

Zmienna moze miec dowolna nazwe, zapewne chodzi ci o wbudowane typy zmiennych ;)
Przeczytaj ten tekst, poszukaj o typach zmiennoprzecinkowych.

Tommalla 2006-04-28 16:36

spoko.... ALE DO JASNEJ CIASNEJ, JAK SIE ZWIE ZMIENNA PRZECHOWUJACA ULAMKI!!?? :/

Misiekd 2006-01-06 15:50

"obecnych w pamięci do czasu wyłączenia programu" taki mały hint tak zachowują się w delphi tylko zmienne globalne, zmienne lokalne "żyją" tylko przez okres wykonywania procedury/funkcji w której zostały zadeklarowane.