Swift #12: Funciones
Source: Dev.to
Definición de funciones
Las funciones son bloques de código delimitados por llaves ({) e identificados por un nombre. A diferencia de los bloques de código usados en los bucles y condicionales, no hay que satisfacer ninguna condición en las funciones para funcionar; las líneas de código de la función se ejecutan siempre que se la invoca.
Una vez que se llama una función, la ejecución del programa continúa dentro de ella y, cuando termina, regresa a la línea que la invocó para continuar con la ejecución anterior.
func f1() { // Declaración y definición
let x = 1 + 2 // 3
}
f1() // Invocación
var counter = 0
while counter // (código incompleto en el original)
En Swift, una función puede devolver un valor especificando su tipo de retorno entre -> y usando la palabra clave return. Si la única instrucción es devolver un valor, return puede omitirse.
func f2(a: Int, b: Int) -> Int {
return a + b
}
let x1 = f2(a: 1, b: 2) // 3
let x2 = f2(a: 2, b: 5) // 7
func f3(a: Int, b: Int) -> Int {
a + b
}
Sobrecarga de funciones
Se pueden definir varias funciones con el mismo nombre siempre que difieran en el número o tipo de sus parámetros.
func f(value: Int) -> Int {
value + 1
}
func f(value: String) -> Int {
value.count
}
print(f(value: "Hola")) // 4
print(f(value: 1)) // 2
Sobrecargar solo el tipo de retorno puede producir ambigüedad:
func f(value: Int) -> Int {
value + 1
}
func f(value: Int) -> Double {
Double(value) + 1.0
}
let result = f(value: 1) // Error: Ambiguous use of 'f(value:)'
Para resolverlo, se debe proporcionar información adicional al compilador:
let result: Double = f(value: 1) // ✅
print(result) // 2.0
Funciones genéricas
Cuando varias funciones comparten la misma lógica pero difieren solo en el tipo de sus parámetros, se puede usar una función genérica:
func f<T>(value: T) -> String {
"Valor: \(value)"
}
let r1 = f(value: 1) // "Valor: 1"
let r2 = f(value: "Hola") // "Valor: Hola"
Se pueden usar múltiples tipos genéricos:
func f<T, U>(value1: T, value2: U) -> String {
"Valores: \(value1) \(value2)"
}
let r1 = f(value1: 1, value2: 0.5) // "Valores: 1 0.5"
let r2 = f(value1: "Hola", value2: "Chao") // "Valores: Hola Chao"
Biblioteca estándar
Algunas funciones y operadores predefinidos de Swift:
print(_:)– Imprime un valor en la consola.abs(_:)– Valor absoluto de un entero.max(_:_:)– Devuelve el mayor de los valores.min(_:_:)– Devuelve el menor de los valores.
Funciones para detener la ejecución del programa
(Sección pendiente de contenido)