El gran libro de Kotlin para programadores de back end - Luís Criado-Fernández - E-Book

El gran libro de Kotlin para programadores de back end E-Book

Luis Criado Fernández

0,0
22,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Si como programador de back end quiere evolucionar al mismo tiempo que aprovechar todo su código en Java, sin duda, debe empezar por adoptar Kotlin, un nuevo lenguaje de programación, equiparado a Java en el mundo Android. Emplear profesionalmente un nuevo lenguaje de programación puede ser un problema en la empresa en la que trabaja, sobre todo si se tiene invertido mucho código. No obstante, Kotlin permite reutilizar todas las librerías Java que ya disponga y construir back ends de forma sencilla. Este libro será su gran aliado si quiere adentrarse en Kotlin, gracias a él: "Tendrá ejemplos originales y estimulantes. "Se acercará rápidamente al manejo del lenguaje mediante funciones y clases. "Tratará una gran variedad de tipos de ficheros. "Practicará con todo tipo de bases de datos utilizando dockers. "Revisará el manejo de cadenas y sus posibilidades, y realizará conversiones de cualquier base y funciones hash. "Explorará la programación asíncrona con dos enfoques: thread y corrutinas. "Implementará y desplegará un servicio API REST, ayudado de ktor. Además, en la parte inferior de la primera página del libro encontrará el código que le permitirá acceder de forma gratuita a los contenidos adicionales del libro en www.marcombo.info. Con él, ahorrará mucho tiempo, pues podrá clonar el repositorio desde GitHub y mucho más. El autor es Luis Criado-Fernández, doctor e ingeniero en telecomunicaciones, cuyo talento sobresaliente es la programación. Siempre se ha mantenido cerca de los avances en este campo y ha prestado especial atención a los nuevos lenguajes. Cuando descubrió Kotlin, quedó fascinado y se vio envuelto en un devorador entusiasmo que lo instó a estudiarlo, experimentarlo y plasmarlo en esta obra. No se quede atrás, con este libro conocerá todo lo que necesita saber sobre Kotlin y estará a la última sin perder su código Java. Ser un programador actualizado, está en sus manos.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 291

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



El gran libro de Kotlin

para programadores de back end

Luis Criado-Fernández

El gran libro de Kotlin

para programadores de back end

Luis Criado-Fernández

Esta obra ha recibido una ayuda a la edición del Ministerio de Cultura y Deporte del

Gobierno de España, por el Plan de Recuperación,

Transformación y Resiliencia, Financiado por la Unión Europea (NextGenerationEU)

El gran libro de Kotlin para programadores de back end

Primera edición, 2023

© 2023 Luis Criado-Fernández

© 2023 MARCOMBO, S.L.

www.marcombo.com

Diseño de la cubierta: ENEDENÚ DISEÑO GRÁFICO

Corrección: Héctor Tarancón

Directora de colección: M.ª Rosa Castillo

Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra

ISBN del libro en papel:978-84-267-3543-0

ISBN del libro electrónico: 978-84-267-3604-8

Producción del ePub: booqlab

DEDICATORIA

Muchas han sido en mi familia las personas con las que he compartido experiencias y aprendizaje en el campo de la programación. De manera que esta obra se la quiero dedicar a todas ellas.

A mi hermano Alfonso, con el que comencé mi aventura en este mundillo de la implementación disfrutando de nuestras primeras clases de programación, que impartía el Colegio de Ingenieros Técnicos de Obras Públicas de Madrid, allá por el año 1985… A mi hermana Belén y a mi mujer Amor, con las que compartí mucho tiempo dedicado al aprendizaje de multitud de lenguajes y técnicas de programación (Modula-2, Matlab, ensamblador 68000, C, C++ y Java) durante nuestros estudios de Ingeniería de Telecomunicaciones. A mi hermano Alberto, que aunque no hemos programado juntos, me ha ayudado siempre al planteamiento y análisis general de los productos que diseñábamos: software para agricultores de invernaderos en nuestro periodo en Agroinformática (en Almería).

A mi primo Rafael Fernández Fernández, que también tuvo que abordar varios lenguajes de programación en sus estudios de Ingeniería Industrial, y a Sergio Jiménez Díez, quien está desarrollando una brillante carrera profesional en esta disciplina.

Y… aunque no sea estrictamente familia, como si lo fuera, amigo desde que éramos críos; a Luis Pinés Marcos, con quien siempre he compartido esta afición y que él ha aplicado a nivel profesional con gran éxito. Recuerdo que incluso, siendo muy jóvenes, realizamos alguna travesura inocua que hoy no supone ningún problema confesar, aunque conviene no desvelar el centro comercial concreto que vendía los ordenadores, en los que programamos, in situ, en varios equipos una rutina que asociaba letras aleatorias a las teclas del teclado, haciendo imposible su utilización: para tranquilidad del lector se solucionaba reiniciando los equipos.

A mi tío Carmelo Criado, con el que he conversado muchísimo e investigado sobre informática en general, sobre todo en mi periodo juvenil. Con él descubrí lenguajes tan interesantes como Clipper, que posteriormente utilicé varios años a nivel profesional.

Y por supuesto, a mis padres y a mi hermana Terica: os llevo en mi corazón.

