Co je přetížení funkcí?
Přetížení funkcí je funkcí mnoha programovacích jazyků, kde lze vytvořit více metod se stejným názvem, ale s různými vstupními parametry nebo návratovými typy. Toto je běžný rys v objektově orientovaném programování; zejména konstruktéři mohou mít více různých přetížených variant. V zásadě je přetížení funkcí užitečné, když dvě funkce dělají velmi podobné věci a mohou k tomu využít více typů vstupů. Konstruktory mohou být snadno přetíženy, protože nemají specifikovaný typ explicitního návratu, takže jednoduše změna vstupních parametrů konstruktoru by byla platná přetížení.
Prvním způsobem, jak lze funkci přetížit, je změna vstupních parametrů. Například lze uvažovat funkci nazvanou „add“, která jako vstup vezme dvě celá čísla. Účel této funkce je zcela zřejmý; má najít součet dvou celých čísel.
Pokud bychom však chtěli najít součet dvou plováků nebo desetinných čísel, tato funkce by nebyla použitelná. Takže by byla nutná druhá přetížená funkce, definovaná jako funkce nazvaná „add“, která jako vstup vezme dva plováky. Funkce dělají v podstatě totéž, ale přetížení funkcí je nezbytné, protože jejich vstupy jsou výrazně odlišné.
Druhým způsobem, jak může být funkce přetížena, je změna jak vstupních parametrů, tak i typu návratu. Pomocí předchozího příkladu lze zvážit, zda obě přetížené funkce „add“ měly neplatný typ návratu; to znamená, že nic nevrátili. To by stále platilo přetížení funkcí, ale je možné změnit i návratové typy obou metod. V další platné instanci přetížení by funkce „add“, která vezme dvě celá čísla, mohla vrátit celou částku čísla a funkce „add“, která vezme dvě desetinná čísla, by mohla vrátit tuto sumu desetinných čísel.
Pouhá změna typu návratu funkce se však nepovažuje za platné přetížení funkce. Změna pouze návratového typu funkce má za následek dvojznačnost, protože z podpisu metody není jasné, který typ návratu je žádoucí. Parametry lze také definovat dvojznačně, takže je velmi důležité správně zavolat přetížené funkce. Například, pokud má jeden přetíženou funkci, která má jako vstupní parametr celé číslo a druhou, která má jako parametr desetinné číslo, bylo by pro někoho snadné zavolat funkci desetinného čísla namísto celé funkce čísla , nebo naopak, protože mají stejné jméno. Pokud je to možné, je třeba se vyhnout nejasným parametrům, jako jsou tyto, a pokud nemohou, je třeba dbát na to, aby byla ve správných časech vyvolána správná funkce přetížení.
Přetížení funkcí je užitečné pro vytváření souvisejících funkcí s různými typy vstupů a dává kódu velkou flexibilitu. Jedním z konečných úvah o přetížených funkcích je to, že je nezbytné odpovídající komentář. I když by mohlo být zřejmé, na základě odlišných vstupních parametrů, která verze přetížené funkce je pro konkrétní situaci vhodná, nemusí být vždy jasné, co funkce dělá odlišně od ostatních přetížených partnerů.