Typy danych
Adam Boduch
Typy zmiennych określają rodzaj danych, które będą zapisywane w pamięci. Weźmy np. typ String. Ten typ danych służy do przechowywania tekstu i tylko tekstu! Tak więc, chcąc w pamięci komputera umieścić np. liczbę, należy skorzystać z innego typu zmiennej. W przeciwnym przypadku kompilator wyświetli informację o błędzie podczas próby uruchomienia: [Error] Project1.dpr(11): Incompatible types: 'Integer' and 'string'.
Niektóre z tych typów służą do przechowywania tekstu, natomiast inne do przechowywania liczb. Różni je zakres stosowania. Przykładowo, chcąc zapisać w pamięci jakąś dużą liczbę, nie można skorzystać z typu Byte, ponieważ do tego typu mogą być przypisywane jedynie wartości z zakresu od 0 do 255. Można za to skorzystać z typu Int64.
Oprócz zakresu stosowania powyższe typy danych różni także ilość zajmowanej pamięci operacyjnej. Przykładowo, typ Byte zabiera jedynie 1 bajt pamięci, a typ Int64 ? 8 bajtów. Można by pomyśleć, że to nieduża różnica, ale jeśli zmiennych 8-bajtowych w aplikacji jest kilkadziesiąt (kilkaset)? Jest to zwykłe marnowanie pamięci!
Uwaga dla programistów mających wcześniej kontakt z Delphi: typ Real48 nie jest akceptowany przez platformę .NET, tak więc nie jest możliwe jego używanie w aplikacjach.
Podczas przeglądania różnych kodów źródłowych można zauważyć, że dla typów liczbowych programiści często stosują zmienną Integer. Jest to uniwersalny typ zmiennej liczbowej, gdyż jej zakres jest w miarę duży, a nie wykorzystuje ona aż tak wiele pamięci.
Własne typy danych
Delphi umożliwia deklarowanie własnych typów danych, które następnie można wykorzystywać w programie. Własny typ danych można zadeklarować za pośrednictwem słowa kluczowego Type. Przykładowa deklaracja własnego typu mogłaby wyglądać następująco:
type
TMediumValue = 0..20;
W świecie programistów Delphi przyjęło się już, że każdy nowy typ danych jest poprzedzony dużą literą T.
Od tej pory możemy w swoim programie używać własnego typu danych ? TMediumValue. Ten typ może przybierać wartości liczbowe od 0 do 20.
Wykorzystanie takiego typu danych (powołanie zmiennej) jest proste:
var
MediumValue : TMediumValue;
Można już korzystać z naszej zmiennej, tak jak z każdej innej:
begin
MediumValue := 10;
end.
Możliwe jest także zadeklarowanie swojego własnego typu wyglądającego na przykład tak:
TSamochody = (tsFiat, tsMercedes, tsOpel);
Po utworzeniu zmiennej wskazującej na ten typ będzie mogła ona zawierać jedną z podanych w nawiasie wartości.
Tablice jako nowy typ
Możliwe jest przekazywanie całych tablic jako parametrów do funkcji lub procedury. Jednak w przypadku funkcji nie da się tego uczynić bezpośrednio ? należy w tym celu utworzyć nowy typ danych, np. taki:
type
TMyArray = array[0..20] of String;
Dopiero teraz można przekazać go jako parametr, tak jak przedstawiono to w poniższym przykładzie:
program OwnType;
{$APPTYPE CONSOLE}
type
TMyType = array of String;
function ArrayFunc : TMyType;
begin
SetLength(Result, 2);
Result[0] := 'Delphi';
Result[1] := '2005';
end;
var
A : TMyType;
begin
SetLength(A, 2);
A := ArrayFunc;
Writeln(A[0]);
Writeln(A[1]);
Readln;
end.
W programie został zadeklarowany nowy typ danych ? TMyType, który jest w rzeczywistości tablicą. Typ ten został użyty w funkcji ArrayFunc
jako wartość zwracana przez funkcję. Jedyne co trzeba teraz zrobić, to zainicjować tablicę oraz przydzielić do niej elementy. W bloku Begin..End należy z funkcji odebrać owe elementy ? także poprzez inicjalizację tablicy typu TMyType.
Teraz można skompilować program i sprawdzić jego działanie ? powinien działać bez problemu.
Uważaj na inicjalizację liczby elementów tablicy za pomocą instrukcji SetLength. Nieprawidłowe podanie liczby elementów w drugim parametrze może spowodować błąd związany z pamięcią, co w konsekwencji uniemożliwi dalsze wykonywanie programu.
Aliasy typów
Aliasy służą do tworzenia nowego typu, który w rzeczywistości wskazuje na inny typ i jest mu równoważny:
Type
TMojTyp = Integer;
Od tego momentu TMojTyp będzie równoważny typowi Integer. Z aliasów można korzystać, jeśli projektant chce zwiększyć czytelność kodu swojego programu. Ogólnie rzecz biorąc, nie jest to często wykorzystywana możliwość.
"Ten typ danych służy do przechowywania tekstu i tylko tekstu!"
Prawidlowe choc troche to mylace, string to tablica charow, idac dalej, jest to po prostu tablica, a tablica to obszar pamieci, a tu mozemy umiescic co chcemy.
Poki jest to kod interpretowany przez procesor to mozemy wszystko (np odpowiednio kombinujac zapisac rekord w strongu), inaczej juz sprawa wyglada z vm'ami, java, net itp.