CONTENIDO

Prólogo

Sobre este libro

1. Introducción

2. Objetivo y estructura

3. IDE para Kotlin

Experimentando con Kotlin en back end

4. Poco código y grandes resultados

4.1 El primer programa en Kotlin

4.2 Programa para escribir varias líneas de un fichero de texto

4.3 Programa para leer líneas de un fichero de texto

4.4 Programa para contar las líneas de un fichero

4.5 Programa para copiar un fichero

4.6 Descargar un fichero

4.7 Acceso a un recurso desde código

5. Funciones

5.1 Funciones que no requieren parámetros de entrada y salida

5.2 Funciones con parámetro de entrada y sin parámetro de salida

5.3 Funciones con parámetro de entrada y salida

5.4 Funciones con parámetro por defecto

5.5 Funciones con parámetros variables

5.6 Funciones con parámetros genéricos

5.7 Funciones de extensión

5.8 Funciones infix

5.9 Expresión y funciones lambda

5.10 Funciones de orden superior

6. Clases

6.1 Definición de una clase y compatibilidad con Java

6.2 Experimentando con métodos

6.2.1. Ejemplos de métodos sin parámetro de entrada y con parámetro de salida

6.2.2. Ejemplos de métodos privados, parámetros variables, con parámetro de entrada y salida

6.3 Tipos de clases

6.3.1 Data: clases de datos

6.3.2 Enum: clases de valores enumerados

6.3.3 Clases heredables

6.3.4 Tipo interfaz

6.3.5 Clase abstracta

6.3.6 Clases anidadas: Inner

6.3.7 Objetos

6.3.8 Clases selladas

6.4 Alias

6.5 Visibilidad de los modificadores

6.6 Retrasar la inicialización de propiedades

6.6.1 Inicialización tardía para: var

6.6.2 Inicialización tardía para: val

7. Ficheros

7.1 Trazas o logs: log4j2

7.1.1 Configurando Log4j2 por consola

7.1.2 Configurando Log4j2 por fichero

7.2 Ficheros de texto

7.3 Ficheros properties

7.4 XML

7.5 RDF y OWL

7.6 EXCEL y CSVs

7.7 JSON y GSON

7.7.1 Serialización/deserialización JSON

7.8 ePub

7.9 Zip

7.10 FASTA (fa)

8. Bases de datos

8.1 Montar el entorno de pruebas

8.2 Relational DBMS

8.2.1 SQLite

8.2.2 MySQL

8.2.3 MariaDB

8.2.4 Oracle

8.3 NoSQL

8.3.1 Key-value Stores: Redis

8.3.1.1 Redis

8.3.2 Document Stores: MongoDB

8.3.2.1 MongoDB

8.3.3 RDF Stores: Apache Jena, Virtuoso y AllegroGraph

8.3.3.1 Apache Jena - TDB

8.3.3.2 AllegroGraph

8.3.3.3 Virtuoso y la DBpedia

9. Números

9.1 Los números árabes

9.2 Colecciones útiles para números

9.3 Determinantes

9.4 Sistemas de ecuaciones lineales

9.4.1 Regla de Cramer

9.4.2 Método de Gauss Jordan

9.4.3 Método Gauss-Seidel

9.5 Fibonacci

9.6 Números primos

9.7 Trigonometría

9.8 Cálculo de integrales

9.9 Transformada rápida de Fourier

10. Cadenas

10.1 Cadenas

10.2 Concatenar Strings

10.3 Acceso a los caracteres de un String

10.4 Sutil diferencia entre vacíos y/o espacios

10.5 Arrays de Strings

10.6 Maps

10.7 Rellenando Strings

10.8 Quitando espacios de un String

10.9 Obtener términos de un String

10.10 Subcadenas

10.11 Conversores

10.11.1 ASCII

10.11.2 Hexadecimal

10.11.3 Binario

10.12 Claves de acceso y funciones hash

11. Concurrencia

11.1 Thread

11.1.1 Hilo principal y secundarios

11.1.2 Sección crítica de código

11.1.2.1 Semáforos

11.1.2.2 Monitores

11.1.2.3 El problema del productor-consumidor

11.1.3 Comparativas de rendimiento

11.2 Corrutinas

11.2.1 Creación de corrutinas

11.2.2 runBlocking() gestinando corrutinas

11.2.3 Funciones de suspensión

11.2.4 Canales (Channel)

11.2.5 Comparativas de rendimiento

11.3 Recapitulando ideas

12. Despliegues en war de RESTful

12.1 Ktor

12.2 Conceptos: API, REST, SOA y RESTful

12.3 Arquitectura en tres capas

12.4 Capa de negocio

12.4.1 Acercamiento a Ktor

12.4.2 Configuraciones de servidores

12.4.3 EL proyecto Ktor-cap12

12.4.3.1 Serialización y deserialización

12.4.3.2 Enrutamiento

12.4.3.3 Sesiones

12.4.3.4 Autentificación

12.4.3.5 Recomendación de mejora

12.5 Despliegues

12.5.1 War en Tomcat 9

12.5.2 En docker, war en Tomcat 9

Anexos

Anexo 1. Docker

Anexo 2. Máquina virtual para descargar

Anexo 3. Referencia rápida de la sintaxis Kotlin

