martes, 7 de octubre de 2014

Swift y las Funciones (Functions)

Swift y las Funciones (Functions)

Las funciones son contenedores de código independientes que ejecutan una tarea específica.

Los parámetros que reciben las funciones pueden contener valores por defecto para simplificar la llamada a las funciones, y pueden ser pasadas como in-out, serán modificadas las variables pasadas una vez que se haya finalizado la ejecución de la función.

func mostrarMensaje(mensajeIn: String) -> String {

 let contenidoRetorno = "Cadena inicial " + mensajeIn

 return contenidoRetorno
}

Se indica el valor de retorno mediante un guión y el símbolo mayor que (->) seguido por el tipo a retornar.

Utilizando la llamada en un println:

println(mostrarMensaje("final de la cadena"))


Parámetros y Valores de Retorno en las Funciones

Las funciones pueden tener múltiples parámetros de entrada, que son escritos dentro de unos paréntesis, separados por comas.

func sumaNumeros(primero: Int, segundo: Int) -> Int {

 return primero + segundo;

}

println(sumaNumeros(39,19));


Las funciones pueden no recibir parámetros.

func sumaNumeros100_200() -> String {

   return 100 + 200

}

println(sumaNumeros())

Las funciones pueden no retornar valores. En este caso no incluiremos ( -> ) ni el tipo de retorno.

func mostrarMensajeAviso(mensajeIn: String){

  println("Aviso : \(mensajeIn)")

}

Funciones Con Múltiples Valores de Retorno

Se puede utilizar un tipo Tuple  como valor de retorno para que una función devuelva múltiples valores.

func valoresSuma(arrayIn: [Int]) -> (elementos: Int, total: Int){

        var suma = 0

        for value in arrayIn[1..<arrayIn.count]
        {
               suma += value
        }

  return (arrayIn.count, suma)

}

La utilización de esta función para mostrar los valores retornados.

let valores = valoresSuma([1,2,3,4],100)

println("valores en array \(valores.elementos) y el total suma mas cien \(valores.total)")


Tuple Opcionales como Retorno


Se puede utilizar un opcional tiple como retorno tipo para indicar que el contenido tuple puede ser nil.

Indicar un opcional tuple como tipo de retorno

(Int, Int)?
(String, Int, Bool)?

func valoresSuma(arrayIn: [Int]) -> (elementos: Int, total: Int)? {

 if arrayIn.isEmpty { return nil }

  var suma = 0

  for value in arrayIn[1..<arrayIn.count]
 {
     suma += value
 }

  return (arrayIn.count, suma)

}


Nombre de Parámetros en las Funciones


Las funciones definen nombres a los parámetros.

func nombreFuncion(nombreParametro: Int){
    // Contenido de la función
}

Estos nombre de parámetros son utilizados dentro de la función. Esta clase de parámetros son conocidos como parámetros locales, porque son sólo disponibles dentro de la función.


Nombre de Parámetros Externos

A veces es útil nombrar a los parámetros cuando se llama a un función, para indicar el propósito de cada argumento que se pasa a la función.

Declarar un nombre de parámetro externo además del parámetro local.

func sumaNumeros(valorNumerico cifra: Int) {

 // el nombre del parámetro local es cifra, y el externo valorNumerico

}

La llamada a esta función será : sumaNumeros(valorNumerico: 233)

Para una función que reciba tres parámetros

func ganadores(primero: String, segundo: String,  tercero: String) -> String {

 return ("1 : \(primero) 2: \(segundo) 3:\(tercero)")

}

la llamada a esta función será

ganadores("josé","juan","edu")

Para una lectura mejor de código

func ganadores(Oro primero: String
         Plata segundo: String,  Bronce tercero: String) -> String {

 return ("1 : \(primero) 2: \(segundo) 3:\(tercero)")

}

Y la llamada con estos nombre de parámetros externos será.

ganadores(Oro:"josé", Plata:"juan", Broce:"edu")

De esta manera la diferencia con la versión anterior ganadores("josé","juan","edu") es mucha más clara a la hora de leer el código.

Utilizar el Nombre del Parámetro local

En el caso de que el nombre de parámetro local sea válido para una clara lectura del código utilizar el símbolo hash (#) y no será necesario declarar ningún nombre externo


func ganadores(#primero: String, #segundo: String,  #tercero: String) -> String {

 return ("1 : \(primero) 2: \(segundo) 3:\(tercero)")

}

La llamada de la función será

ganadores(primero:"josé",segundo:"juan",tercero:"edu")


Valores por Defecto en los Parámetros

Se puede definir valores por defecto en los parámetros. 
Si se define un valor por defecto se puede omitir el parámetro en la llamada.

func ganadores(#primero: String, #segundo: String
                                #tercero: String = " sin adjudicar ") -> String {

 return ("1 : \(primero) 2: \(segundo) 3:\(tercero)")

}

La llamada a esta función sin incluir el parámetro con valor por defecto.

ganadores(primero:"josé", segundo:"juan")

















No hay comentarios:

Publicar un comentario