Spanish (Español) translation by Javier Salesi (you can also view the original English article)
Introducción
Desde que Apple lanzó el lenguaje de Programación Swift para iOS, muchos desarrolladores Android han querido un lenguaje similar para el desarrollo en Android. Si eres uno de esos desarrolladores, te va a encantar Kotlin, un lenguaje JVM que es notablemente similar a Swift.
Kotlin es un lenguaje tipado estáticamente, desarrollado por JetBrains, cuya sintaxis es más expresiva y concisa que la de Java. Con características como funciones orden superior, expresiones lambda, sobrecarga de operadores, plantillas de string, y más, Kotlin tiene mucho más que ofrecer que Java. Debido a que Java y Kotlin son altamente interoperables, pueden ser usados juntos en el mismo proyecto.
Si eres un programador competente en Java, podrás aprender Kotlin en muy poco tiempo. En éste tutorial te mostraré cómo usar las palabras reservadas más frecuentemente usadas.
Requisitos Previos
Para continuar, necesitarás:
- un buen entendimiento de Java.
- la versión más reciente del compilador de Kotlin. Alternativamente, podrías usar el patio de juegos online.
1. Clases
Para crear una clase en Kotlin, tienes que usar la palabra reservada class
. Por ejemplo, aquí te muestro como crear una clase llamada Person:
class Person { }
Agregando Propiedades
Una clase generalmente tiene propiedades y funciones miembro (también llamados métodos). Agreguemos dos propiedades a la clase Person
, name de tipo String
y age de tipo Int
.
var name: String = "" var age: Int = 0
Como puedes ver, la sintaxis para crear variables es un poco diferente de la de Java. Para crear una variable en Kotlin, debes usar la palabra reservada var
. Sin embargo, si quieres que tu variable sea una variable de solo lectura/una única asignación, mejor utiliza la palabra reservada val
.
Por el bien de la seguridad null, Kotlin también hace una distinción entre variables que pueden ser null
y variables que nunca pueden ser null
. En nuestro ejemplo previo, ambas variables name
y age
nunca pueden ser null
. Si son null, el compilador emitirá un error.
Para crear una variable que puede contener null
, necesitas añadir un ?
después del tipo de la variable. Por ejemplo:
var college: String? = null
Ahora que tenemos una clase, crear una instancia de ella es fácil:
var jake = Person()
No, Kotlin no tiene la palabra reservada new
. Una vez que la instancia ha sido creada, puedes accesar a sus propiedades de la misma forma que lo harías en Java:
jake.name = "Jake Hill" jake.age = 24 jake.college = "Stephen's College"
Usar Constructores
Inicializando las propiedades individuales de nuestra instancia en la forma en que lo acabamos de hacer no es una buena práctica en la codificación. Una mejor forma de hacer ésto sería utilizando un constructor. La sintaxis de Kotlin para crear tal constructor es muy compacta:
class Person(var name: String, var age: Int, var college: String?) { }
De hecho, si no tienes nada que agregar a tu clase, no necesitas las llaves. El siguiente código funciona bien:
class Person(var name: String, var age: Int, var college: String?) var jake = Person("Jake Hill", 24, "Stephen's College")
Podría ya ser obvio para tí que no hay forma de que puedas agregar código personalizado a éste constructor. Éste constructor, que es parte del encabezado de la clase, es llamado el constructor primario.
Para agregar más constructores a tu clase, conocidos como constructores secundarios, deberías usar la palabra reservada constructor
. Los constructores secundarios deberían delegar al constructor primario usando la palabra reservada this
. Agreguemos un constructor secundario a nuestra clase que inicializa el valor de una propiedad llamada email:
class Person(var name: String, var age: Int, var college: String?) { var email: String = "" constructor(name:String, age:Int, college: String?, email: String) : this(name, age, college) { this.email = email } }
Para crear una instancia que usa el constructor secundario, escribes algo como ésto:
var jake = Person("Jake Hill", 24, "Stephen's College", "jake.hill@example.com")
Agregar Funciones Miembro
En Kotlin, las funciones son creadas usando la palabra reservada fun
. Agreguemos una función miembro simple llamada isElegibleToVote que regrese un valor Boolean
:
fun isEligibleToVote(): Boolean { // If age is greater or equal to 18 // return true return age >= 18 }
Nota que el tipo de valor retornado se indica al final del encabezado de la función. Puedes llamara a éste método de la misma forma que lo harías en Java:
jake.isEligibleToVote()
Crear Extensiones
Kotlin te permite extender una clase al añadir funciones adicionales a ella sin modificar su definición original. Tales funciones son conocidas como extensiones. Los nombres de éstas funciones deberían ser precedidas por los nombres de las clases de las que extienden.
Por ejemplo, para agregar una extensión llamada isTeenager a la clase Person
, escribe el siguiente código afuera de la clase:
fun Person.isTeenager(): Boolean { // If age falls in the range // 13-19 return true return age in 13..19 }
Ésta característica es especialmente útil cuando quieres extender clases que no pertenecen al código base de tu proyecto. Por ejemplo, el siguiente fragmento de código agrega una extensión containsSpaces a la clase String
:
fun String.containsSpaces(): Boolean { return this.indexOf(" ")!=-1 }
Crear Clases Derivadas
Es importante mantener lo siguiente en mente cuando se crea una clase derivada:
- Debes usar un
:
en lugar de la palabra reservadaextends
de Java. - El encabezado de la clase base debe tener la anotación
open
. - Si tu clase base tiene un constructor que toma parámetros, tu clase derivada debe inicializar ésos parámetros en el mismo header.
Creemos una clase llamada Employee que deriva de Person
:
open class Person(var name: String, var age: Int, var college: String?) { ... } class Employee(name: String, age: Int, college: String?, var company: String) : Person(name, age, college) { }
Sobreescribir Funciones Miembro
En Kotlin, tienes que señalar explícitamente que una función miembro puede ser sobreescrita al usar la anotación open
en el encabezado del método en la clase base. En la clase derivada, funciones abiertas pueden ser sobreescritas usando la anotación override
.
Por ejemplo, para sobreescribir el método isElegibleToVote
, agregas el siguiente fragmento de código a la clase Employee
:
override fun isEligibleToVote(): Boolean { // Always return true return true }
Crear Métodos Estáticos
Kotlin no te permite crear métodos estáticos. Sin embargo, si te permite crear un paquete de funciones nivel que no pertenecen a ninguna clase.
El método main
es quizá el método estático mejor conocido. Si quieres agregar el método main
a un paquete llamado com.tutsplus.code.tutorial, entonces tu código se vería así:
package com.tutsplus.code.tutorial fun main(args:Array<String>) { }
2. Funciones
Ya aprendiste cómo crear funciones sencillas en los ejemplos previos. La sintaxis que usaste para crear esas funciones fue muy similar a la de Java. Kotlin, sin embargo, te permite hacer mucho más con funciones.
Crear Funciones de Expresión sencillas
Si una función regresa el valor de una expresión sencilla, entonces puedes usar el operador =
después del encabezado de la función seguido por la expresión para definir la función.
Por ejemplo, para agregar un método a la clase Person
que regresa true
si la persona es octogenaria, deberías escribir:
fun isOctogenarian(): Boolean = age in 80 .. 89
Como puedes ver, ésta sintaxis corta es más compacta y legible.
Funciones de Orden Superior y Expresiones Lambda
Funciones de orden superior son funciones que pueden regresar funciones o aceptar funciones como parámetro. Una expresión lambda, por otro lado, es sólo una función que no tiene nombre. Generalmente, expresiones lambda y funciones de superior son usadas juntas.
Considera el siguiente ejemplo que demuestra la sintaxis de una expresión lambda:
{x, y -> x+y}
Ésta es una simple expresión lambda que toma dos parámetros, x
y y
, y regresa su suma. Como podrías haber supuesto, los parámetros de la función son listados antes del operador ->
y el cuerpo de la función comienza después del operador ->
. Ésta expresión lambda puede ser asignada a una variable y usada como sigue:
val sumLambda: (Int, Int) -> Int = {x,y -> x+y} val actualSum = sumLambda(3,4)
Nota que el tipo de la variable que contiene la expresión lambda especifica los tipos de sus parámetros y su valor de retorno.
Crear una función de orden alta que puede aceptar la expresión lambda de arriba como un parámetro es igual de fácil. Por ejemplo, para crear una función que duplique el resultado de la expresión lambda, escribirías:
fun doubleTheResult(x:Int, y:Int, f:(Int, Int)->Int): Int { return f(x,y) * 2 }
Puedes llamar a ésta función como sigue:
val result1 = doubleTheResult(3, 4, sumLambda)
Alternativamente, puedes pasar la expresión lambda directamente a la función de orden superior:
val result2 = doubleTheResult(3, 4, {x,y -> x+y})
Las expresiones lambda son con frecuencia usadas con arrays (arreglos). Por ejemplo, considera el siguiente array de valores Int
:
val numbers:Array<Int> = arrayOf(1, 2, 3, 4, 5)
Si quieres elevar al cuadrado el valor de cada elemento en el array, puedes usar la función map
junto con una expresión lambda como sigue:
val squaredNumbers = numbers.map({x -> x * x}) // Result will be a new array that contains // 1, 4, 9, 16, 25
3. Rangos
Expresiones de rango son usadas muy frecuentemente en Kotlin. Ya las usaste cuando creaste los métodos isTeenager
y isOctogenarian
.
Para crear un rango, todo lo que necesitas es el operador ..
.
val r1 = 1..5 // This range contains the number 1, 2, 3, 4, 5
Para crear un rango en orden descendente, usa mejor la función downTo
.
val r2 = 5 downTo 1 // This range contains the number 5, 4, 3, 2, 1
Si no quieres el paso que sea 1, puedes especificar un valor personalizado usando la función step
.
val r3 = 5 downTo 1 step 2 // This range contains the number 5, 3, 1
Verás más expresiones de rango posteriormente en éste tutorial.
4. Palabras reservadas condicionales
if
En Kotlin, if
es una expresión que regresa diferentes valores dependiendo de si la condición ha sido satisfecha. El siguiente ejemplo ilustra cómo funciona ésto.
var age = 20 val isEligibleToVote = if(age > 18) "Yes" else "No" // isEligibleToVote will now be set to "Yes"
when
La expresión when
es equivalente a switch
de Java. Sin embargo, es mucho más versátil. Por ejemplo, considera el siguiente ejemplo.
val age = 17 val typeOfPerson = when(age){ 0 -> "New born" in 1..12 -> "Child" in 13..19 -> "Teenager" else -> "Adult" } // typeOfPerson will now be set to "Teenager"
Como puedes ver, when
no puede tomar solo valores solos sino también expresiones como sus condiciones.
5. La palabra reservada Looping
for.. in
En Kotlin, puedes usar el bucle for..in
para iterar a través de arrays, colecciones, y cualquier cosa que proporcione un iterador. Su sintaxis es casi idéntica a la de Java, excepto por el uso del operador in
en lugar del operador :
de Java. El siguiente ejemplo te muestra cómo iterar a través de un array de objetos String
.
val names = arrayOf("Jake", "Jill", "Ashley", "Bill") for (name in names) { println(name) }
Con la ayuda de la expresiones de rango, puedes hacer que este bucle se comporte como un tradicional bucle for
de estilo-C.
for (i in 0..9) { println(i) } // Behaves exactly like // for(int i=0;i<10;i++)
while
y do..while
La sintaxis de los bulces while
y do..while
en Kotlin es idéntica a la sintaxis usada en Java. Por ejemplo, el siguiente código Kotlin itera en un array de objetos String
usando un bucle while
:
val names = arrayOf("Jake", "Jill", "Ashley", "Bill") var i = names.size() while(i>0) { println(names[--i]) }
6. Plantillas de String
Kotlin te deja incrustar variables y expresiones en strings al encerrarlas en un par de llaves, precedidas de un símbolo $
. Por ejemplo:
val name = "Bob" println("My name is ${name}") // Prints "My name is Bob" val a = 10 val b = 20 println("The sum is ${a+b}") // Prints "The sum is 30"
Conclusión
En éste tutorial, aprendiste las bases del lenguaje de programación Kotlin. Aunque cubrimos varios constructores aquí, Kotlin tiene muchos mas que ofrecer. De hecho, a partir de Junio de 2015, Kotlin aún está disponible solamente como una vista previa. Es probable ver varias mejoras y nuevas funcionalidades en los próximos meses.
Si quieres saber como usar Kotlin en Android Studio, entonces echa un vistazo a Como Usar Kotlin en Tus Proyectos Android. Para aprender mas sobre el lenguaje Kotlin, recomiendo visitar la documentación de Kotlin.
¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post