Anexo 4. Maven y Gradle

Anexo 5. Conceptos generales sobre Programación Orientada a Objetos

Anexo 6. DBeaver

Bibliografía

Sobre el autor

EJEMPLOS

prog 1: c4p1.kt - Hola mundo

prog 2: c4p2.kt - Hola mundo usando ficheros

prog 3: c4p3.kt - Escribe un fichero de texto y lo muestra por pantalla

prog 4: c4p4.kt - Leer fichero texto y visualizarlo

prog 5: c4p4.kt - (mejorado) Leer fichero texto y visualizarlo

prog 6: c4p4.kt - (mejora plus) Leer fichero texto y visualizarlo

prog 7: c4p4.kt - (robusto) Leer fichero texto y visualizarlo

prog 8: c4p5.kt - Contar líneas de un fichero de texto y lo muestra por pantalla

prog 9: c4p6.kt - Copiar un fichero

prog 10: c4p6.kt - Copiar un fichero

prog 11: c4p7.kt - Emulamos “cp” de Linux o “copy” de MS-DOS

prog 12: c4p8.kt - Descargar un fichero desde una URL

prog 13: c4p9.kt - Acceder a un recurso fichero en un proyecto Maven

prog 14: c5p1.kt - Ejemplo de función sin parámetros de entrada ni salida

prog 15: c5p2.kt - Ejemplo de función con parámetros de entrada y sin parámetros de salida

prog 16: c5p3.kt - Ejemplo de función con parámetros de entrada y salida

prog 17: c5p4.kt - Rango de las variables Int

prog 18: c5p5.kt - Ejemplo de función con parámetros por defecto

prog 19: c5p6.kt - Ejemplo de función con parámetro variable

prog 20: c5p6b.kt - Ejemplo parámetro variable estilo R

prog 21: c5p7.kt - Ejemplo de función con parámetro genérico

prog 22: c5p10.–t - Ejemplo de función extendida

prog 23: c5p11.kt - Ejemplo de función extendida con parámetro

prog 24: c5p8.kt - Ejemplo de función infix extendida de Int

prog 25: c5p9.kt - Ejemplo de función infix extendida de String

prog 26: c5p12.kt - Ejemplo de varias funciones lambda calculando el cubo de un número

prog 27: c5p13.kt - Otros ejemplos con funciones lambda

prog 28: c5p14.kt - Funciones de orden superior

prog 29: c6p1.kt - Primera clase en Kotlin

prog 30: c6p1.kt - Probamos la clase Autor

prog 31: Probamos la clase Autor desde Java

prog 32: Probamos la clase Autor con setter desde Java

prog 33: c6p1b.kt - Ejemplos de métodos sin parámetro de entrada y con parámetro de salida

prog 34: c6p2.kt - Métodos privados, parámetros variables, con parámetro de entrada y salida

prog 35: c6p3.kt - Manejando los métodos por defecto de una data class

prog 36: c6p6.kt - Ejemplo de clase Enum

prog 37: c6p7.kt - Clase Enum para prefijos del SI

prog 38: c6p7.kt - Conversor entre prefijos

prog 39: c6p8.kt - Ejemplo de clase heredable

prog 40: c6p9.kt - Ejemplo de interfaz

prog 41: c6p10.kt - Clase abstracta

prog 42: c6p11.kt - Clases Nested

prog 43: c6p12.kt - Clase Inner

prog 44: c6p6.kt - Ejemplo de la definición de un objeto Kotlin

prog 45: c6p20.kt - Uso de Companion Object como constructor

prog 46: c6p14b.kt - Clase sellada

prog 47: c6p15.kt – Ejemplo del modificador lateinit

prog 48: c6p16.kt - Ejemplo del modificador lazy

prog 49: c7p1.kt - Gestión de Log4j

prog 50: c7p2.kt - Gestión de ficheros de texto

prog 51: c7p5.kt - Gestión de ficheros properties

prog 52: c7p6.kt - Gestión de ficheros XML

prog 53: c7p7.kt - Creación de un modelo y volcado en un archivo

prog 54: c7p7b.kt - Leemos 10.000 instancias en OWL y las presentamos como tripletas.

prog 55: c7p8.kt - Poblar una ontología en OWL

prog 56: c7p9.kt - Lectura CSV

prog 57: c7p10.kt - Lectura CSV notación lambda

prog 58: c7p11.kt - Lectura de un fichero EXCEL

prog 59: c7p12.kt - Convertir XML en JSON

prog 60: c7p13.kt - Generar JSON desde Kotlin y acceso a sus elementos

prog 61: c7p14b.kt - JSON a través de GSON y clase de datos

prog 62: c7p15.kt - Procesado de JSON de Municipios (Open Data) de la Comunidad de Madrid

prog 63: c7p16 - Generar un ePub

prog 64: c7p17 - Generar ficheros zip

prog 65: c7p18 - Descomprimir un solo fichero de un zip

prog 66: c7p19 - Descomprime todos los zip de un directorio

prog 67: ficheroZip - Método comprimir - Agrupación de ficheros concretos

prog 68: bdr.kt - Clase abstracta de base de datos relacional

prog 69: sqlite.kt - Clase para SQLite

