Swift – Sobrecarga de funciones

En Swift, una función es un conjunto de declaraciones agrupadas para realizar una tarea específica. Se declara usando la palabra clave “func”. También podemos establecer el tipo de retorno de la función especificando el tipo de datos seguido de una flecha de retorno («->»).

Sintaxis:

func functionName(parámetros) -> returnType {

             // cuerpo

}

Ejemplo:

En el siguiente programa, estamos imprimiendo una string al definir una función que no contiene ningún parámetro ni tipo de retorno.

Swift

// Swift program to illustrate how we
// can print a string using a function
  
// Function to print a string
// This function have no return type
func print()
{
     print("GeeksforGeeks") 
}
  
// Calling print function
print()

Producción:

GeeksforGeeks

Sobrecarga de funciones

La sobrecarga de funciones es la característica más utilizada por los desarrolladores. Esta técnica les permite crear funciones que comparten algunas características comunes como el mismo nombre, etc. En Swift, un par de funciones pueden tener el mismo nombre siempre que sean diferentes en el número de parámetros, el tipo de al menos uno correspondiente parámetro, o la etiqueta de al menos un parámetro correspondiente. Estas funciones se conocen como funciones sobrecargadas y esta característica se conoce como sobrecarga de funciones. Aporta más flexibilidad y es útil cuando requerimos el mismo o similar resultado o funcionalidad.

Hay tres métodos mediante los cuales podemos lograr la sobrecarga de funciones en Swift y se analizan a continuación:

Sobrecarga de funciones con diferente número de parámetros

Las funciones que tienen el mismo tipo de datos de los parámetros correspondientes pero son diferentes en la cantidad de parámetros que contienen pueden tener el mismo nombre de las funciones. En el siguiente programa, tenemos tres funciones del mismo nombre que es printSum pero con un número diferente de parámetros. Aquí, la primera función contiene dos parámetros de tipo entero, la segunda función contiene tres parámetros de tipo entero mientras que la tercera función contiene cuatro parámetros de tipo entero.

Ejemplo:

Swift

// Swift program to illustrate function overloading
  
// Function 1 to calculate sum
func printSum(value1: Int, value2: Int) 
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value2
      
    // Print the sum
     print("The sum of", value1, "and",
           value2, "is equal to", sum)
}
  
// Function 2 to calculate sum
func printSum(value1: Int, value2: Int, value3: Int)
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value2 + value3
      
    // Print the sum
     print("The sum of", value1, ",", 
           value2, "and", value3, 
           "is equal to", sum)
      
}
  
// Function 3 to calculate sum
func printSum(value1: Int, value2: Int, value3: Int,
              value4: Int) 
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value2 + value3 + value4
      
    // Print the sum
     print("The sum of", value1, ",", 
           value2, ",", value3, "and", 
           value4, "is equal to", sum)
}
  
// Calling printSum() function to calculate sum 
printSum(value1: 5, value2: 15)
  
// Calling printSum() function to calculate sum
printSum(value1: 5, value2: 15, value3: 25)
  
// Calling printSum() function to calculate sum
printSum(value1: 5, value2: 15, value3: 25, value4: 35)

Producción:

The sum of 5 and 15 is equal to 20
The sum of 5 , 15 and 25 is equal to 45
The sum of 5 , 15 , 25 and 35 is equal to 80

Sobrecarga de funciones con el mismo número de parámetros

Las funciones que tienen el mismo número de parámetros pero al menos uno de los parámetros correspondientes son diferentes en los tipos de datos pueden tener el mismo nombre de las funciones. En el siguiente programa, tenemos tres funciones del mismo nombre que es printSum, aunque todas las funciones contienen la misma cantidad de parámetros pero tienen diferentes tipos. La primera función contiene dos parámetros de tipo entero, la segunda función contiene un parámetro de tipo entero y uno flotante, y la tercera función contiene dos parámetros de tipo flotante.

Ejemplo:

Swift

// Swift program to illustrate function overloading
  
// Function 1 to calculate sum
func printSum(value1: Int, value2: Int)
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value2
      
    // Print the sum
     print("The sum of", value1, "and", 
           value2, "is equal to", sum)
}
  
// Function 2 to calculate sum
func printSum(value1: Int, value2: Float) 
{
  
    // Calculating sum of value1 and value2
    let sum = Float(value1) + value2
      
    // Print the sum
     print("The sum of", value1, "and", 
           value2, "is equal to", sum)
      
}
  
// Function 3 to calculate sum
func printSum(value1: Float, value2: Float) 
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value2
      
    // Print the sum
     print("The sum of", value1, "and", 
           value2, "is equal to", sum)
      
}
  
