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 ArrayFuncjako 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ść.

1 komentarz

"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.

var
    c: char;
    s: string;
begin
    c = char(5);
    s := 'abc';
    s[1] := char(5);

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.