prog 70: mysql.kt - Para MySql

prog 71: mongoDB.kt - Clase para MongoDB

prog 72: JenaFuseki.kt - Acceso al servidor Fuseki

prog 73: allegroGraph.kt - Ejemplo de select al servidor de AllegroGraph

prog 74: c9p3.kt - Determinante de orden 2 u orden 3

prog 75: c9p4.kt - Determinante de cualquier orden

prog 76: c9p5.kt - Regla de Cramer

prog 77: c9p6.kt - Método Gauss Jordan

prog 78: p9c7.kt - Método Gauss Seidel

prog 79: p9c9.kt - Averiguar si un número es primo

prog 80: c9p11.kt: Potencia de un número

prog 81: c9p11.kt - Factorial de un número por recursividad

prog 82: c9p11.kt - Función coseno aproximado por Maclaurin

prog 83: c9p11b.kt - Señal sinusoidal

prog 84: c9p11.kt - Integral Riemann

prog 85: c9p15.kt - Transformadas de Fourier (FFT e IFFT)

prog 86: c11p0.kt - Formas de crear hilos

prog 87: c11p3.kt - Semáforos con hilos

prog 88: c11p4.kt - Monitores con hilos

prog 89: productorConsumidor.kt - Productor consumidor

prog 90: fasta_vesionHilos.kt - Productor para tratar el genoma humano

prog 91: fasta_vesionHilos.kt - Consumidor para tratar el genoma humano

prog 92: c11p6.kt - Primer ejemplo con corrutinas

prog 93: c11p6b.kt - Segundo ejemplo con corrutinas

prog 94: c11p8.kt - Ejemplo con corrutinas y funciones de suspensión

prog 95: c11p9.kt - Comunicación entre corrutinas: canales

prog 96: c11p10.kt - Corrutinas, funciones de suspensión: canales

prog 97: c11p11.kt - Primera versión con las corrutinas: genoma humano

prog 98: c11p11.kt - Productor genoma

prog 99: c11p11.kt - Consumidor genoma

prog 100: fasta_versionCorrutinas.kt - Consumidor genoma con corrutinas, canales, func. suspensión y pilas

prog 101: Serialization.kt - Serializar/deserializar JSON en Ktor

prog 102: RoutingVerbos.kt - PUT

prog 103: RoutingVerbos.kt - GET

prog 104: RoutingVerbos.kt - DELETE

prog 105: SesionEnServidor.kt - Sesiones en servidor por cabecera

prog 106: Autentificacion.kt - Autentificación digest en Ktor

Prólogo

Por Carmelo Criado Abad

El autor

Luis Criado-Fernández es un personaje polifacético de difícil definición en pocas líneas. Aparte de su trabajo cotidiano como ingeniero de telecomunicaciones en la Comunidad de Madrid, escribe novelas de ciencia ficción y siente pasión por su faceta de programador, muy marcada por su autodidactismo y una clara vocación por los lenguajes informáticos, ya que, aparte de programar, sigue con atención cuanto se cuece en ese entorno y cuenta con posibilidades reales de desarrollo y consolidación, como es el caso de Kotlin, del que se ocupa este libro.

Compuso su primer programa a los catorce años con un ordenador personal de la época: un Casio FX 9000P que soportaba un intérprete de BASIC que le sirvió para aprender a programar él solo.

Aquella experiencia fue el inicio de una vocación sostenida durante toda su vida, pues programar en cuantos lenguajes se tropezó a lo largo de su amplia carrera profesional ha sido para él fuente de gran interés y de enorme satisfacción. Diríase que su faceta de programador es una de las señas de identidad que le hacen más feliz.

Su práctica de programación siguió en años sucesivos y también su formación como doctor CUM LAUDE del Departamento de Inteligencia Artificial de la UNED, ingeniero de telecomunicaciones de la Universidad Alfonso X El Sabio y Técnico en Informática por la Universidad Pontificia de Salamanca.

Con todo este acerbo pudo descubrir que los fundamentos de la lógica de programación son básicamente variables, entrada y salida de datos, bucles, condicionales y subrutinas, elementos todos ellos indispensables que le sirvieron siempre para abordar proyectos de programación por complicados que fueran, pues constituyen, a su entender, la forma de pensar de todo programador con independencia del lenguaje que utilicen y, remacha, que: “A partir de estos conceptos básicos se abre un mundo ilimitado de posibilidades”.

El libro

Pero retornemos ahora al Gran libro de Kotlin para hacer una sucinta presentación de su contenido.

Lo primero que se encontrará el lector son tres capítulos muy breves: el primero es una introducción en la que se reflexiona sobre la importancia de aprender Kotlin; el segundo solo es una página, en la se explica el objetivo y la estructura del libro; finalmente, el tercero indica el IDE que se utilizará.

El contenido real de este Gran libro comienza en el capítulo 4, que explica la potencia del lenguaje al tiempo que enfatiza la simplicidad de la notación Kotlin, que es elegante y compacta. Todos los ejemplos están disponibles en el GitHub de la editorial.

