Быстрая перегрузка функций (с примерами)

В этой статье вы узнаете о перегрузке функций, когда нам нужна перегрузка функций и как перегрузить с примерами.

Две или более функций с одинаковыми именами, но разными аргументами называются перегруженными функциями.

Зачем нужна перегрузка функций?

Представьте, что вы разрабатываете шутер, в котором игрок может атаковать врагов, используя нож, лезвие и пистолет. Ваше решение для функциональности атаки может заключаться в определении действий в виде функций:

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

Но когда вы попытаетесь запустить указанную выше программу, вы получите ошибку времени компиляции в Swift как 'attack ()', ранее объявленную здесь . Однако другое решение могло бы определять разные имена функций для конкретной функциональности как:

 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") ) 

Не волнуйтесь, если вы не знаете, что такое структура. А пока представьте себе это как что-то, что создает физический объект в программировании, то есть вы создаете нож, пистолет и клинок. Если вы хотите узнать больше, см. Swift Struct. Если нет, мы вернемся к этому в следующих главах.

Единственная проблема с этим решением заключается в том, что вам нужно запомнить имена функций для вызова этого конкретного действия атаки. Также по мере повышения уровня у игрока могут появиться дополнительные возможности для атаки с использованием бомбы, гранаты, дробовика и т. Д.

Создание функции с разными именами занимает много времени и увеличивает накладные расходы на запоминание имени функции для ее вызова. В общем, это не интуитивно.

Было бы намного лучше, если бы вы могли создавать разные функции с одним и тем же именем, но с разной реализацией для каждого оружия. Таким образом, достаточно запомнить одно имя функции, и вам не придется беспокоиться об именах функций для другого оружия.

Что такое перегрузка функций?

Только что описанный процесс известен как перегрузка функции. По определению, процесс создания двух или более чем двух функций с одним и тем же именем, но с разным числом или типами передаваемых параметров известен как перегрузка функции.

Давайте посмотрим на это в примере ниже:

Пример 1: Перегрузка функции

 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()) 

Когда вы запустите вышеуказанную программу, результат будет:

 Атака оружием Атака клинком Атака ножом 

В приведенной выше программе мы создали три разные функции с одинаковым именем attack. Однако он принимает разные типы параметров. Таким образом, attackдля вызова функции достаточно запомнить имя.

  • Вызов attack(with: Gun())запускает оператор внутри функции func attack(with weapon:Gun).
  • Вызов attack(with: Blade())запускает оператор внутри функции func attack(with weapon:Blade).
  • Оператор вызова attack(with: Knife())внутри функции func attack(with weapon:Knife).

Пример 2: Перегрузка функции на основе разных типов параметров

 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") 

Когда вы запустите вышеуказанную программу, результат будет:

 Значение int равно 2 Строковое значение - Swift 

В приведенной выше программе у нас есть две функции с одинаковым именем output()и одинаковым количеством параметров. Однако первая output()функция принимает целое число в качестве параметра, а вторая output()функция принимает Stringв качестве параметра.

Аналогично примеру 1,

  • вызов output(x: 2)вызывает оператор внутри функции func output(x:Int)и
  • вызов output(x: "Swift")запускает оператор внутри функции func output(x:String).

Пример 3: Перегрузка функции из-за разного количества параметров

 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) 

Когда вы запустите вышеуказанную программу, результат будет:

Доброе утро! Добрый вечер! Доброй ночи!

В приведенной выше программе функция output()была перегружена из-за количества аргументов.

Первый не output()принимает параметров, второй output()принимает один параметр:, Stringа третий output()принимает два параметра: Stringи Int.

Давайте попробуем выполнить перегрузку, изменив имя параметра, но сохранив метку аргумента такой же, как:

Пример 4: Перегрузка функции с той же меткой аргумента

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

Когда вы запустите вышеуказанную программу, результат будет:

 2 Здравствуйте

Как видите, в приведенной выше программе вы можете использовать ту же метку аргумента для перегруженных функций. Однако, поскольку этого требует перегрузка, у вас должно быть другое количество параметров или разные типы параметров.

Интересные статьи...