SlideShare una empresa de Scribd logo
Introducción a Kotlin para desarrolladores Java
Víctor Orozco
6 de mayo de 2020
@tuxtor
1
Contexto
Caracteristicas interesantes
Demo productiva
Kotlin vs. Java
2
Contexto
¿Java?
• Lenguaje (Java 11)
• OpenJDK (Java Virtual Machine)
• Bibliotecas/API (Java Classpath)
El conjunto de los 3 es la plataforma Java(TM) pero pueden usarse de forma
independiente
3
Java en Android
• Lenguaje (Java 7)
• ART/Dalvik
• Bibliotecas/API (Java+Google
Classpath)
4
Java - Java como JVM
5
JVM
6
Kotlin
• Lenguaje (Kotlin)
• OpenJDK (Java Virtual Machine)
• Bibliotecas/API (Java Classpath)
• kotlin-stdlib
7
Kotlin en Android
• Lenguaje (Kotlin)
• ART/Dalvik
• Bibliotecas/API (Java+Google
Classpath)
• kotlin-stdlib
8
Kotlin en JS
• Lenguaje (Kotlin)
• V8/SpiderMonkey
• Bibliotecas/API (ECMA 6 + Web)
• kotlin-stdlib
9
Kotlin Nativo
• Lenguaje (Kotlin)
• LLVM
• GLibc (Linux)
• kotlin-stdlib
10
Kotlin Nativo/GraalVM
• Lenguaje (Kotlin)
• GraalVM Native
• Bibliotecas/API (Java Classpath)
• kotlin-stdlib
11
Kotlin como lenguaje
• Típado estático con inferencia de
tipos
• OOP y funcional
• Funciones son ciudadanos de
primer nivel
• Interoperable con Java
• Compilador genera Bytecode nivel
Java 6 (Android)
12
Caracteristicas interesantes
Kotlin - Inferencia de tipos (constantes y variables)
Similar a lo visto en TypeScript o Swift, promueve la inmutabilidad
1 // Mutable
2 var answer = 42
3
4 // Inmutable
5 val phrase = "JVM Rocks!"
6
7 // Declaración explicita
8 val pi : Double = "3.14159"
9
10 // Inferencia por retorno
11 val auto = crearAuto()
13
Kotlin - Funciones
Pueden ser top level, nested y a su vez pueden ser bloques o expresiones
1 //Bloque
2 fun sumar(x: Int, y: Int): Int{
3 return x + y
4 }
5
6 //One-line - Expresion y default parameter
7 fun sumar2(x: Int, y: Int = 99) = x + y
8
9 //Infix - AKA operador
10 infix fun Int.sumar3(y: Int) = this + y
11 ...
12 //Uso
13 2 sumar3 4
14
Kotlin - Clases
Todas las clases heredan de Any
1 //Clase
2 class Automovil: Vehiculo{
3 ...
4 constructor(conductor:Persona): super(conductor){
5 ...
6 }
7 }
8
9 //Clase concisa
10 class Automovil(conductor:Persona): Vehiculo(conductor){
11 ...
12 }
15
Kotlin - Propiedades y clases
Combinación del campo y métodos de acceso
1 //Clase
2 class Automovil: Vehiculo{
3 var marca: String
4 var modelo: Int = 2020
5 var motor: String = ""
6 set(value) {
7 field = value + "CC"
8 }
9 get() = field + " extra info"
10 }
16
Kotlin - Clases
Kotlin permite escribir clases y data carriers de forma concisa
1 //Forma corta
2 class Automovil(val marca: String, val color: String="Rojo")
3 ...
4 //Data class (metodos universales como equals, hash code,
toString)
5 data class Automovil(val marca: String,
6 val color: String="Rojo")
17
Kotlin - Object AKA Singleton
Creación de instancias únicas
1 object Automovil: Vehiculo {
2 override fun correr(){
3 ...
4 }
5 }
6
7 //Invocamos comportamiento
8 Automovil.correr()
9
10
11 //Y lo usamos como objeto
12 fun iniciarVehiculo(Automovil)
18
Kotlin - No static keyword
1 class Automovil {
2 companion object {
3 fun correr() {
4 ...
5 }
6 }
7 }
8
9 object Automovil {
10 override fun correr(){
11 ...
12 }
13 }
19
Kotlin - Extension functions
Posibilidad de extender funcionalidad en clases existentes
1 fun String.ultimoCar(): Char = this.get(this.lenght - 1)
2
3 val frase: Char = "Yo amo la JVM".ultimoCar()
20
Kotlin - Verificación de nulos
En Kotlin la verificación de nulos y declaración de variables .abiertas.es explicita
1 val talvez: String? = ...
2
3 talvez.length //Error de compilacion
4 talvez?.length
5
6 fun forzarNull(s: String?) {
7 println(s!!.length)
8 }
21
Kotlin - Smart Cast y Pattern Matching
El casting se da automático en ciertos bloques y expresiones
1 val auto1: Vehiculo = ...
2
3 if (auto1 is Automovil){
4 auto1.cosasDeAutos()
5 }
6
7 when (auto1) {
8 is Automovil -> auto1.cosasDeAutos()
9 is Motocicleta -> auto1.cosasDemotos()
10 else -> throw Exception("El vehiculo de los ojos tristes")
11 }
22
Kotlin - Collections
Metodos convenientes y expresiones lambda, por defecto Inmutables
1 //Con expresiones lambda
2 listOf(1, 2, 3).filter{ i -> i % 2 == 0}
3
4 //Con expresiones cortas (predicado)
5 listOf(1, 2, 3).filter{i % 2 == 0}
23
Kotlin - Convenciones
• Convenciones de nombrado Java
• Típos en Uppercase
• Metodos y propiedades en lower
camelCase
• Punto y coma son opcionales
• Convención reversa en nombrado de
paquetes
• Multiples clases por archivo
• Los paquetes en código no deben
coincidir con nombres de directorios
24
Kotlin para desarrolladores Java
• Lenguaje (Kotlin)
• V8/SpiderMonkey
• Bibliotecas/API (ECMA 6 + Web)
• kotlin-stdlib
25
Demo productiva
Eclipse MicroProfile - 1, 2, 3 with Kotlin
1. Maven or Gradle config
2. MicroProfile dependency and your extras (Jakarta EE, Arquillian, JUnit, . . .)
3. Maven plugin (maven-compiler-plugin)
4. Kotlin plugin (kotlin-maven-plugin)
26
Eclipse MicroProfile with Payara 5
1 <dependency>
2 <groupId>org.eclipse.microprofile</groupId>
3 <artifactId>microprofile</artifactId>
4 <type>pom</type>
5 <version>2.1</version>
6 <scope>provided</scope>
7 </dependency>
27
Kotlin with Maven - Dependency
1 <dependency>
2 <groupId>org.jetbrains.kotlin</groupId>
3 <artifactId>kotlin-stdlib-jdk8</artifactId>
4 <version>${kotlin.version}</version>
5 </dependency>
28
Kotlin with Maven - maven-compiler-plugin
1 <execution>
2 <id>default-compile</id>
3 <phase>none</phase>
4 </execution>
5 <execution>
6 <id>default-testCompile</id>
7 <phase>none</phase>
8 </execution>
9 <execution>
10 <id>java-compile</id>
11 <phase>compile</phase>
12 <goals> <goal>compile</goal> </goals>
13 </execution>
14 <execution>
15 <id>java-test-compile</id>
16 <phase>test-compile</phase>
17 <goals> <goal>testCompile</goal> </goals>
18 </execution>
29
Kotlin with Maven - kotlin-maven-plugin
1 <compilerPlugins>
2 <plugin>all-open</plugin>
3 </compilerPlugins>
4 ...
5 <option>all-open:annotation=javax.ws.rs.Path</option>
6 <option>all-open:annotation=javax.enterprise.context.RequestScoped</option>
7 <option>all-open:annotation=javax.enterprise.context.SessionScoped</option>
8 <option>all-open:annotation=javax.enterprise.context.ApplicationScoped</option>
9 <option>all-open:annotation=javax.enterprise.context.Dependent</option>
10 <option>all-open:annotation=javax.ejb.Singleton</option>
11 <option>all-open:annotation=javax.ejb.Stateful</option>
12 <option>all-open:annotation=javax.ejb.Stateless</option>
Idea general: Agregar todas las anotaciones arquitecturales de JakartaEE (CDI
and EJB)
30
Kotlin + Jakarta EE + MicroProfile - Demo
• Kotlin 1.3
• Libraries - SLF4J, Flyway, PostgreSQL
• Jakarta EE 8 - EJB, JPA
• MicroProfile - CDI, JAX-RS, MicroProfile Config
• Testing - Arquillian, JUnit, Payara Embedded
https://dzone.com/articles/
the-state-of-kotlin-for-jakarta-eemicroprofile-tra
https://github.com/tuxtor/integrum-ee
31
Kotlin + Jakarta EE + MicroProfile - Demo
32
Kotlin + Jakarta EE + MicroProfile - Demo
33
Kotlin - JPA entity
1 @Entity
2 @Table(name = "adm_phrase")
3 @TableGenerator(...)
4 data class AdmPhrase(
5 @Id
6 @GeneratedValue(strategy = GenerationType.TABLE,
7 generator = "admPhraseIdGenerator")
8 @Column(name = "phrase_id")
9 var phraseId:Long? = null,
10 var author:String = "",
11 var phrase:String = ""
12 )
Data Clases, Nullable Types
34
Kotlin - CDI Repository
1 @RequestScoped
2 class AdmPhraseRepository {
3
4 @Inject
5 private lateinit var em:EntityManager
6
7 ...
8
9 }
Lateinit (nullable type)
35
Kotlin - CDI Repository
1 fun create(admPhrase:AdmPhrase) = em.persist(admPhrase)
2
3 fun update(admPhrase:AdmPhrase) = em.merge(admPhrase)
4
5 fun findById(phraseId: Long) =
6 em.find(AdmPhrase::class.java, phraseId)
7
8 fun delete(admPhrase: AdmPhrase) = em.remove(admPhrase)
9 . . .
Single expression functions (One line methods)
36
Kotlin - CDI Repository
1 fun listAll(author: String, phrase: String):
2 List<AdmPhrase> {
3
4 val query = """SELECT p FROM AdmPhrase p
5 where p.author LIKE :author
6 and p.phrase LIKE :phrase
7 """
8
9 return em.createQuery(query, AdmPhrase::class.java)
10 .setParameter("author", " %$author %")
11 .setParameter("phrase", " %$phrase %")
12 .resultList
13 }
Multiline string
37
Kotlin - JAX-RS Controllers
1 @Path("/phrases")
2 @Produces(MediaType.APPLICATION_JSON)
3 @Consumes(MediaType.APPLICATION_JSON)
4 class AdmPhraseController{
5
6 @Inject
7 private lateinit var admPhraseRepository: AdmPhraseRepository
8
9 @Inject
10 private lateinit var logger: Logger
11 ...
12
13 }
38
Kotlin - JAX-RS Controller
1
2 @GET
3 fun findAll(
4 @QueryParam("author") @DefaultValue(" %") author: String,
5 @QueryParam("phrase") @DefaultValue(" %") phrase: String) =
6 admPhraseRepository.listAll(author, phrase)
7
8 @GET
9 @Path("/{id:[0-9][0-9]*}")
10 fun findById(@PathParam("id") id:Long) =
11 admPhraseRepository.findById(id)
12
13 @PUT
14 fun create(phrase: AdmPhrase): Response {
15 admPhraseRepository.create(phrase)
16 return Response.ok().build()
17 }
39
Kotlin - JAX-RS Controller
Elvis operator as expression
1 @POST
2 @Path("/{id:[0-9][0-9]*}")
3 fun update(@PathParam("id") id: Long?, phrase: AdmPhrase)
4 :Response {
5 if(id != phrase.phraseId)
6 return Response.status(Response.Status.NOT_FOUND).build()
7
8 val updatedEntity = admPhraseRepository.update(phrase)
9 return Response.ok(updatedEntity).build()
10 }
11
12 @DELETE
13 @Path("/{id:[0-9][0-9]*}")
14 fun delete(@PathParam("id") id: Long): Response {
15 val updatedEntity = admPhraseRepository.findById(id) ?:
16 return Response.status(Response.Status.NOT_FOUND).build()
17 admPhraseRepository.delete(updatedEntity)
18 return Response.ok().build()
40
Oracle Cloud
1 <groupId>io.fabric8</groupId>
2 <artifactId>docker-maven-plugin</artifactId>
3 <version>0.30.0</version>
4 ...
5 <image>
6 <name>iad.ocir.io/tuxtor/microprofile/integrum-ee</name>
7 <build>
8 <dockerFile>${project.basedir}/Dockerfile</dockerFile >
9 </build>
10 </image>
41
Oracle Cloud
42
Oracle Cloud
43
Oracle Cloud
44
Oracle Cloud
45
Kotlin vs. Java
Kotlin - Cosas más interesantes para mi
• Static typing
• Java inter-op
• OO + FP
• Null safety
• Extension functions
• Operator overloading
• Data classes
• Functions as expressions
46
Kotlin - Datos interesantes
• Effective Java - Immutability, builder,
singleton, override, final by default,
variance by generics
• Elvis - Groovy
• Type inference - Scala
• Immutability - Scala
• Identifiers - Scala
• Null values management - Groovy
• Functions - Groovy
47
Java - Muriendo desde 1995
• Spring Boot, Micronaut, MicroProfile,
GraalVM . . .
• Raw performance (Beam, Spark,
Hadoop)
• Tooling - IDE, Maven, Drivers RDBMS
• JVM - (Twitter, Alibaba, Spotify, etc.)
• OpenJDK
48
Kotlin
Ventajas
• Código conciso si se aprenden los
nuevos bloques y expresiones
• Java inter-op
• Una oportunidad de Backend para
desarrolladores Android
• Un nuevo abordaje ”Full-stack”
Desventajas
• IntelliJ IDEA Ultimate
• Curva de aprendizaje más
pronunciada
• Compiler (time)
• Thread-managed vs Co-routines
• Amber, Loom, Valhalla, Panama
(Java 18?)
49
Academik
50
Víctor Orozco
• vorozco@nabenik.com
• @tuxtor
• https://vorozco.com
This work is licensed under a
Creative Commons
Attribution-ShareAlike 3.0.
51

Más contenido relacionado

La actualidad más candente

(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!
Alonso Torres
 
Fundamentos de la Refactorización
Fundamentos de la RefactorizaciónFundamentos de la Refactorización
Fundamentos de la Refactorización
Javier Pérez
 
[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...
[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...
[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...
Microsoft Argentina y Uruguay [Official Space]
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Codemotion
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
pbcanessa
 
PCJ Sesión 9: Threads
PCJ Sesión 9: ThreadsPCJ Sesión 9: Threads
PCJ Sesión 9: Threads
Enrique Zamudio López
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
RootedCON
 
Hibernate - JPA @luce
Hibernate - JPA @luceHibernate - JPA @luce
Hibernate - JPA @luce
Javier Gamarra
 
Apache Storm: Instalación
Apache Storm: InstalaciónApache Storm: Instalación
Apache Storm: Instalación
Stratebi
 
Comandos java
Comandos javaComandos java
Comandos java
Heidiie Hdz
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaSoftware Guru
 
UYOUG 2012 - Oracle RAC 11gR2 - New features
UYOUG 2012 - Oracle RAC 11gR2 - New featuresUYOUG 2012 - Oracle RAC 11gR2 - New features
UYOUG 2012 - Oracle RAC 11gR2 - New features
Nelson Calero
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
RootedCON
 
UYOUG OTN Tour 2011 - RAC sin sorpresas
UYOUG OTN Tour 2011 - RAC sin sorpresasUYOUG OTN Tour 2011 - RAC sin sorpresas
UYOUG OTN Tour 2011 - RAC sin sorpresas
Nelson Calero
 
Información básica Java
Información básica JavaInformación básica Java
Información básica JavaFordBull2er
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
Mario IC
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicasAny Saula
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en java
Luis Miguel De Bello
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
Marta Alfonso Aller
 

La actualidad más candente (20)

Java 1.4 to java 6
Java 1.4 to java 6Java 1.4 to java 6
Java 1.4 to java 6
 
(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!
 
Fundamentos de la Refactorización
Fundamentos de la RefactorizaciónFundamentos de la Refactorización
Fundamentos de la Refactorización
 
[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...
[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...
[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Proj...
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
PCJ Sesión 9: Threads
PCJ Sesión 9: ThreadsPCJ Sesión 9: Threads
PCJ Sesión 9: Threads
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
 
Hibernate - JPA @luce
Hibernate - JPA @luceHibernate - JPA @luce
Hibernate - JPA @luce
 
Apache Storm: Instalación
Apache Storm: InstalaciónApache Storm: Instalación
Apache Storm: Instalación
 
Comandos java
Comandos javaComandos java
Comandos java
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficacia
 
UYOUG 2012 - Oracle RAC 11gR2 - New features
UYOUG 2012 - Oracle RAC 11gR2 - New featuresUYOUG 2012 - Oracle RAC 11gR2 - New features
UYOUG 2012 - Oracle RAC 11gR2 - New features
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
 
UYOUG OTN Tour 2011 - RAC sin sorpresas
UYOUG OTN Tour 2011 - RAC sin sorpresasUYOUG OTN Tour 2011 - RAC sin sorpresas
UYOUG OTN Tour 2011 - RAC sin sorpresas
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicas
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en java
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 

Similar a Introducción a Kotlin para desarrolladores Java

Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Samuel Marrero
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
Micael Gallego
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
GlobalLogic Latinoamérica
 
Java 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreJava 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and more
HillmerC
 
Frameworks de templates y xml
Frameworks de templates y xmlFrameworks de templates y xml
Frameworks de templates y xml
roger gustavo saravia aramayo
 
Mobile Day - Kotlin
Mobile Day - KotlinMobile Day - Kotlin
Mobile Day - Kotlin
Software Guru
 
Curso de javascript desde cero
Curso de javascript desde ceroCurso de javascript desde cero
Curso de javascript desde cero
davidpreyes
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
Jose Gallardo
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
omar_guerrero
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
denis ticona condori
 
JAVA.PPT
JAVA.PPTJAVA.PPT
JAVA.PPT
GalvanGR
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
DanielHidalgo92
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
miguel checa
 
Javaqert
JavaqertJavaqert
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
Fernando Petrola
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
mellcv
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
Héctor Díaz Ponce Inda
 

Similar a Introducción a Kotlin para desarrolladores Java (20)

Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
 
Java 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreJava 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and more
 
Frameworks de templates y xml
Frameworks de templates y xmlFrameworks de templates y xml
Frameworks de templates y xml
 
Mobile Day - Kotlin
Mobile Day - KotlinMobile Day - Kotlin
Mobile Day - Kotlin
 
Curso de javascript desde cero
Curso de javascript desde ceroCurso de javascript desde cero
Curso de javascript desde cero
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 
JAVA.PPT
JAVA.PPTJAVA.PPT
JAVA.PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
Javaqert
JavaqertJavaqert
Javaqert
 
Javaqert
JavaqertJavaqert
Javaqert
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
Tema 1[1][1]
Tema 1[1][1]Tema 1[1][1]
Tema 1[1][1]
 

Más de Víctor Leonel Orozco López

Introducción al análisis de datos
Introducción al análisis de datosIntroducción al análisis de datos
Introducción al análisis de datos
Víctor Leonel Orozco López
 
From traditional to GitOps
From traditional to GitOpsFrom traditional to GitOps
From traditional to GitOps
Víctor Leonel Orozco López
 
De Java 8 a Java 17
De Java 8 a Java 17De Java 8 a Java 17
De Java 8 a Java 17
Víctor Leonel Orozco López
 
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de MavenIniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Víctor Leonel Orozco López
 
Desde la TV, hasta la nube, el ecosistema de Java en 26 años
Desde la TV, hasta la nube, el ecosistema de Java en 26 añosDesde la TV, hasta la nube, el ecosistema de Java en 26 años
Desde la TV, hasta la nube, el ecosistema de Java en 26 años
Víctor Leonel Orozco López
 
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
Víctor Leonel Orozco López
 
Explorando los objetos centrales de Kubernetes con Oracle Cloud
Explorando los objetos centrales de Kubernetes con Oracle CloudExplorando los objetos centrales de Kubernetes con Oracle Cloud
Explorando los objetos centrales de Kubernetes con Oracle Cloud
Víctor Leonel Orozco López
 
Desarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud NativeDesarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud Native
Víctor Leonel Orozco López
 
Design Patterns para Microsserviços com MicroProfile
 Design Patterns para Microsserviços com MicroProfile Design Patterns para Microsserviços com MicroProfile
Design Patterns para Microsserviços com MicroProfile
Víctor Leonel Orozco López
 
Gestión de proyectos con Maven
Gestión de proyectos con MavenGestión de proyectos con Maven
Gestión de proyectos con Maven
Víctor Leonel Orozco López
 
MicroProfile benefits for your monolithic applications
MicroProfile benefits for your monolithic applicationsMicroProfile benefits for your monolithic applications
MicroProfile benefits for your monolithic applications
Víctor Leonel Orozco López
 
Consejos y el camino del desarrollador de software
Consejos y el camino del desarrollador de softwareConsejos y el camino del desarrollador de software
Consejos y el camino del desarrollador de software
Víctor Leonel Orozco López
 
De Java 8 ate Java 14
De Java 8 ate Java 14De Java 8 ate Java 14
De Java 8 ate Java 14
Víctor Leonel Orozco López
 
Programación con ECMA6 y TypeScript
Programación con ECMA6 y TypeScriptProgramación con ECMA6 y TypeScript
Programación con ECMA6 y TypeScript
Víctor Leonel Orozco López
 
Empaquetando aplicaciones Java con Docker y Kubernetes
Empaquetando aplicaciones Java con Docker y KubernetesEmpaquetando aplicaciones Java con Docker y Kubernetes
Empaquetando aplicaciones Java con Docker y Kubernetes
Víctor Leonel Orozco López
 
De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14
Víctor Leonel Orozco López
 
MicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applicationsMicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applications
Víctor Leonel Orozco López
 
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeKotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Víctor Leonel Orozco López
 
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem novaKotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
Víctor Leonel Orozco López
 
Eclipse MicroProfile para el desarrollador ocupado
Eclipse MicroProfile para el desarrollador ocupadoEclipse MicroProfile para el desarrollador ocupado
Eclipse MicroProfile para el desarrollador ocupado
Víctor Leonel Orozco López
 

Más de Víctor Leonel Orozco López (20)

Introducción al análisis de datos
Introducción al análisis de datosIntroducción al análisis de datos
Introducción al análisis de datos
 
From traditional to GitOps
From traditional to GitOpsFrom traditional to GitOps
From traditional to GitOps
 
De Java 8 a Java 17
De Java 8 a Java 17De Java 8 a Java 17
De Java 8 a Java 17
 
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de MavenIniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
 
Desde la TV, hasta la nube, el ecosistema de Java en 26 años
Desde la TV, hasta la nube, el ecosistema de Java en 26 añosDesde la TV, hasta la nube, el ecosistema de Java en 26 años
Desde la TV, hasta la nube, el ecosistema de Java en 26 años
 
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
Bootstraping real world Jakarta EE/MicroProfile microservices with Maven Arch...
 
Explorando los objetos centrales de Kubernetes con Oracle Cloud
Explorando los objetos centrales de Kubernetes con Oracle CloudExplorando los objetos centrales de Kubernetes con Oracle Cloud
Explorando los objetos centrales de Kubernetes con Oracle Cloud
 
Desarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud NativeDesarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud Native
 
Design Patterns para Microsserviços com MicroProfile
 Design Patterns para Microsserviços com MicroProfile Design Patterns para Microsserviços com MicroProfile
Design Patterns para Microsserviços com MicroProfile
 
Gestión de proyectos con Maven
Gestión de proyectos con MavenGestión de proyectos con Maven
Gestión de proyectos con Maven
 
MicroProfile benefits for your monolithic applications
MicroProfile benefits for your monolithic applicationsMicroProfile benefits for your monolithic applications
MicroProfile benefits for your monolithic applications
 
Consejos y el camino del desarrollador de software
Consejos y el camino del desarrollador de softwareConsejos y el camino del desarrollador de software
Consejos y el camino del desarrollador de software
 
De Java 8 ate Java 14
De Java 8 ate Java 14De Java 8 ate Java 14
De Java 8 ate Java 14
 
Programación con ECMA6 y TypeScript
Programación con ECMA6 y TypeScriptProgramación con ECMA6 y TypeScript
Programación con ECMA6 y TypeScript
 
Empaquetando aplicaciones Java con Docker y Kubernetes
Empaquetando aplicaciones Java con Docker y KubernetesEmpaquetando aplicaciones Java con Docker y Kubernetes
Empaquetando aplicaciones Java con Docker y Kubernetes
 
De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14
 
MicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applicationsMicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applications
 
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeKotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
 
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem novaKotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
Kotlin+MicroProfile: Ensinando 20 anos para uma linguagem nova
 
Eclipse MicroProfile para el desarrollador ocupado
Eclipse MicroProfile para el desarrollador ocupadoEclipse MicroProfile para el desarrollador ocupado
Eclipse MicroProfile para el desarrollador ocupado
 

Último

Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
IsabelQuintero36
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
SERVANDOBADILLOPOLEN
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
yuki22434
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
Ing. Julio Iván Mera Casas
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
juanchogame18
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
AMADO SALVADOR
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
aljitagallego
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 

Último (20)

Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 

Introducción a Kotlin para desarrolladores Java

  • 1. Introducción a Kotlin para desarrolladores Java Víctor Orozco 6 de mayo de 2020 @tuxtor 1
  • 4. ¿Java? • Lenguaje (Java 11) • OpenJDK (Java Virtual Machine) • Bibliotecas/API (Java Classpath) El conjunto de los 3 es la plataforma Java(TM) pero pueden usarse de forma independiente 3
  • 5. Java en Android • Lenguaje (Java 7) • ART/Dalvik • Bibliotecas/API (Java+Google Classpath) 4
  • 6. Java - Java como JVM 5
  • 8. Kotlin • Lenguaje (Kotlin) • OpenJDK (Java Virtual Machine) • Bibliotecas/API (Java Classpath) • kotlin-stdlib 7
  • 9. Kotlin en Android • Lenguaje (Kotlin) • ART/Dalvik • Bibliotecas/API (Java+Google Classpath) • kotlin-stdlib 8
  • 10. Kotlin en JS • Lenguaje (Kotlin) • V8/SpiderMonkey • Bibliotecas/API (ECMA 6 + Web) • kotlin-stdlib 9
  • 11. Kotlin Nativo • Lenguaje (Kotlin) • LLVM • GLibc (Linux) • kotlin-stdlib 10
  • 12. Kotlin Nativo/GraalVM • Lenguaje (Kotlin) • GraalVM Native • Bibliotecas/API (Java Classpath) • kotlin-stdlib 11
  • 13. Kotlin como lenguaje • Típado estático con inferencia de tipos • OOP y funcional • Funciones son ciudadanos de primer nivel • Interoperable con Java • Compilador genera Bytecode nivel Java 6 (Android) 12
  • 15. Kotlin - Inferencia de tipos (constantes y variables) Similar a lo visto en TypeScript o Swift, promueve la inmutabilidad 1 // Mutable 2 var answer = 42 3 4 // Inmutable 5 val phrase = "JVM Rocks!" 6 7 // Declaración explicita 8 val pi : Double = "3.14159" 9 10 // Inferencia por retorno 11 val auto = crearAuto() 13
  • 16. Kotlin - Funciones Pueden ser top level, nested y a su vez pueden ser bloques o expresiones 1 //Bloque 2 fun sumar(x: Int, y: Int): Int{ 3 return x + y 4 } 5 6 //One-line - Expresion y default parameter 7 fun sumar2(x: Int, y: Int = 99) = x + y 8 9 //Infix - AKA operador 10 infix fun Int.sumar3(y: Int) = this + y 11 ... 12 //Uso 13 2 sumar3 4 14
  • 17. Kotlin - Clases Todas las clases heredan de Any 1 //Clase 2 class Automovil: Vehiculo{ 3 ... 4 constructor(conductor:Persona): super(conductor){ 5 ... 6 } 7 } 8 9 //Clase concisa 10 class Automovil(conductor:Persona): Vehiculo(conductor){ 11 ... 12 } 15
  • 18. Kotlin - Propiedades y clases Combinación del campo y métodos de acceso 1 //Clase 2 class Automovil: Vehiculo{ 3 var marca: String 4 var modelo: Int = 2020 5 var motor: String = "" 6 set(value) { 7 field = value + "CC" 8 } 9 get() = field + " extra info" 10 } 16
  • 19. Kotlin - Clases Kotlin permite escribir clases y data carriers de forma concisa 1 //Forma corta 2 class Automovil(val marca: String, val color: String="Rojo") 3 ... 4 //Data class (metodos universales como equals, hash code, toString) 5 data class Automovil(val marca: String, 6 val color: String="Rojo") 17
  • 20. Kotlin - Object AKA Singleton Creación de instancias únicas 1 object Automovil: Vehiculo { 2 override fun correr(){ 3 ... 4 } 5 } 6 7 //Invocamos comportamiento 8 Automovil.correr() 9 10 11 //Y lo usamos como objeto 12 fun iniciarVehiculo(Automovil) 18
  • 21. Kotlin - No static keyword 1 class Automovil { 2 companion object { 3 fun correr() { 4 ... 5 } 6 } 7 } 8 9 object Automovil { 10 override fun correr(){ 11 ... 12 } 13 } 19
  • 22. Kotlin - Extension functions Posibilidad de extender funcionalidad en clases existentes 1 fun String.ultimoCar(): Char = this.get(this.lenght - 1) 2 3 val frase: Char = "Yo amo la JVM".ultimoCar() 20
  • 23. Kotlin - Verificación de nulos En Kotlin la verificación de nulos y declaración de variables .abiertas.es explicita 1 val talvez: String? = ... 2 3 talvez.length //Error de compilacion 4 talvez?.length 5 6 fun forzarNull(s: String?) { 7 println(s!!.length) 8 } 21
  • 24. Kotlin - Smart Cast y Pattern Matching El casting se da automático en ciertos bloques y expresiones 1 val auto1: Vehiculo = ... 2 3 if (auto1 is Automovil){ 4 auto1.cosasDeAutos() 5 } 6 7 when (auto1) { 8 is Automovil -> auto1.cosasDeAutos() 9 is Motocicleta -> auto1.cosasDemotos() 10 else -> throw Exception("El vehiculo de los ojos tristes") 11 } 22
  • 25. Kotlin - Collections Metodos convenientes y expresiones lambda, por defecto Inmutables 1 //Con expresiones lambda 2 listOf(1, 2, 3).filter{ i -> i % 2 == 0} 3 4 //Con expresiones cortas (predicado) 5 listOf(1, 2, 3).filter{i % 2 == 0} 23
  • 26. Kotlin - Convenciones • Convenciones de nombrado Java • Típos en Uppercase • Metodos y propiedades en lower camelCase • Punto y coma son opcionales • Convención reversa en nombrado de paquetes • Multiples clases por archivo • Los paquetes en código no deben coincidir con nombres de directorios 24
  • 27. Kotlin para desarrolladores Java • Lenguaje (Kotlin) • V8/SpiderMonkey • Bibliotecas/API (ECMA 6 + Web) • kotlin-stdlib 25
  • 29. Eclipse MicroProfile - 1, 2, 3 with Kotlin 1. Maven or Gradle config 2. MicroProfile dependency and your extras (Jakarta EE, Arquillian, JUnit, . . .) 3. Maven plugin (maven-compiler-plugin) 4. Kotlin plugin (kotlin-maven-plugin) 26
  • 30. Eclipse MicroProfile with Payara 5 1 <dependency> 2 <groupId>org.eclipse.microprofile</groupId> 3 <artifactId>microprofile</artifactId> 4 <type>pom</type> 5 <version>2.1</version> 6 <scope>provided</scope> 7 </dependency> 27
  • 31. Kotlin with Maven - Dependency 1 <dependency> 2 <groupId>org.jetbrains.kotlin</groupId> 3 <artifactId>kotlin-stdlib-jdk8</artifactId> 4 <version>${kotlin.version}</version> 5 </dependency> 28
  • 32. Kotlin with Maven - maven-compiler-plugin 1 <execution> 2 <id>default-compile</id> 3 <phase>none</phase> 4 </execution> 5 <execution> 6 <id>default-testCompile</id> 7 <phase>none</phase> 8 </execution> 9 <execution> 10 <id>java-compile</id> 11 <phase>compile</phase> 12 <goals> <goal>compile</goal> </goals> 13 </execution> 14 <execution> 15 <id>java-test-compile</id> 16 <phase>test-compile</phase> 17 <goals> <goal>testCompile</goal> </goals> 18 </execution> 29
  • 33. Kotlin with Maven - kotlin-maven-plugin 1 <compilerPlugins> 2 <plugin>all-open</plugin> 3 </compilerPlugins> 4 ... 5 <option>all-open:annotation=javax.ws.rs.Path</option> 6 <option>all-open:annotation=javax.enterprise.context.RequestScoped</option> 7 <option>all-open:annotation=javax.enterprise.context.SessionScoped</option> 8 <option>all-open:annotation=javax.enterprise.context.ApplicationScoped</option> 9 <option>all-open:annotation=javax.enterprise.context.Dependent</option> 10 <option>all-open:annotation=javax.ejb.Singleton</option> 11 <option>all-open:annotation=javax.ejb.Stateful</option> 12 <option>all-open:annotation=javax.ejb.Stateless</option> Idea general: Agregar todas las anotaciones arquitecturales de JakartaEE (CDI and EJB) 30
  • 34. Kotlin + Jakarta EE + MicroProfile - Demo • Kotlin 1.3 • Libraries - SLF4J, Flyway, PostgreSQL • Jakarta EE 8 - EJB, JPA • MicroProfile - CDI, JAX-RS, MicroProfile Config • Testing - Arquillian, JUnit, Payara Embedded https://dzone.com/articles/ the-state-of-kotlin-for-jakarta-eemicroprofile-tra https://github.com/tuxtor/integrum-ee 31
  • 35. Kotlin + Jakarta EE + MicroProfile - Demo 32
  • 36. Kotlin + Jakarta EE + MicroProfile - Demo 33
  • 37. Kotlin - JPA entity 1 @Entity 2 @Table(name = "adm_phrase") 3 @TableGenerator(...) 4 data class AdmPhrase( 5 @Id 6 @GeneratedValue(strategy = GenerationType.TABLE, 7 generator = "admPhraseIdGenerator") 8 @Column(name = "phrase_id") 9 var phraseId:Long? = null, 10 var author:String = "", 11 var phrase:String = "" 12 ) Data Clases, Nullable Types 34
  • 38. Kotlin - CDI Repository 1 @RequestScoped 2 class AdmPhraseRepository { 3 4 @Inject 5 private lateinit var em:EntityManager 6 7 ... 8 9 } Lateinit (nullable type) 35
  • 39. Kotlin - CDI Repository 1 fun create(admPhrase:AdmPhrase) = em.persist(admPhrase) 2 3 fun update(admPhrase:AdmPhrase) = em.merge(admPhrase) 4 5 fun findById(phraseId: Long) = 6 em.find(AdmPhrase::class.java, phraseId) 7 8 fun delete(admPhrase: AdmPhrase) = em.remove(admPhrase) 9 . . . Single expression functions (One line methods) 36
  • 40. Kotlin - CDI Repository 1 fun listAll(author: String, phrase: String): 2 List<AdmPhrase> { 3 4 val query = """SELECT p FROM AdmPhrase p 5 where p.author LIKE :author 6 and p.phrase LIKE :phrase 7 """ 8 9 return em.createQuery(query, AdmPhrase::class.java) 10 .setParameter("author", " %$author %") 11 .setParameter("phrase", " %$phrase %") 12 .resultList 13 } Multiline string 37
  • 41. Kotlin - JAX-RS Controllers 1 @Path("/phrases") 2 @Produces(MediaType.APPLICATION_JSON) 3 @Consumes(MediaType.APPLICATION_JSON) 4 class AdmPhraseController{ 5 6 @Inject 7 private lateinit var admPhraseRepository: AdmPhraseRepository 8 9 @Inject 10 private lateinit var logger: Logger 11 ... 12 13 } 38
  • 42. Kotlin - JAX-RS Controller 1 2 @GET 3 fun findAll( 4 @QueryParam("author") @DefaultValue(" %") author: String, 5 @QueryParam("phrase") @DefaultValue(" %") phrase: String) = 6 admPhraseRepository.listAll(author, phrase) 7 8 @GET 9 @Path("/{id:[0-9][0-9]*}") 10 fun findById(@PathParam("id") id:Long) = 11 admPhraseRepository.findById(id) 12 13 @PUT 14 fun create(phrase: AdmPhrase): Response { 15 admPhraseRepository.create(phrase) 16 return Response.ok().build() 17 } 39
  • 43. Kotlin - JAX-RS Controller Elvis operator as expression 1 @POST 2 @Path("/{id:[0-9][0-9]*}") 3 fun update(@PathParam("id") id: Long?, phrase: AdmPhrase) 4 :Response { 5 if(id != phrase.phraseId) 6 return Response.status(Response.Status.NOT_FOUND).build() 7 8 val updatedEntity = admPhraseRepository.update(phrase) 9 return Response.ok(updatedEntity).build() 10 } 11 12 @DELETE 13 @Path("/{id:[0-9][0-9]*}") 14 fun delete(@PathParam("id") id: Long): Response { 15 val updatedEntity = admPhraseRepository.findById(id) ?: 16 return Response.status(Response.Status.NOT_FOUND).build() 17 admPhraseRepository.delete(updatedEntity) 18 return Response.ok().build() 40
  • 44. Oracle Cloud 1 <groupId>io.fabric8</groupId> 2 <artifactId>docker-maven-plugin</artifactId> 3 <version>0.30.0</version> 4 ... 5 <image> 6 <name>iad.ocir.io/tuxtor/microprofile/integrum-ee</name> 7 <build> 8 <dockerFile>${project.basedir}/Dockerfile</dockerFile > 9 </build> 10 </image> 41
  • 50. Kotlin - Cosas más interesantes para mi • Static typing • Java inter-op • OO + FP • Null safety • Extension functions • Operator overloading • Data classes • Functions as expressions 46
  • 51. Kotlin - Datos interesantes • Effective Java - Immutability, builder, singleton, override, final by default, variance by generics • Elvis - Groovy • Type inference - Scala • Immutability - Scala • Identifiers - Scala • Null values management - Groovy • Functions - Groovy 47
  • 52. Java - Muriendo desde 1995 • Spring Boot, Micronaut, MicroProfile, GraalVM . . . • Raw performance (Beam, Spark, Hadoop) • Tooling - IDE, Maven, Drivers RDBMS • JVM - (Twitter, Alibaba, Spotify, etc.) • OpenJDK 48
  • 53. Kotlin Ventajas • Código conciso si se aprenden los nuevos bloques y expresiones • Java inter-op • Una oportunidad de Backend para desarrolladores Android • Un nuevo abordaje ”Full-stack” Desventajas • IntelliJ IDEA Ultimate • Curva de aprendizaje más pronunciada • Compiler (time) • Thread-managed vs Co-routines • Amber, Loom, Valhalla, Panama (Java 18?) 49
  • 55. Víctor Orozco • vorozco@nabenik.com • @tuxtor • https://vorozco.com This work is licensed under a Creative Commons Attribution-ShareAlike 3.0. 51