Kotlin es un lenguaje que admite el paradigma de programación funcional. El capítulo 5 se dedica a ello y el lector podrá explorar los muchos tipos de funciones que incorpora, siempre con ejemplos. Este conocimiento le servirá para el capítulo 6, donde se sumergirá en el paradigma de programación orientado a objetos, reaprovechando todo lo aprendido sobre funciones, pues, en este paradigma, las funciones se reutilizan como métodos de clase.

Continuará el lector su aventura por este prometedor lenguaje abordando el manejo de datos, que siempre es tan necesario en cualquier aplicación o proceso que tengamos que implementar. Para ello, el capítulo 7 presenta una amplia variedad de tipos de ficheros y, el capítulo 8, nos muestra cómo conectarnos y lanzar una simple selección de datos sobre una gran variedad de bases de datos, tanto relacionales como de tipo no SQL. Para facilitar las pruebas, con tan elevado tipos de bases de datos, utilizaremos dockers.

Posteriormente se estudiarán algunos tipos de datos desde una perspectiva de utilidad práctica, por ejemplo, el capítulo 9 se ha dedicado a los números, pero no solo aborda los datos primitivos, sino las estructuras matemáticas que se pueden construir a partir de ellos. Trataremos con determinantes, sistemas de ecuaciones, trigonometría, integrales, etc.

Lo mismo ocurre con el capítulo 10, dedicado a cadenas y a cuestiones muy relacionadas como subcadenas, conversores, funciones hash, etc.

El capítulo 11 es ya una introducción a la programación asíncrona, es decir, aquella que simultáneamente ejecuta varias tareas, también conocida como concurrencia. En este capítulo practicaremos los dos modelos que soporta Kotlin: thread y corrutinas.

Y, finalmente, el capítulo 12 nos introduce en las aplicaciones war con Ktor, una forma de hacer las cosas, pienso que más sencilla a cómo se hace en Java. En realidad, es una introducción a cómo montar un back end al que se conecta desde un front end.

Sobre este libro

La voluntad y el trabajo han esculpido este texto, que pienso es diferenciador con respecto a otros textos dedicados a la programación.

Apoyándome en las palabras traducidas de Jules Payot1, “basta un poco cada día si cada día se adquiere este poco”2, que Santiago Ramón y Cajal, en su famosa obra de Reglas y consejos sobre investigación científica, lo referencia en la página 57 y lo hace más bello aún, “poco basta cada día si cada día logramos ese poco”, he logrado sumar pequeñas fracciones de tiempos de muchos días, dedicados al estudio intenso de Kotlin, cuyo resultado es este libro, persiguiendo el objetivo de compartir y facilitar un conocimiento preciso sobre este espectacular lenguaje y sus posibilidades. Para ello, todo el código fuente se encuentra disponible en el GitHub de Marcombo, implementado precisamente para alcanzar la comprensión comentada. En este libro encontrará todas las explicaciones al código mencionado, que, sin duda, conforma un atajo al entendimiento del mismo.

Para acceder al GitHub de Marcombo, entre en www.marcombo.info e introduzca el código KOTLIN23.

________________________

1https://en.wikipedia.org/wiki/Jules_Payot

2 La cita se localiza en la pág. 162 de la obra La educación de la voluntad: http://bdh-rd.bne.es/viewer.vm?id=0000064708&page=178

1

Introducción

Hay infinidad de lenguajes de programación, más de 700 figuran en la Wikipedia, como puede comprobarse fácilmente ejecutando el script de descarga de la lista de lenguajes de programación de Wikipedia escrito en Python e implementado por Álvaro Justen1. Los lenguajes de programación constantemente aparecen; más y más. Uno de los últimos que he detectado ha sido el lenguaje “CARBON”2 de Google, que apareció en julio del 2022.

Durante décadas, la actividad en la producción de nuevos lenguajes de programación ha sido verdaderamente frenética, basta consultar la línea temporal de los lenguajes de programación3 para hacernos una idea de ello.

Pero en realidad, decidir qué lenguaje de programación aprender tampoco es tan complicado, pues de estos cientos de lenguajes, en la práctica se usan unos pocos. Así que es suficiente indagar sobre los más usados del mercado para asegurarse aprender un lenguaje que tenga ofertas de empleo.

Una referencia interesante para evaluar los lenguajes de programación más usados es el conocido y prestigio índice TIOBE4; un informe mensual que elabora y publica la empresa TIOBE Software BV. Esta empresa se ha encargado de desarrollar y mejorar, desde el año 2001, un algoritmo basado en la ejecución de infinidad de consultas en motores de búsqueda, con el objetivo de medir la popularidad de los lenguajes de programación.

Por suerte, son pocos los lenguajes de programación que realmente se utilizan profesionalmente, quizás no más de 50. Y lo más importante, los primeros puestos suelen ser muy estables. Por ejemplo, si miramos los 5 primeros lenguajes en la lista del índice TIOBE en febrero del 2022 tenemos, por este orden, los siguientes lenguajes: Python, C, Java, C++ y C#. Obviamente Python está de moda, pues actualmente le ha favorecido el aumento de demanda para proyectos de Big Data, siendo los lenguajes dominantes en este ámbito R y Python; pero atención: Kotlin también compite en este campo5.

Si nos vamos más atrás en el tiempo, pongamos julio del 2020, tenemos el mismo top 5, pero en otro orden: C, Java, Python, C++ y C#.

Justo un año antes, en julio de 2019, solo se ha invertido el orden en los dos primeros, pero en el top 5 continúan con el liderazgo los mismos lenguajes, en este orden: Java, C, Python, C++ y C#. De forma que aprender cualquiera de ellos será tremendamente útil y nos garantizará una salida profesional.

Sin embargo, en este libro explicamos un lenguaje en el que ya hay que fijarse, pues modestamente va luchando posiciones y, aunque aún no tiene un lugar relevante en el ranking TIOBE, pues se mantiene siempre en el top 50, hay otras visiones que nos refuerzan en la idea de que Kotlin está alcanzando una gran popularidad, pues ocupa el puesto 13 en la encuesta para desarrolladores de StackOverflow6 2021 y 2022. Además, alcanzó en 2021 un interesante posicionamiento en el informe hired7(Most In-Demand Coding Languages Across the Globe), que se orienta a los lenguajes más demandados, y por tanto dónde el sector elevará la oferta de programadores. Kotlin apareció ese año en el informe hired en quinto lugar. Lo que indica el gran interés que supone este lenguaje para esta comunidad de profesionales especializados.

Por supuesto, Java siempre es una opción acertada y continúa siendo uno de los lenguajes más interesantes, en constante evolución, además sus programadores suelen tener ventaja para adoptar muchos de los lenguajes emergentes. A Java le sucede lo mismo que a Venecia. Quizás le ha ocurrido a usted, cuando viaja, observar como muchas ciudades del mundo que tienen canales quieren parecerse a Venecia. Muchas de ellas son conocidas con el sobrenombre de “Venecia del Norte”8, en esta lista encontramos famosas ciudades como San Petersburgo (Rusia), Ámsterdam (Países Bajos), Brujas (Bélgica), Estocolmo (Suecia), Copenhague (Dinamarca) y Hamburgo (Alemania). Lo mismo le ocurre a Java, muchos otros lenguajes se comparan con Java, y otros incluso utilizan su máquina virtual, la JVM. De esto último es el caso9 de los siguientes lenguajes: Scala (2003), Groovy (2003), Fantom (2005), Clojure (2007), Xtend (2011) y Kotlin (aunque diseñado en 2011, ha requerido un largo periodo de madurez, lanzando la primera versión estable en 2016).

Entonces, ¿por qué razón Kotlin puede interesar más que el resto de lenguajes basados en JVM? Sencillamente por considerarse uno de los lenguajes emergentes más prometedores, quizás tras el respaldo del mundo Android, pues en 2017 Kotlin fue adoptado por Google como lenguaje oficial para Android, al mismo nivel que Java. Por si esto fuera poco, Kotlin continúa conquistando fronteras y en 2020 sorprendió con KMM (Kotlin Multiplatform Mobile), un sdk que permite utilizar el mismo código de lógica empresarial, tanto en aplicaciones iOS como Android.

Sin embargo, como ya sabrá el lector, Kotlin no es solo un lenguaje para implementar apps, se trata de un lenguaje de propósito general; que engancha. Cuanto más se usa, más se desea programar con él y descubrir más bondades del lenguaje.

En cualquier caso, para que un lenguaje de programación pueda extenderse, requiere, en primer lugar, disponer de herramientas para los programadores. Actualmente Kotlin cuenta ya con una gran variedad. En segundo lugar, requiere comunidades de programadores, donde compartir trabajos y experiencias con otros profesionales. Y, por último, sin ser menos importante, se necesita documentación y libros.

Desgraciadamente, y por eso me he decidido, cuando empecé a escribir este libro, en verano del 2020, solo había dos libros de propósito general en castellano, y algunos libros para programadores de front end orientados a Android, pero faltaba un libro para programadors de back end: este texto procura ser una humilde contribución a este propósito.

Una consideración extremadamente relevante a la hora de implantar un nuevo lenguaje es el punto de vista del CTO de la empresa de desarrollo, donde profesionalmente trabajamos, pues hay que tener en cuenta que con toda seguridad hay un “know how” asociado al lenguaje de programación utilizado, el cual habrá generado muchísimas dependencias propias y externas (en forma de apis, sdks, librerías, repositorios de código privados, etc.) y que tiene un valor económico, de tiempo y de confianza que nos garantiza que los productos que desarrolla la empresa son robustos y reutilizables.

Pues bien, en el caso de que ese “know how” sea en Java, tendremos todas las condiciones para gradualmente poder incluir código Kotlin reaprovechando todo lo anterior. Sin duda, Kotlin se ha diseñado y se evoluciona con ambición y hará temblar la sólida supremacía de los lenguajes del top 5 del índice TIOBE. Hasta el nombre es un desafío y una declaración oculta de intenciones, pues al igual que Java, también Kotlin es el nombre de una isla. Pero Kotlin está conectada a San Petersburgo por dos puentes como si fuese una metáfora, que facilita su adopción para el programador, sobre todo si procede de Java.

Fuera ya de pasiones y subjetividades, los puntos más fuertes del lenguaje quizás sean:

1.   El lenguaje Kotlin es 100 % interoperable con Java, tanto es así, que incluso podemos mezclar en el mismo proyecto código Java y Kotlin. De forma que nunca tendremos problemas para utilizar cualquier recurso Java usando la sintaxis Kotlin para hacer cosas que Kotlin todavía no sepa hacer.

2.   Un código fuente conciso, legible, elegante y potente, como podrá comprobar en el capítulo 4.

Si realmente se quiere que una variable acepte un valor null, es menester declarar explícitamente esa variable como null. Exactamente lo contrario a Java, donde cada objeto, por defecto, puede aceptar un null, y por consiguiente, el programador se ve obligado a realizar una gestión obligatoria de excepciones centradas en NullPointerExceptions.

Para declarar explícitamente que una variable puede aceptar un valor null, bastará con agregar un signo de cierre de interrogación (?) al final del tipo de variable. Por ejemplo, el siguiente código sí compilará:

4.   Interoperable con Javascript.

5.   Soporta el paradigma de programación funcional y el paradigma de programación orientado a objetos (POO).

________________________

1https://gist.github.com/turicas/d5f8ce3ceb99f43a11b1e4e7fb2a2bf9

2https://github.com/carbon-language/carbon-lang

3https://en.wikipedia.org/wiki/Timeline_of_programming_languages

4https://www.tiobe.com/tiobe-index/

5https://kotlinlang.org/docs/data-science-overview.html

6https://insights.stackoverflow.com/survey/2020#most-popular-technologies

7https://hired.com/state-of-software-engineers#companies

8https://es.wikipedia.org/wiki/Venecia_del_norte?fbclid=IwAR2s1bhVBpwWxWWc053bzEyRWyNc1AuruMhNmDUPLfTV1apVDbpXky76Dcc

9https://consejerodigital.com/lenguajes-jvm/

2

Objetivo y estructura

Este no es un libro para aprender a programar, es un libro dirigido a programadores que quieran aprender Kotlin, especialmente si proceden de Java. Por lo tanto, en este libro no dedicamos tiempo a explicar cuestiones elementales como lo que son variables, bucles, condicionales, etc.

Toda la esencia del libro se organiza bajo la parte denominada “Experimentando con Kotlin en back end”, mientras que la parte de “Anexo” se dedica a complementar algunos aspectos que se utilizan en el libro, pero que no tuvieron un capítulo al salirse de la implementación. Sin embargo, en este anexo sí se ofrece una referencia rápida de la sintaxis de Kotlin.

Por último, hemos concebido el libro para ser útil al lector en el aprendizaje de este lenguaje, incluso, como indicaremos más adelante, podrá acceder a todo el código fuente y probarlo para alcanzar el mejor entendimiento posible. Además, en ciertos casos ahorrará mucho tiempo el no tener que realizar instalaciones tediosas para probar el código, como son las pruebas con diferentes bases de datos, pues utilizaremos y compartiremos también los dockers que emulan dichos subsistemas.

3

IDE para Kotlin

El lenguaje Kotlin fue diseñado por la empresa JetBrains s.r.o. (anteriormente IntelliJ Software s.r.o.), cuya actividad principal ha sido el desarrollo de una familia de entornos de desarrollo integrado (IDE). En consecuencia, Kotlin nació en el regazo del famoso IDE IntelliJ IDEA (de JetBrains). Y pronto contó también con otros IDEs: Android Studio y Eclipse.

En este libro tampoco dedicamos tiempo a explicar ningún IDE, pues son herramientas habituales en programación y estamos seguros de que nuestros lectores tienen pericia suficiente en su utilización, y probablemente más que este autor. En cualquier caso, un libro que incorpore capturas de pantallas de IDE está condenado a quedarse obsoleto, y parece más adecuado la utilización de un video-tutorial para revisar rápidamente el funcionamiento de cualquier IDE de los que hemos mencionado.

Todo el código lo hemos implementado con IDE IntelliJ IDEA, si no lo tiene recomiendo, antes de continuar con el capítulo cuarto, que instale el IDE IntelliJ IDEA1 (la edición gratis es “Community”), que le permitirá abordar todos los capítulos.

El capítulo final, dedicado a Ktor, puede usarse clonando el repositorio de este libro, pero si quiere hacer sus propios desarrollos Ktor va a necesitar la versión de pago (versión “ultimate”), aunque puede usarla gratuitamente 30 días. Por esta razón creo que es mejor reservarla para el final del libro y no empezar a consumir los días gratuitos de la versión “ultimate” con capítulos que no lo requieren.

La versión del compilador Kotlin2 que he utilizado ha sido 1.4 y el JDK 11 de Java (entiendo que los ejemplos funcionarán también en versiones superiores, pero no inferiores). Para poder ejecutar los ejemplos utilizados en este libro, puede descargarlos gratuitamente desde el repositorio GitHub de Marcombo3, clonarlo, o mejor, bifurcarlo (fork) para trastear con el código a su gusto. Se trata de un proyecto Maven para facilitar las dependencias de las muchas librerías externas que se utilizan a lo largo de este texto.

Un par de cosas más. Si usando el IDE IntelliJ IDEA se queda sin memoria en la máquina virtual de Java, podrá cambiar estos parámetros en la opción de menú [help/Change Memory Settings] o mediante el fichero “idea64.exe.vmoptions”. Por ejemplo:

Asignar el tamaño inicial de memoria que usará la JVM

-Xms1024m

