En este tema hablaremos de las funciones en kotlin, también llamadas métodos en otros lenguajes como por ejemplo java. Una función no es más que un conjunto de instrucciones que realizan una determinada tarea y la podemos invocar mediante su nombre.
Declarando funciones
Las funciones se declaran usando la palabra clave fun, seguida del nombre del método, los paréntesis donde declararemos los valores de entrada y unas llaves que limitan la función.
fun main(args: Array<String>) { showMyName() showMyLastName() showMyAge() } fun showMyName(){ println("Me llamo Aris") } fun showMyLastName(){ println("Mi Apellido es Guimerá") } fun showMyAge(){ println("Tengo 24 años") }
Si os fijáis en el código anterior, tenemos 4 métodos. 3 de ellos están destinados para una sola función (mostrar nombre, edad y apellidos) pero no se ejecutarán a no ser que sean llamados. Por ello el cuarto método que es el que se ejecutar el código, los llamará en el orden que le pongamos. Dándonos un resultado así.
Funciones con parámetros de entrada
Ahora vamos a ver las funciones con parámetros de entrada, que son iguales, pero al llamarlas habrá que mandarle las variables que necesite.
fun main(args: Array<String>) { showMyInformation("Aris", "Guimerá", 24) } fun showMyInformation(name: String, lastName: String, age: Int){ println("Me llamo $name $lastName y tengo $age años.") }
Como se puede observar, tiene tres parámetros de entrada, la forma de declararlos es muy fácil el nombre de la variable, seguida de dos puntos y el tipo de variable, aquí si es obligatorio definir el tipo.
Obviamente al llamar al método podemos pasarle variables recuperadas de otros métodos y demás.
Funciones con parámetros de salida
Nos queda por ver como una función puede devolver un resultado o lo que haga nuestro método. La única limitación es que solo se puede devolver un parámetro, aunque para eso tenemos los métodos (ya lo veremos más tarde).
fun main(args: Array<String>) { var result = add(5, 10) println(result) } fun add(firsNumber: Int, secondNumber: Int) : Int{ return firsNumber + secondNumber }
Como el ejemplo anterior añadimos los parámetros de entrada pero esta vez, al cerrar los paréntesis pondremos el tipo de variable que debe devolver nuestra función. Luego la función hará todo lo que tenga que hacer y cuando tenga el resultado, lo devolveremos con la palabra clave return.
Si el método es muy fácil, podemos evitar las llaves y simplificar la función un poco más.
fun add(firsNumber: Int, secondNumber: Int) : Int = firsNumber + secondNumber
Continúa con el curso: Capítulo 7 – Instrucciones if-else en Kotlin
Hola, En el penúltimo código has puesto:
var result = add(5, 10)
println(resul)
Creo que te ha faltado la «t» o estás haciendo referencia a otra variable llamada «resul» ??
Gracias por el tutorial 🙂
Buenas Alfonso, tienes toda la razón, me falta una t.
Ya está corregido, muchas gracias 🙂
No me gusto el ultimo ejemplo.
Paso uno que hice para practicar, calculo de Compra+Gastos de envió.
fun main(arg: Array) {
var totalAPagar: Float = calcCompra(1134.60f, 289.20f)
print(«El total a pagar es: $$totalAPagar»)
}
fun calcCompra(montoCompra: Float, gastosEnvio: Float) : Float{
return montoCompra + gastosEnvio
}
Buenas tardes compañeros de aprendizaje, si alguien puede ayudarme con este codigo se lo agradecería ya que no encuentro el error.»Expecting a top level declaration», gracias.
fun main(args : Array) {
val animal=»Dog»
if (animal==»Dog»){
println(«Es un perro»)
}else if(animal==»cat»){
}else if(animal==»bird»){
println(«Es una pájaro»)
}else {
println(«No es un animal conocido»)
}
}
Olvideo colocar en la primera linea esto: fun main(args : Array), aún así no funciona.
Buenas, puedes poner el código completo del fichero?
Hola Aris, he estado estudiando Kotlin y la verdad no he podido resolver este dilema, no se si quiera ayudarme, le paso el código:
PD. gracias por esta buenísima página…
open class RegistroP(){
var nombre: String=»»
var apellido: String=»»
var estCivil: String=»»
var vivienda: String=»»
constructor (nombre: String, apellido: String, estCivil: String, vivienda: String): this() {
this.nombre = nombre
this.apellido = apellido
this.estCivil = estCivil
this.vivienda = vivienda
}
fun imprimir(){
println(«Nombre: » + nombre)
println(«Apellido: » + apellido)
println(«Estado Civil: » + estCivil)
}
}
class MayorEd():RegistroP(){
var edad: Int=0
constructor (edad: Int): this() {
this.edad = edad
}
fun edad(){
if (edad>=18)println(«Es mayor de edad») else println («No es mayor de edad»)
}
}
fun main(args: Array){
var registro =RegistroP(«», «», «», «» )
println(«Digite nombres:»)//Aqui mi dilema, no se cómo hacer para que una clase reciba asignacion
var registro.nombre = readLine()!!//desde teclado
println(«Digite apellidos:»)
var registro.apellido = readLine()!!
println(«Digite estado civil: (Casada/Soltera/Viuda/Separada)»)
var registro.estCivil = readLine()!!
println(«Digite tipo vivienda: (Arriendo/Propia/Familiar)»)
var registro.vivienda = readLine()!!
registro.imprimir()
var valEdad= MayorEd(15)
valEdad.vivienda=»Arriendo»
println(«Estado de vivienda: » +valEdad.vivienda)
valEdad.edad()
}
Buenas, para empezar analicemos unas cuantas cosas.
Fíjate que cada vez que recibes un parámetro lo estás guardando en una variable nueva, por lo que cuando llamas a imprimir el objeto que quieres imprimir está vacío.
Creas tu objeto RegistroP:
var registro:RegistroP = RegistroP()
Una vez creado, cuando quieres almacenar la información que recibes del usuario no puedes hacer por ejemplo var registro.estCivil porque estás diciéndole que cree una variable nueva con la palabra reservada var.
Como ya has creado un objeto llamado «registro» por ejemplo, simplemente asígnale el valor:
registro.apellido = readLine()!!
Sin el var delante.
Y llama a imprimir cuando tengas todos los datos rellenos.
Un saludo
Muchas gracias Aris, tienes razón ese es el error, voy a ahorrar para meterme en tu curso para poder pulirme mejor en esto…
Me alegro que funcione, te recomiendo esperar un poco que en breve habrán muchas novedades 😉
Muchas gracias, bueno mientras sigo dándole a lo empírico…
Me da error con args en la función main me pone esto:
warning: parameter ‘args’ is never used. Y no me muestra nada en pantalla con println y lo de la concatenación en las variables de entrada no se me pone en verde y depues no me muestra tampoco nada pero al final de todo me pone esto: Process finished with exit code 0, que teóricamente significa que esta bien no? Y después de todo esto se me ha ocurrido hacer ctrl + c, ctrl + v, en tu código de la variable de entrada y también me daban todos estos errores anteriores
Lo primero que debemos entender es la diferencia entre un error y un warning. Un error sale en rojo y nos avisa de que no vamos a poder compilar la aplicación. Un warning se muestra amarillo y son solo avisos que nos ayudan a optimizar el código.
¿Puedes añadir el código para ver cual es el problema?
Un saludo.
Al final he copiado el tuyo de aquí de funciones de parámetros de salida y el de funciones de parámetro de entrada primero he hecho mis pruebas y después he probado con tu código y me seguía dando la advertencia.
Es normal que te salga el warning, pero no debería generar ningún tipo de problema para el ejemplo que hemos visto.
Si no he entendido mal en el ejemplo de las funciones con parámetros de entrada al ejecutar el código se debería mostrar el texto escrito dentro del println y las variables concatenadas. Pero a mí solo me muestra el warning.
Podrías hacer un screenshot donde se vea el código y el terminal que muestra el warning?.
Buenas, una duda. En el último ejemplo donde se explican los parámetros de salida ¿con qué finalidad se utiliza esto?
Buenas, muchas veces necesitas desde varios sitios recuperar un texto, objeto, número, y lo más sencillo es llamar a una función con parámetros de salidas.
holaa en el ultimo ejemplo del video que esta simplificado me salta » resultado nuna usamos»