3. MQL4 dla początkujących. Część III.

3.2. Typy zmiennych: typy liczb całkowitych

W każdym języku programowania każda zmienna powinna mieć określony typ. W rozdziale 1.3. Zmienne lekcji "1. MQL4 dla początkujących. Część I" opisano niektóre typy stosowane w MQL4 takie jak: int, double, string i bool. W tym oraz kolejnych rozdziałach zostanie przedstawiona podstawowa wiedza na temat innych typów zmiennych.

char

Może zawierać wartości w zakresie od -128 do 127. W pamięci komputera zajmuje 1 bajt (8 bitów).

uchar

Może zawierać wartości w zakresie od 0 do 255. W pamięci zajmuje 1 bajt (8 bitów).

short

Może zawierać wartości w zakresie od -32 768 do 32 767. W pamięci zajmuje 2 bajty (16 bitów).

ushort

Może zawierać wartości w zakresie od 0 do 65 535. W pamięci zajmuje 2 bajty (16 bitów).

int

Może zawierać wartości w zakresie od -2 147 483 648 do 2 147 483 647. W pamięci zajmuje 4 bajty (32 bity).

uint

Może zawierać wartości w zakresie od 0 do 4 294 967 295. W pamięci zajmuje 4 bajty (32 bity).

long

Może zawierać wartości w zakresie od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807. W pamięci zajmuje 8 bajtów (64 bitów).

ulong

Może zawierać wartości w zakresie od 0 do 18 446 744 073 709 551 615. W pamięci zajmuje 8 bajtów (64 bitów).

Te typy służą to inicjalizacji zmiennych, przeznaczonych do przechowywania liczb całkowitych. Wybierając któryś z tych typów należy pamiętać, żeby wartość zmiennej nie wychodziła poza granice jakie ten typ może mieć. Na przykład, w poniższym kodzie skryptu zmienna B ma typ char, tj. może przechowywać wartości od -128 do 127. Po działaniu arytmetycznym B = A + 200, B powinno być równe 300. Ale czy tak naprawdę się stanie? Podczas kompilacji pojawi się ostrzeżenie ‘possible loss of data due to type conversion’, tj. możliwa jest utrata danych ze względu na rodzaj konwersji. Po uruchomieniu skryptu w terminalu w logach zobaczysz wpis ‘B = 44’ (rys. 1).

Kod 1
#property strict

char A = 100;

void OnStart()
  {
   char B = A + 200;
   Print("B = " , B);
  }

Rys. 1. Wyjście poza granice typu char.


Jeśli nie wiesz jak dużą liczbę może mieć zmienna proponuję używać typ int. Jeśli jednak będziesz wiedział, że może to być bardzo duża wartość to używaj long lub ulong. Z kolei jeśli po uruchomieniu twojego programu zobaczysz, że nagle komputer zwolnił i zrobiło się mało wolnej pamięci RAM, sprawdź czy może dla jakichś zmiennych warto zastosować typ, który w pamięci zajmuje mniej miejsca. Taki problem może łatwo pojawić się przy stosowaniu dużych lub wielowymiarowych tablic. Na przykład, przy inicjalizacji 4-wymiarowej tablicy, gdzie każdy wymiar ma 1000 elementów, program będzie chciał zarezerwować w RAM 1000 x 1000 x 1000 x 1000 = 1 miliard komórek. Jeśli jej typ to long to taka tablica będzie potrzebować ponad 7 Gb pamięci RAM.