Asignar el tamaño máximo de memoria que podrá usar la JVM

-Xmx2048m

Y, por último, si se produce un Internal Error, normalmente hay que reconstruir la compilación de todo el proyecto. Para solucionarlo utilice la opción [build/Rebuild Project].

________________________

1https://www.jetbrains.com/idea/download/#section=windows

2https://kotlinlang.org/

3https://github.com/Marcombo/El-gran-libro-de-Kotlin

Experimentando con Kotlin en back end

4

Poco código y grandes resultados

Son varios los lenguajes que he aprendido a lo largo de mi actividad y muchos los libros consultados y leídos sobre programación. Pero hay un libro que me impactó por mostrar en primer lugar la potencia del lenguaje de programación y por continuar con un enfoque totalmente original, alejado del esquema habitual en este tipo de textos, que recuerdan más a un manual que a un auténtico libro de programación.

Me inspiro en ese libro, cuyo autor es el brillante José Canosa, del que tuve la suerte y la oportunidad de tenerle como maestro. La obra a la que me refiero lleva el título de Curso experimental de lenguaje C, de 1992, también al igual que este libro de la editorial Marcombo. Y con el mismo enfoque vamos a iniciarnos en las posibilidades de Kotlin.

Pero antes, tenga cerca el código fuente, que como comentábamos en el capítulo 3, está disponible en el repositorio GitHub de Marcombo. El código fuente de los capítulos del 4 al 11 está ubicado en:

El-gran-libro-de-Kotlin/src/main/kotlin/marcombo/lcriadof/

4.1 El primer programa en Kotlin

Ajustándonos a la costumbre en programación de comenzar con un programa que lo único que hace es mostrar el mensaje “¡Hola Mundo!” por pantalla. Vemos que en Kotlin (c4p1.kt) es así de elegante:

prog 1: c4p1.kt - Hola mundo

1: Es el punto de entrada en una aplicación Kotlin; es la función principal. A partir de Kotlin 1.3, puede declararse la función main() sin ningún parámetro. El tipo de retorno no se especifica, lo que significa que la función no devuelve nada. Obsérvese que la apertura de la llave “{” indica donde comienza el código de main().

2: println escribe una línea en la salida por pantalla. Se importa implícitamente. El punto y coma al final de println, estilo Java, pueden añadirse pero es opcional. Por lo tanto, también se puede escribir así:

println("¡Hola Mundo!") ;

3: La llave “}” indica el fin de la función. Fin de la función main() y por lo tanto del programa.

La tradición de este primer programa arranca de un programa de ejemplo del libro The C Programming Language1 de Kernighan y Ritchie publicado en 1978, ejemplo que a su vez fue heredado de un manual interno de 1974 de los Laboratorios Bell, cuyo autor también es Brian Kernighan.

Por favor, compare este primer programa con su equivalente en lenguaje C:

O con Java:

Seguro que estamos de acuerdo en que, por ahora, la impresión es buena.

Pues vamos a complicarlo algo más. El siguiente programa en Kotlin es capaz de escribir en un fichero de texto el mensaje “¡Hola Mundo!”. El código (c4p2.kt) es simple, potente y bello, pero para funcionar necesita importar la clase File de Java.

prog 2: c4p2.kt - Hola mundo usando ficheros

1: La clase File hereda del paquete java.io.File, pero Kotlin le añade el método writeText(), que se encarga de hacer todo el trabajo de escritura.

Kotlin se basa en bibliotecas Java, pero las mejora. Nos otorga compatibilidad total al tiempo que mantiene el código limpio y claro.

Por ello, si intentamos codificar lo mismo en Java, no será posible, pues el método “mágico” writeText() es una aportación de Kotlin. Desgraciadamente, en Java este mismo programa (j2.java) nos quedaría algo así:

4.2 Programa para escribir varias líneas de un fichero de texto

El siguiente código fuente (c4p3.kt) genera un fichero con una lista ordenada de números comprendidos entre 1 y 100, ambos incluidos, mostrándolos por pantalla. Para ejecutar este programa se requiere que previamente cree el directorio “/tmp”.

prog 3: c4p3.kt - Escribe un fichero de texto y lo muestra por pantalla

1: Definimos la constante directorio de tipo String indicando el path mediante la palabra reservada val. Aunque las pruebas las hemos realizado en Windows, se puede definir sin especificar la unidad de disco. Por defecto, el path definido actúa en la unidad por defecto donde se instaló el IDE, que en nuestro caso es la unidad E:. Sin embargo, perfectamente podría indicarse en una unidad distinta a la unidad por defecto, especificando la ruta de forma absoluta, por ejemplo:

val directorio:String="C://tmp/"

2: Definimos la constante f de tipo File indicando los parámetros de tipo String, el path o directorio, y el nombre del fichero.

3: Conviene conocer si el fichero existe previamente a la ejecución del programa. El condicional if funciona como en cualquier lenguaje, si se cumple la condición lógica en ese preciso momento se ejecuta el código que encierra entre llaves { }.

4: Queremos generar un único listado del 1 al 100, pero no queremos concatenar varios listados si ejecutamos el programa varias veces. De forma que, si el fichero existe previamente, nos aseguramos de borrar su contenido previo con writeText("").