Programowanie w języku Delphi

Typy danych

  • 2011-01-23 14:09
  • 1 komentarz
  • 8610 odsłon
  • Oceń ten tekst jako pierwszy
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ść.

1 komentarz

Wolverine 2005-12-22 19:58

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