// Calling printSum() function to calculate sum 
printSum(value1: 5, value2: 15)
  
// Calling printSum() function to calculate sum
printSum(value1: 5, value2: 15.123)
  
// Calling printSum() function to calculate sum
printSum(value1: 5.123, value2: 15.123)

Producción:

The sum of 5 and 15 is equal to 20
The sum of 5 and 15.123 is equal to 20.123001
The sum of 5.123 and 15.123 is equal to 20.246

Sobrecarga de funciones con diferentes etiquetas de argumentos

Dos funciones que tienen el mismo tipo de datos de parámetros correspondientes y también tienen el mismo número de parámetros pero tienen diferentes nombres de etiquetas pueden tener el mismo nombre de funciones. En el siguiente programa, tenemos tres funciones del mismo nombre que es printSum, aunque todas las funciones contienen el mismo número y tipo de parámetros pero tienen diferentes etiquetas. La primera función contiene dos parámetros de tipo entero con etiquetas value1 y value2, la segunda función contiene dos parámetros de tipo entero con etiquetas variable1 y variable2, y la tercera función contiene dos parámetros de tipo entero con etiquetas number1 y number2.

Ejemplo:

Swift

// Swift program to illustrate function overloading
  
// Function 1 to calculate sum
func printSum(value1: Int, value2: Int)
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value2
      
    // Print the sum
    print("The sum of", value1, "and",
          value2, "is equal to", sum)
}
  
// Function 2 to calculate sum
func printSum(variable1: Int, variable2:Int) 
{
  
    // Calculating sum of value1 and value2
    let sum = variable1 + variable2
      
    // Print the sum
    print("The sum of", variable1, "and",
          variable2, "is equal to", sum)
      
}
  
// Function 3 to calculate sum
func printSum(number1: Int, number2: Int) 
{
  
    // Calculating sum of value1 and value2
    let sum = number1 + number2
      
    // Print the sum
    print("The sum of", number1, "and",
          number2, "is equal to", sum)
      
}
  
// Driver code
// Calling printSum() function to calculate sum 
printSum(value1: 15, value2: 15)
  
// Calling printSum() function to calculate sum
printSum(value1: 30, value2: 30)
  
// Calling printSum() function to calculate sum
printSum(value1: 60, value2: 60)

Producción:

The sum of 15 and 15 is equal to 30
The sum of 30 and 30 is equal to 60
The sum of 60 and 60 is equal to 120

Sobrecarga de funciones según el tipo de retorno 

¿Podemos sobrecargar las funciones sobre la base del tipo de retorno de la función solamente? La respuesta es No. No podemos sobrecargar las funciones usando diferentes tipos de devolución para las funciones. En otras palabras, si hay al menos dos funciones en un programa que tienen el mismo tipo de datos de parámetros correspondientes y tienen exactamente la misma cantidad de parámetros, entonces el compilador produce un error de tiempo de compilación. En el siguiente programa, la primera función tiene un tipo de retorno entero y contiene dos parámetros de tipo entero, la segunda función tiene un tipo de retorno doble y contiene dos parámetros de tipo entero. Además, los parámetros correspondientes tienen la misma etiqueta. Por lo tanto, esto no está permitido en Swift. 

Ejemplo:

Swift

// Swift program to illustrate function overloading
  
// Function 1 to calculate sum
func printSum(value1: Int, value2: Int) -> Int
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value2
      
    // Print the sum
    return(sum)
}
  
// Function 2 to calculate sum
func printSum(value1: Int, value2:Int) -> Double 
{
  
    // Calculating sum of value1 and value2
    let sum = value1 + value1
      
    // Print the sum
    return (Double)(sum)
}
  
// Driver code
// Calling printSum() function to calculate sum 
print("The sum of 15 and 25 is equal to", 
      printSum(value1: 15, value2: 25))
  
// Calling printSum() function to calculate sum 
print("The sum of 25 and 35 is equal to", 
      printSum(value1: 25, value2: 35))

Producción:

main.swift:28:7: error: ambiguous use of 'printSum(value1:value2:)'
      printSum(value1: 15, value2: 25))
      ^
main.swift:4:6: note: found this candidate
func printSum(value1: Int, value2: Int) -> Int
     ^
main.swift:15:6: note: found this candidate
func printSum(value1: Int, value2:Int) -> Double 
     ^
main.swift:32:7: error: ambiguous use of 'printSum(value1:value2:)'
      printSum(value1: 25, value2: 35))
      ^
main.swift:4:6: note: found this candidate
func printSum(value1: Int, value2: Int) -> Int
     ^
main.swift:15:6: note: found this candidate
func printSum(value1: Int, value2:Int) -> Double 
     ^

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *