Clases en Kotlin: máxima potencia con el mínimo esfuerzo (KDA 03)
Antonio Leiva

Las clases en Kotlin están simplificadas al máximo con el fin de escribir la mayor cantidad de código en el menor espacio posible.

Te voy a enseñar cómo trabajar con una clase en Kotlin de forma rápida.

Si quieres empezar hoy, te recomiendo que le eches un vistazo a mi training gratuito, donde tendrás una hora y media de contenido para saber cuáles son tus siguientes pasos a dar para convertirte en un experto en Kotlin.

Training Revienta tu productividad en Android con Kotlin

1. Declara la clase

class Person

Tan fácil como añadir la palabra reservada class y el nombre de la clase. No hace falta pongas llaves si no va a contener nada.

Spoiler: ¿Has visto que no lleva public delante? Eso es porque en Kotlin todo es público por defecto.

2. Inclúyele properties

En Kotlin no existen los campos como tal. Una clase tiene properties.

Una property vendría  sustituir a un campo + getter + setter, de tal forma que no necesitamos más que lo siguiente:

class Person {
    var name = "Name"
    var surname = "Surname"
}

Si quieres tener un setter personalizado, también puedes, por supuesto:

var name = "Name"
    set(value) {
        name = "Name: $value"
    }

Spoiler: como puedes ver, se pueden utilizar variables directamente en los Strings (?), sin necesidad de utilizar el típico String.format

¿Te has dado cuenta de la cantidad de código innecesario que evitas con esto? Te ahorras todos los getters y los setters si no son estrictamente necesarios.

3. Añade un constructor

Por defecto, sólo se utiliza un constructor por clase. Se pueden añadir varios, pero eso lo veremos en siguientes artículos.

Al haber sólo un constructor, esto simplifica mucho la nomenclatura:

class Person(val name: String, val surname: String)

¿Qué ocurrió aquí?

  1. ¡Desaparecieron las properties! En realidad siguen ahí, sólo que si anotas los parámetros del constructor con varval, las properties se generan inline.
  2. El constructor se escribe justo después de la definición de la clase. No hace falta crear métodos extra y asignar los valores a las properties.

4. Ya puedes crear funciones dentro de la clase

Y utilizar las properties en ellas de la forma que quieras:

class Person(val name: String, val surname: String) {
    fun getFullName() = "$name $surname"
}

Como ves, las funciones tienen una forma muy contraída cuando se les puede asignar una valor directamente. Sin embargo, sigue existiendo una forma muy similar a la de Java:

fun getFullName(): String {
    return "$name $surname"
}

En ese caso, hay que especificar el tipo de retorno.

5. Todo en Kotlin es cerrado por defecto

Es decir, que no se puede extender, ni los hijos (en caso de que se permita la extensión) no pueden sobrescribir las funciones, a no ser que se indique con la palabra reservada open:

open class Person(val name: String, val surname: String)
class Cop(surname: String) : Person("Mr", surname)

¿Ves cómo se llama al constructor del padre? ¡Sencillo y limpio!

Conclusión

Si todo esto te apasiona tanto como a mí, te animo a que te apuntes a mi training gratuito donde te contaré todo lo que necesitas para aprender a crear tus Apps Android en Kotlin desde cero.

Quizá también te interese…

Kotlin 1.5.0 : Las 5 novedades que puedes empezar a usar hoy

Kotlin 1.5.0 : Las 5 novedades que puedes empezar a usar hoy

Kotlin 1.5.0 ya está aquí, y como siempre trae una serie de novedades que te van a interesar muchísimo. Cabe destacar que a partir de ahora, de acuerdo las nuevas versiones de Kotlin se lanzarán cada 6 meses, independientemente de las nuevas funcionalidades que...

¿Qué es Kotlin y para qué sirve?

¿Qué es Kotlin y para qué sirve?

Kotlin es un lenguaje de programación de código abierto creado por JetBrains que se ha popularizado gracias a que se puede utilizar para programar aplicaciones Android. Pero si has llegado hasta aquí pensando que Kotlin solo se puede usar en Android, lo que te voy a...

2 formas de recolectar Flows en la UI que SÍ funcionan

2 formas de recolectar Flows en la UI que SÍ funcionan

En la serie de artículos sobre Programación Reactiva con Flow hemos visto muchos conceptos, y hemos aprendido cómo aplicarlos al desarrollo Android. Pero hay algo que no hemos hecho del todo bien. Esto es la recolección de Flows desde la Activity (o el Fragment, en...

9 Comentarios

  1. Eduardo

    Hola una pregunta.
    Es una buena practica en kotlin dejar las properties publicas a diferencia de java que se dejan los atributos como private y todo se accede por medio de los properties?

    Responder
    • Antonio Leiva

      Sí, porque las properties equivalen a un campo + getter + setter en Java. Así que si dejas una property pública, en realidad lo que dejas público es su getter (y su setter si es var)

      Responder
      • Eduardo

        Muchas gracias por tu respuesta, un saludo.

        Responder
  2. Dalia

    Hola yo estoy interesada pero tengo muy poco conocimiento estoy siguiendo estas clases y se me está haciendo muy cómodo entender el lenguaje kotlin

    Responder
  3. Luis Angel

    ¿Es necesaria la identación para un setter? ¿Qué pasa con los builders que te deben devolver la misma instancia al setear un dato?

    ¿Por qué usar format si puedes recibir un Object y concatenarlo? Ya que el operador ‘+’ se encarga de usar el toString del object

    ¿Por qué se tendrìan getters and setters en Java para campos públicos? ¿Qué pasa si quieres que la clase modifique una property pero no que otras clases lo hagan? ¿Si se declara val para no tener el setter como se modificaría su valor siendo inmutable?

    No entendí, ¿Se pueden anotar los parámetros de un constructor sin var, ni val?

    ¿Si los parámetros de un constructor son, val, Los campos de una clase, son var o val?

    ¿Qué pasa cuando quieres refactorizar una variable referenciada en una cadena, se cambia automáticamente o de forma manual?

    No entendí, ¿open es para que la clase pueda extenderse o para que se puedan sobreescribir métodos? ¿Qué pasa con los métodos privados, protegidos y abstractos de Java? A veces sólo quieres que algunos puedan sobreescribirse

    Responder
    • Antonio Leiva

      – Sí es necesaria la indentación. Los builders los tienes que construir como en Java, aunque en Kotlin no es muy necesario porque existe la función apply.
      – Se usa String.format porque queda más legible cuando hay varias variables
      – En Java no tiene sentido usar getters para campos públicos. Pero puede ser que hayas hecho un campo público y de repente necesites el setter. Habría que hacerlo privado y refactorizar todo el código para usar ese setter. Si una property es pública, el setter está disponible para todo el mundo, igual que en Java. Si la declaras como val, no se puede modificar su valor.
      – Si no usas var ni val en un constructor, luego tienes que usar ese valor dentro para algo (al inicializar alguna property, o en el bloque init), si no no tiene sentido tenerlo.
      – Si refactorizas una variable que hay en una string, el IDE es capaz de detectarlo si usas su refactor.
      – Open es para que la clase pueda extenderse. Además, si hay algún método que quieras extender, necesitas marcar también el método como open.

      Responder
  4. Mario

    Buen día, das clases personalizadas por hora? Ya compré tu libro pero quiero saber si esta esa opción también

    Responder

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de Antonio Leiva Gordillo, con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *