5. Funkcje własne.

5.2. Realizacja funkcji własnej

W celu zademonstrowania jak się stosuje funkcję przygotujmy dwa skrypty, które obliczą objętość walca (rys. 1). Pierwszy - bez funkcji własnej (kod 1), drugi - z zastosowaniem owej (kod 2).

Rys. 1. Formuła obliczenia objętości walca.


Wariant 1

Bez funkcji własnej.


Kod 1
// --- Wariant 1.
#property strict

void OnStart()
  {
   double r = 1.0;               // promień podstawy walca
   double h = 2.5;               // wysokość walca

   double v = M_PI * r * r * h;  // objętość walca
  
   Print("Obiętość walca = ", DoubleToString(v));
  }

W tym skrypcie zmienna r będzie określać wartość promienia podstawy walca, a zmienna h jego wysokość. Utworzymy zmienną v, której od razu przypiszemy wynik obliczenia objętości zgodnie z formułą M_PI * r * r * h. Tutaj M_PI to stała π (Pi), która w MQL4 zdefiniowana liczbą 3.14159265358979323846. Dalej za pomocą funkcji standardowej Print() wyświetlimy wynik w dzienniku logów terminala.


Wariant 2

A teraz zrealizujmy to samo zadanie z użyciem funkcji własnej.

Kod 2
// --- Wariant 2.
#property strict

void OnStart()
  {
   double r = 1.0;          // promień podstawy walca
   double h = 2.5;          // wysokość walca

   double v = CylinderVolume(r,h);  // objętość walca

   Print("Obiętość walca = ", DoubleToString(v));
  }

//--- funkcja własna do obliczenia objętości walca
double CylinderVolume(double radius, double height)
  {
   double volume = M_PI * radius * radius * height;
   return(volume);
  }

W tym wariancie widzimy, że v obliczana jest za pomocą zapisu CylinderVolume(r,h). Ten zapis oznacza wywołanie funkcji własnej o nazwie CylinderVolume. Dalej już poza granicami OnStart() opisaliśmy tę funkcję, gdzie obliczana jest objętość walca.

Rys. 2. Skrypt z funkcją własną.


Korzystanie z funkcji własnej składa się z dwóch etapów: jej opisu i wywołania. Jeśli funkcja zostanie opisana, ale nie wywołana w kodzie, to nie zostanie ona uruchomiona. Jeśli spróbujemy wywołać funkcję, której nie opisano, wtedy kompilator wygeneruje błąd.