Sobrecarga de funciones rápidas (con ejemplos)

En este artículo, aprenderá sobre la sobrecarga de funciones, cuándo necesitamos la sobrecarga de funciones y cómo sobrecargar con ejemplos.

Dos o más funciones que tienen el mismo nombre pero diferentes argumentos se conocen como funciones sobrecargadas.

¿Por qué necesitamos la sobrecarga de funciones?

Imagina que estás desarrollando un juego de disparos en el que el jugador puede atacar a sus enemigos con un cuchillo, una hoja y una pistola. Su solución para la funcionalidad de ataque podría ser definir las acciones en funciones como:

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

Pero cuando intente ejecutar el programa anterior, obtendrá un error de tiempo de compilación en Swift como 'ataque ()' declarado anteriormente aquí . Sin embargo, otra solución podría ser definir diferentes nombres de función para la funcionalidad particular como:

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

No se preocupe si no sabe qué es la estructura. Por ahora, piense en ello como algo que crea un objeto físico en la programación, por lo que está creando un cuchillo, pistola y hoja. Si desea saber más, consulte Swift Struct. Si no, volveremos a ello en los capítulos posteriores.

El único problema con esta solución es que necesita recordar los nombres de las funciones para llamar a esa acción de ataque en particular. Además, a medida que aumenta el nivel, el jugador puede tener características adicionales para atacar con bombas, granadas, escopetas, etc.

La creación de funciones con diferentes nombres lleva mucho tiempo y aumenta la sobrecarga de recordar el nombre de la función para llamarla. Con todo, no es intuitivo.

Sería mucho mejor si pudiera crear diferentes funciones con el mismo nombre pero diferente implementación para cada arma. De esta manera, recordar el nombre de una función es suficiente y no tendrá que preocuparse por los nombres de las funciones de otras armas.

¿Qué es la sobrecarga de funciones?

El proceso que acabamos de describir se conoce como sobrecarga de funciones. Por definición, el proceso de crear dos o más de dos funciones con el mismo nombre pero con un número o tipo diferente de parámetros pasados ​​se conoce como sobrecarga de funciones.

Veamos esto en el siguiente ejemplo:

Ejemplo 1: Sobrecarga de funciones

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

Cuando ejecute el programa anterior, la salida será:

 Atacar con pistola Atacar con hoja Atacar con cuchillo 

En el programa anterior, hemos creado tres funciones diferentes con el mismo nombre attack. Sin embargo, acepta diferentes tipos de parámetros. De esta forma attackes suficiente recordar el nombre para llamar a la función.

  • La llamada attack(with: Gun())activa la declaración dentro de la función func attack(with weapon:Gun).
  • La llamada attack(with: Blade())activa la declaración dentro de la función func attack(with weapon:Blade).
  • La attack(with: Knife())declaración de llamada dentro de la función func attack(with weapon:Knife).

Ejemplo 2: Sobrecarga de funciones basada en diferentes tipos de parámetros

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

Cuando ejecute el programa anterior, la salida será:

 El valor int es 2 El valor de la cadena es Swift 

En el programa anterior, tenemos dos funciones con el mismo nombre output()y el mismo número de parámetros. Sin embargo, la primera output()función toma un número entero como parámetro y la segunda output()función toma Stringcomo parámetro.

Similar al Ejemplo 1,

  • la llamada a output(x: 2)desencadena la declaración dentro de la función func output(x:Int)y
  • la llamada a output(x: "Swift")desencadena la declaración dentro de la función func output(x:String).

Ejemplo 3: Sobrecarga de funciones basada en diferentes números de parámetros

 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) 

Cuando ejecute el programa anterior, la salida será:

¡Buenos días! ¡Buena noches! ¡Buenas noches!

En el programa anterior, la función output()se ha sobrecargado en función del número de argumentos.

El primero output()no toma parámetros, el segundo output()toma un solo parámetro: Stringy el tercero output()toma dos parámetros: Stringy Int.

Intentemos sobrecargar cambiando el nombre del parámetro pero manteniendo la etiqueta del argumento igual que:

Ejemplo 4: Sobrecarga de funciones con la misma etiqueta de argumento

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

Cuando ejecute el programa anterior, la salida será:

 2 hola

Como puede ver, en el programa anterior, puede usar la misma etiqueta de argumento para las funciones sobrecargadas. Sin embargo, según lo requiera la sobrecarga, debe tener un número diferente de parámetros o diferentes tipos de parámetros.

Articulos interesantes...