Typy danych
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.
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:
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:
Można już korzystać z naszej zmiennej, tak jak z każdej innej:
Możliwe jest także zadeklarowanie swojego własnego typu wyglądającego na przykład tak:
Po utworzeniu zmiennej wskazującej na ten typ będzie mogła ona zawierać jedną z podanych w nawiasie wartości.
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:
Dopiero teraz można przekazać go jako parametr, tak jak przedstawiono to w poniższym przykładzie:
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 zainicjalizować 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 służą do tworzenia nowego typu, który w rzeczywistości wskazuje na inny typ i jest mu równoważny:
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ść.
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:
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;
MediumValue : TMediumValue;
Można już korzystać z naszej zmiennej, tak jak z każdej innej:
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:
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.
{$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 zainicjalizować 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:
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ść.



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