Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Tipos de parámetros en las funciones

27/37
Recursos

Aportes 9

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Parámetros por defecto
Una de las características de Kotlin es la posibilidad de trabajar con funciones con parámetros con valores por defecto. Tomemos como ejemplo la función sum que tiene dos parámetros y le agregamos un parámetro más:

fun sum(x:Int, y:Int, z:Int): Int{
   return x + y + z
}

Se podría asignar un valor a una de las variables:

fun sum(x:Int, y:Int, z:Int = 0): Int{
   return x + y + z
}

Luego la función sum, podría llamarse de las siguientes maneras:

sum(3, 2, 1)
sum(2, 4)

En ambos casos funciona en forma adecuada. Esto tiene una ventaja pues permite crear funciones con parámetros por defecto, con lo cual evita realizar sobre carga de funciones. En lenguajes como Java no hay parámetros por defecto, con lo cual muchas veces se tiene que sobre cargar los métodos.

Parámetros con nombres
Que sucede si queremos imprimir determinados parámetros que no sean contiguos, por ejemplo, el primero y el tercero.

Generamos una nueva función:

fun printDetails(name:String,email:String = "", phone:String){
 println("name: $name - email: $email - phone: $phone")
}

Si hacemos email con un valor por defecto:

printDetails("Juan", "123 123")

Esta función nos genera erro, pues el tercer valor phone, no tiene asignado un valor por defecto y es requerido. Por otro lado, por la forma de la variable, el valor indicado corresponde a phone, más el método no sabe como distinguir que es el tercer parámetro. Esto se soluciona utilizando el valor de los parámetros:

printDetails("Juan", phone="123 123")

Al tener el nombre de los parámetros, se pueden ingresar los parámetros en un orden indistinto:

printDetails(name="Juan", phone = "123 123")
printDetails(phone = "123 123", name="Juan" )

Esto es util cuando tengo funciones con múltiples parámetros. Usar el nombre de los parámetros permite ser más expresivo con nuestro código.

No es recomendable tener funciones con cinto o seis parámetros, para esto es recomendable tener un objeto que agrupe este conjunto de parámetros, pero en caso de que tengamos este tipo de funciones. El uso de los nombres es muy útil.

fuente:https://www.clubdetecnologia.net/cursos/programacion-con-kotlin/funciones-default-y-parametros-con-nombre/

Comparto mi solucion para quitar el espacio adicional en caso de que segundo nombre este vacío =D

fun printWholeName(firstName: String, secondName: String = "", surName: String) {
    println("My name is $firstName ${if (secondName.isNotEmpty()) "$secondName " else ""}$surName")
}



para la funcion imprimirNombre, si queremos usar otro parametro como el segundo nombre, lo que podriamos hacer, es una sobrecarga de metodos, donde le pasamos el parametro segundo nombre

Podemos retornar o imprimir el nombre de forma condicional dependiendo si se recibe el segundo nombre o no dentro de los parámetros.

fun printName(firstName : String, middleName : String  = "", lastName : String) {
    val fullName = if (middleName.isNotEmpty()) "$firstName $middleName $lastName" else "$firstName $lastName"
    println(fullName)
}

Código de la clase

fun main(args : Array<String>){
    //parametros nombrados, utiles cuando los datos son del mismo tipo
    imprimirNombre(nombre = "David", apellido = "Cervantes")

}

//podemos definir valores por defecto
fun imprimirNombre(nombre: String, segundoNombre:String = "", apellido: String) {
    println(nombre + " " + segundoNombre + " " + apellido)
}
fun main(args : Array<String>){
    imprimirNombre(nombre = "Cristian", apellido = "Restrepo")
}

fun imprimirNombre(nombre: String, segundoNombre:String = "", apellido: String) {
    println(nombre + " " + segundoNombre + " " + apellido)
}

Creo que algo importante mencionar con los parámetros por default, es que si no se va a usar alguno, se deben usar los parámetros nombrados.

Si lo usan solo así, marcará error.

imprimirNombre("Hector", "Hernandez")

Un pequeño aporte sobre esta clase

fun main(args: Array<String>) {
    var result = add(5, 10)
    println(result)
}
fun add(firsNumber: Int, secondNumber: Int) : Int{
    return firsNumber + secondNumber
}