Přetížení funkce Swift (s příklady)

V tomto článku se dozvíte o přetížení funkcí, kdy potřebujeme přetížení funkcí a jak přetížit příklady.

Dvě nebo více funkcí, které mají stejný název, ale různé argumenty, jsou známé jako přetížené funkce.

Proč potřebujeme přetížení funkcí?

Představte si, že vyvíjíte střílečku, ve které hráč může zaútočit na své nepřátele nožem, čepelí a zbraní. Vaše řešení pro funkčnost útoku může být definování akcí do funkcí jako:

 func attack() ( //… print("Attacking with Knife") ) func attack() ( //… print("Attacking with Blade") ) func attack() ( //… print("Attacking with Gun") ) 

Ale když se pokusíte spustit výše uvedený program, zobrazí se chyba kompilace v Swiftu, protože zde byl dříve deklarován 'útok ()' . Dalším řešením však může být definování různých názvů funkcí pro konkrétní funkce jako:

 struct Knife ( ) struct Gun ( ) struct Blade ( ) func attackUsingKnife(weapon:Knife) ( //… print("Attacking with Knife") ) func attackUsingBlade(weapon:Blade) ( //… print("Attacking with Blade") ) func attackUsingGun(weapon:Gun) ( //… print("Attacking with Gun") ) 

Nebojte se, pokud nevíte, co je struktura. Prozatím si to představte jako něco, co vytváří fyzický objekt v programování, takže vytváříte nůž, zbraň a čepel. Pokud se chcete dozvědět více, podívejte se na Swift Struct. Pokud ne, vrátíme se k tomu v dalších kapitolách.

Jediným problémem tohoto řešení je, že si musíte pamatovat názvy funkcí, které volají konkrétní akci útoku. Se zvyšováním úrovně může mít hráč další funkce pro útok pomocí bomby, granátu, brokovnice atd.

Vytvoření funkce s různými názvy je časově náročné a zvyšuje režii při zapamatování názvu funkce, která se má volat. Celkově to není intuitivní.

Bylo by mnohem lepší, kdybyste pro každou zbraň mohli vytvořit různé funkce se stejným názvem, ale s odlišnou implementací. Takto si stačí zapamatovat jeden název funkce a nebudete se muset starat o názvy funkcí pro jiné zbraně.

Co je přetížení funkce?

Proces, který jsme právě popsali, je známý jako přetížení funkce. Podle definice je proces vytváření dvou nebo více než dvou funkcí se stejným názvem, ale s odlišným počtem nebo typy předaných parametrů znám jako přetížení funkce.

Podívejme se na to v následujícím příkladu:

Příklad 1: Přetížení funkce

 struct Knife ( ) struct Gun ( ) struct Blade ( ) func attack(with weapon:Knife) ( print("Attacking with Knife") ) func attack(with weapon:Gun) ( print("Attacking with Gun") ) func attack(with weapon:Blade) ( print("Attacking with Blade") ) attack(with: Gun()) attack(with: Blade()) attack(with: Knife()) 

Když spustíte výše uvedený program, výstup bude:

 Útoky na zbraně Útoky na čepele Útoky nožem 

Ve výše uvedeném programu jsme vytvořili tři různé funkce se stejným názvem attack. Přijímá však různé typy parametrů. Takto si attackstačí zapamatovat jméno pro volání funkce.

  • Volání attack(with: Gun())spustí příkaz uvnitř funkce func attack(with weapon:Gun).
  • Volání attack(with: Blade())spustí příkaz uvnitř funkce func attack(with weapon:Blade).
  • Příkaz volání attack(with: Knife())uvnitř funkce func attack(with weapon:Knife).

Příklad 2: Přetížení funkce na základě různých typů parametrů

 func output(x:Int) ( print("The int value is (x)") ) func output(x:String) ( print("The string value is (x)") ) output(x: 2) output(x: "Swift") 

Když spustíte výše uvedený program, výstup bude:

 Hodnota int je 2 Hodnota řetězce je Swift 

Ve výše uvedeném programu máme dvě funkce se stejným názvem output()a stejným počtem parametrů. První output()funkce však bere celé číslo jako parametr a druhá output()funkce bere Stringjako parametr.

Podobně jako v příkladu 1,

  • volání output(x: 2)spouští příkaz uvnitř funkce func output(x:Int)a
  • volání output(x: "Swift")spouští příkaz uvnitř funkce func output(x:String).

Příklad 3: Přetížení funkce na základě různého počtu parametrů

 func output() ( print("Good Morning!") ) func output(text:String) ( print(text) ) func output(text:String, num:Int) ( print("(text)(num)!") ) output() output(text: "Good Evening!") output(text1: "Good N", num: 8) 

Když spustíte výše uvedený program, výstup bude:

Dobré ráno! Dobrý večer! Dobrou noc!

Ve výše uvedeném programu byla funkce output()přetížena na základě počtu argumentů.

První output()nebere žádné parametry, druhý output()bere jeden parametr: Stringa třetí output()bere dva parametry: Stringa Int.

Pokusme se přetížit změnou názvu parametru, ale zachováním označení argumentu jako:

Příklad 4: Přetížení funkce se stejným popisem argumentu

 func output(value text:String) ( print(text) ) func output(value num:Int) ( print(num) ) output(value: 2) output(value: "Hello") 

Když spustíte výše uvedený program, výstup bude:

 2 Dobrý den

Jak vidíte, ve výše uvedeném programu můžete použít stejný štítek argumentu pro přetížené funkce. Jak však přetížení vyžaduje, musíte mít buď jiný počet parametrů, nebo různé typy parametrů.

Zajímavé články...