Uživatelské funkce

Již v dřívějších dílech jsme uvedli, že uživatelské funkce jsou takové funkce, které musíme v rámci programu nadefinovat. Tím se liší od funkcí standardních, které definovat nemusíme, stačí na ně jen zavolat pomocí operátoru volání funkce. Z tohoto pohledu lze za uživatelské funkce považovat také funkce speciální, jelikož i ty definujeme sami, kromě jejich typu a názvu. Jejich jedinou odlišností je, že je nemusíme volat, volá na ně sám terminál MT4. Teoreticky lze speciální funkci zavolat i ručně z programu, ale sami tvůrci jazyka to nedoporučují. Vše shrnuje následující tabulka:

Typ funkce Předpis funkce v programu Volání funkce
Speciální Ano Ne
Standardní Ne Ano
Uživatelská Ano Ano

Uživatelskou funkci si tedy musíme předepsat a pro její exekuci jí musíme také zavolat. Jak vypadá operátor volání funkce i předpis funkce jsme se dozvěděli již v jedenáctém díle, tedy úvodním díle o funkcích. Pro připomenutí ale níže přidáme obrázek, na kterém je tvar obou záležitostí vidět. Stejně tak je na něm vidět, jak probíhá transfer parametrů mezi operátorem volání funkce a hlavičkou předpisu funkce. Plyne z něj, že proměnné uvnitř naší funkce jsou naprosto nezávislé na všech proměnných mimo funkci (s výjimkou proměnných globálních – viz šestý díl o proměnných). Všechny proměnné, které použijeme ve funkci, musíme nadeklarovat. Přesto ale můžeme použít hodnoty proměnných nebo výrazů mimo naší funkci, a to právě s pomocí parametrů. Z obrázku by mělo být vše jasné:

Parametry

Ještě také pro jistotu připomenu, že předpis uživatelské funkce musí být umístěn mimo těla ostatních funkcí.

Využití uživatelské funkce si ukážeme na jednoduchém prográmku, jehož úkolem je ze zadaných stran odvěsen vypočítat délku přepony pravoúhlého trojúhelníku dle známé Pythagorovy věty c^2 = a^2 + b^2, kde c je délkou přepony, a s b jsou délkami odvěsen. Možností, jak skript sestavit, je mnoho. Začneme tou bez využití uživatelské funkce:

Pythagoras bez funkce

Z komentářů v kódu by měl být postup jasný. Pro výpočet odmocniny slouží v MQL funkce MathSqrt(), výsledek je uživateli oznámen funkcí Alert(). Nyní si ukážeme, jak je možné celý program zkonstruovat s využitím uživatelské funkce:

Pythagoras s funkcí

Pro výpočet přepony C je zavolána funkce Pythagoras, která za využití parametrů, tedy hodnot odvěsen, přeponu vypočítá a vrátí výsledek. Ten je poté prezentován uživateli. Princip nezávislosti proměnných jsme znázornili tak, že ve funkci Start() jsou názvy stran označeny velkými písmeny, kdežto uvnitř funkce Pythagoras() písmeny malými. Zvoleny by však mohly být jakékoliv jiné názvy, jak si následně ukážeme.

Na programování je úžasné to, že kód, jehož exekuce přinese stejný výsledek, může více programátorů sestavit diametrálně odlišně. Pojďme se podívat na další 2 zajímavé možnosti, jak může vypadat tělo funkce Pythagoras

pythagoras

V této verzi jednak zdůrazňujeme nezávislost proměnných na vnějších proměnných použitím úplně jiných názvů. Především je ale několikrát znovu použita proměnná alfa jako uchovatel hodnoty, čímž se snažíme ukázat, že teoreticky není potřeba dalších proměnných, které by uchovávaly hodnotu c^2 a c. Záleží jen na hodnotě, kterou funkce vrátí a je jedno, která proměnná jí uchová. Hodnota proměnné alfa se během funkce dvakrát změní, na konci má však právě hodnotu délky přepony. Na celkovém výsledku to tedy vůbec nic nemění, ale je to obvykle méně přehledné a méně „pěkné“, záleží na vkusu programátora.

pythagoras2

Takto vypadá nejúspornější a nejelegantnější varianta funkce, kdy celý výpočet je umístěn v operátoru return. Ne vždy je to ale možné a ne pro každého je tato varianta přehledná a intuitivní, proto se často používají rozepsané varianty. Když se zbavíme uživatelské funkce a použijeme toto řešení, zjistíme, že celý problém se dá vyřešit pouhými několika řádky. Následující ukázka představuje celý kód. Kód je vylepšený ještě o to, že délky odvěsen zadává sám uživatel.

pythagoraskompletPro vlastní potřeby a ověření, že skutečně funguje, si tento kód můžete stáhnout zde. Pozor, jedná se o skript, takže je třeba ho nahrát do složky Scripts.

Jelikož v tuto chvíli známe všechny základní aspekty obecného programování, příště si můžeme dát první ryze praktický díl. Dnes jsme si již ukázali první jednoduchý skript. Příště se nabízí další skript, který ale bude mít něco společného s tradingem, což je primárním cílem této série i programovacího jazyka jako takového.