SlideShare una empresa de Scribd logo
1 de 38
Android+Kotlin
MEETUP 12 Octubre 2017
LUGAR: IT Master (https://www.itmaster.com.ar/)
Pablo Angel Veliz
@paveliz
www.linkedin.com/in/pabloveliz/
paveliz.blogspot.com.ar/
github.com/paveliz/
Android+Kotlin: Primeros Pasos
Pablo Angel Veliz
@paveliz
www.linkedin.com/in/pabloveliz/
paveliz.blogspot.com.ar/
Soy desarrollador e instructor de Android desde hace más de 4 años. Actualmente
doy clases en IT Master y estoy a cargo del curso OnLine de la Universidad
Tecnológica Nacional (UTN).
Estoy a cargo de un equipo de desarrollos mobile y web en VN Studios
(http://www.vnstudios.com). Fui co-fundador y estuve a cargo del desarrollo de
pickmebus (www.pickmebus.com), una aplicación social con el objetivo de socializar y
mejorar el trasporte público en colectivo (bus).
github.com/paveliz/
¿Por qué Kotlin?
Pablo Angel Veliz
Android+Kotlin: ¿Por qué Kotlin?
CONCISO: reducción de código innecesario
SAFE: Permite evitar errores como los famosos “null pointer exception”.
INTEROPERABILIDAD: Compatible con lo existente (JVM, Android,
Navegador).
TOOL-FRIENDLY: Se puede desarrollar con cualquier IDE.
Pablo Angel Veliz
Android+Kotlin: ¿Por qué Kotlin?
JVM Android
Browser Native
Pablo Angel Veliz
Android+Kotlin: ¿Por qué Kotlin?
JVM
Kotlin es ideal para el desarrollo de aplicaciones server-side.
Como ya se sabe, es compatible con cualquier stack basado en
java.
Referencia: https://kotlinlang.org/docs/reference/server-
overview.html
Pablo Angel Veliz
Android+Kotlin: ¿Por qué Kotlin?
Browser
Kotlin tiene una implementación de front-end, traduciendo
(transpiling) kotlin a JavaScript.
Referencia: https://kotlinlang.org/docs/reference/js-
overview.html
Pablo Angel Veliz
Android+Kotlin: ¿Por qué Kotlin?
Native
Es un proyecto de LLVM (Low Level Virtual Machine) para
permitir compilaciones donde no es posible tener la virtual
machine…, ejemplo iOS.
Referencia: https://github.com/JetBrains/kotlin-native
Pablo Angel Veliz
Android+Kotlin: ¿Por qué Kotlin?
Android
Kotlin ya es lenguaje oficial de desarrollo en Android.
Referencia: https://kotlinlang.org/docs/reference/android-
overview.html
Eventos
Google
Gradle
Netflix
Twitter
Trello
Lyft
Pinterest
Udacity
Jet Brains
Introducción el lenguaje
Pablo Angel Veliz
Android+Kotlin: WORKSHOP
• Kotlin en Android Studio 2.X vs Android Studio 3
• Introducción el lenguaje
• VAR, VAL
• Manejo de Nulos
• if, when
• for, while
• Classes, Data Classes
• Extension Function
• Lambda Expressions
VAR y VAL
Pablo Angel Veliz
Variables
// Variables Inmutables SIN Declaración de Tipo:
val nombre = “Pablo"
val edad = 22
// Variables Inmutables CON Declaración de Tipo:
val otroNombre : String = “Pablo"
val otroEdad : Int = 22
// Variables mutables
var pais = "Argentina"
var otroPais : String = "Argentina"
Manejo de Nulos
Pablo Angel Veliz
Manejo de Nulos
var parametro: String? = null
Si luego quiero realizar una operación como con Java usando el length, tendremos el siguiente problema:
Pablo Angel Veliz
Manejo de Nulos
var i: Int? = parametro?.length
¿que es esto? es una "safety operation" u operación "segura" como Kotlin lo llama. Básicamente, en ambos
lados declaramos con el "?" que la operación puede dar null y esto NO dará Null Pointer Exception.
Si estamos completamente seguros que la variable es segura y no dará problema de nulos, Kotlin nos deja
declararlo de la siguiente manera:
var i: Int = parametro!!.length
FOR (loop)
Pablo Angel Veliz
FOR
El “for” se hace un tanto diferente a Java
for(i in 1..10) {
println("El valor de i: $i")
}
for(c in "Kotlin") {
println(c)
}
val lenguajes = listOf("java", "c++", "kotlin")
for( leng in lenguajes) {
println(leng)
}
for ( i in 10 downTo 1) {
println(i)
}
for ( i in 10 downTo 1 step 2) {
println(i)
}
WHILE (loop)
Pablo Angel Veliz
WHILE
var i = 1
while(i <= 10) {
println(i)
i++
}
do {
println(i)
i++
} while (i <= 10)
Pablo Angel Veliz
WHEN
En lugar de Switch tengo When y es mucho mas poderoso!
var precio = 29
when(precio) {
0 -> println("Es cero!")
in 1..10 -> println("Está de oferta!")
!in 1..10 -> println("NO Está de oferta!")
in 11..29 -> println("Está correctoa!")
else -> println("Posible Error!")
}
when {
precio <= 10 -> println("Está de oferta!")
}
var resultado = when {
precio <= 10 -> 11
else -> 0
}
CLASS y DATA CLASS
Pablo Angel Veliz
Classes
El concepto de clases es muy similar al de java.
class Aula1 (name: String, floor: Int) {
val nombre: String
val piso: Int
init {
this.nombre = name
this.piso = floor
}
}
// Botón derecho, "join declaration and assigment"
class Aula2 (name: String, floor: Int) {
val nombre: String = name
val piso: Int = floor
}
// Botón derecho, "Move to Constructor"
class Aula3 (val nombre: String, val piso: Int) {
}
Pablo Angel Veliz
Métodos
class persona (val name : String) {
fun localizar() {
}
fun yaExiste1() : Boolean {
return name.isBlank()
}
// Convert to "Expression Body"
fun yaExiste2() : Boolean = name.isBlank()
}
Pablo Angel Veliz
Data Classes
Data Classes también es un concepto nuevo que no existe en Java.
class DireccionTipoClass(val calle : String,
val numero: String,
val cp: String,
val localidad: String)
data class DireccionTipoDATAClass(val calle : String,
val numero: String,
val cp: String,
val localidad: String)
// Ahora DireccionTipoDATAClass tiene automáticamente métodos como: equals(), copy()...
fun main() {
val Oficina1 = DireccionTipoClass("Thames", "2215", "1024", "Palermo")
val Oficina2 = DireccionTipoDATAClass("Thames", "2215", "1024", "Palermo")
val Oficina3 = Oficina2.copy()
}
Pablo Angel Veliz
Herencia
En Kotlin, los tipos de clases son por default "final". Para que una clase puede tener herencias, debe ser una
"Open Class". En java por default todas las clases son Open en Kotlin no.
open class Forma(val name: String) {
open fun area() = 0.0
}
class Circulo(name: String, val radius: Double) : Forma(name) {
override fun area() = Math.PI * Math.pow(radius, 2.0)
}
fun principalHerencia() {
val circulo = Circulo("pequeño circulo", 2.0)
val area = circulo.area()
}
Pablo Angel Veliz
instanceof <-> is
“is” es el equivalente a “instanceof” de java
fun smartCast() {
val movil : Drivable = Bicileta()
movil.drive()
if(movil is Bicileta) {
movil.cambiarRueda()
}
if(movil is Barco) {
movil.iniciarMotor()
}
}
LAMBDA
Pablo Angel Veliz
Lambda Expression
Las expresiones lambda permiten pasar funcionalidad como argumento de una forma muy simple y sin tener
que usar clases anónimas. Esto hace que simplifique mucho la codificación.
El formal en general de una expresión lambda es:
{
param1, param2 -> //parámetros separados por coma
param1 + param2 //código a ejecutar
}
Pablo Angel Veliz
Lambda Expression
Supongamos temenos la típica acción de Click, en java sería:
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
doSomething();
}
});
Pablo Angel Veliz
Lambda Expression
En Koltlin quedaría:
button.setOnClickListener({ view -> doSomething() })
Pablo Angel Veliz
Lambda Expression
Aplicación Práctica: llevamos el típico selector de menú a un código mucho mas limpio usando Lambda y When
EXTENSION FUNCTION
Pablo Angel Veliz
Extension Functions
Las “extension function” son una de las grandes novedades de Kotlin y es un tema muy potente. Básicamente
una extension function me permite extender cualquier objeto.
fun String.comparando(): String {
this.compareTo("Hola")
return "Estás igual!"
}
fun TestEF () {
val texto : String = ""
var resultado = texto.comparando()
}
Pablo Angel Veliz
Extension Functions
El siguiente código es uno de los tantos ejemplos prácticos que se pueden usar:
val etHolaMundo = findViewById(R.id.et_HolaMundo) as TextView
if( etHolaMundo.text.toString().isBlank() ) {
etHolaMundo.text = "Ahora tiene un valor"
}
if (etHolaMundo.estaVacio()) {
etHolaMundo.text = "Ahora tiene un valor"
}
}
private fun TextView.estaVacio() = this.text.toString().isBlank()
PRACTICA!

Más contenido relacionado

Similar a Android+Kotlin - Meetup 12 de Octubre del 2017 Buenos Aires Argentina

Curso Swift
Curso SwiftCurso Swift
Curso SwiftPlatzi
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es VietnamAlex Casquete
 
Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11Cein
 
Joption pane en java
Joption pane en javaJoption pane en java
Joption pane en javaRobert Wolf
 
Introducción a la programación en java
Introducción a la programación en javaIntroducción a la programación en java
Introducción a la programación en javaIvan Alvarado
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxFamiliaAyluardo
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swiftbetabeers
 
Programacion Funcional en el Mundo Real - Introduccion a F#
Programacion Funcional en el Mundo Real - Introduccion a F#Programacion Funcional en el Mundo Real - Introduccion a F#
Programacion Funcional en el Mundo Real - Introduccion a F#Roberto Aranda Lopez
 
Informe Final Del Proyecto Poo
Informe Final Del Proyecto PooInforme Final Del Proyecto Poo
Informe Final Del Proyecto PooEPN
 
Manual en equipo
Manual en equipoManual en equipo
Manual en equipoJuan Solis
 
Manual en equipo
Manual en equipoManual en equipo
Manual en equipoJuan Solis
 

Similar a Android+Kotlin - Meetup 12 de Octubre del 2017 Buenos Aires Argentina (20)

Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Excel y visual basic
Excel y visual basicExcel y visual basic
Excel y visual basic
 
Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
 
Adapter pattern easy
Adapter pattern easyAdapter pattern easy
Adapter pattern easy
 
Variables
VariablesVariables
Variables
 
PRESENTACION
PRESENTACIONPRESENTACION
PRESENTACION
 
TutorialKotlin.docx
TutorialKotlin.docxTutorialKotlin.docx
TutorialKotlin.docx
 
Joption pane en java
Joption pane en javaJoption pane en java
Joption pane en java
 
Introducción a la programación en java
Introducción a la programación en javaIntroducción a la programación en java
Introducción a la programación en java
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
uControl Nº _ 03-.pdf
uControl Nº _ 03-.pdfuControl Nº _ 03-.pdf
uControl Nº _ 03-.pdf
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Programacion Funcional en el Mundo Real - Introduccion a F#
Programacion Funcional en el Mundo Real - Introduccion a F#Programacion Funcional en el Mundo Real - Introduccion a F#
Programacion Funcional en el Mundo Real - Introduccion a F#
 
Informe Final Del Proyecto Poo
Informe Final Del Proyecto PooInforme Final Del Proyecto Poo
Informe Final Del Proyecto Poo
 
Mod2ud2 1
Mod2ud2 1Mod2ud2 1
Mod2ud2 1
 
Manual en equipo
Manual en equipoManual en equipo
Manual en equipo
 
Manual en equipo
Manual en equipoManual en equipo
Manual en equipo
 

Android+Kotlin - Meetup 12 de Octubre del 2017 Buenos Aires Argentina

  • 1. Android+Kotlin MEETUP 12 Octubre 2017 LUGAR: IT Master (https://www.itmaster.com.ar/) Pablo Angel Veliz @paveliz www.linkedin.com/in/pabloveliz/ paveliz.blogspot.com.ar/ github.com/paveliz/
  • 2. Android+Kotlin: Primeros Pasos Pablo Angel Veliz @paveliz www.linkedin.com/in/pabloveliz/ paveliz.blogspot.com.ar/ Soy desarrollador e instructor de Android desde hace más de 4 años. Actualmente doy clases en IT Master y estoy a cargo del curso OnLine de la Universidad Tecnológica Nacional (UTN). Estoy a cargo de un equipo de desarrollos mobile y web en VN Studios (http://www.vnstudios.com). Fui co-fundador y estuve a cargo del desarrollo de pickmebus (www.pickmebus.com), una aplicación social con el objetivo de socializar y mejorar el trasporte público en colectivo (bus). github.com/paveliz/
  • 4. Pablo Angel Veliz Android+Kotlin: ¿Por qué Kotlin? CONCISO: reducción de código innecesario SAFE: Permite evitar errores como los famosos “null pointer exception”. INTEROPERABILIDAD: Compatible con lo existente (JVM, Android, Navegador). TOOL-FRIENDLY: Se puede desarrollar con cualquier IDE.
  • 5. Pablo Angel Veliz Android+Kotlin: ¿Por qué Kotlin? JVM Android Browser Native
  • 6. Pablo Angel Veliz Android+Kotlin: ¿Por qué Kotlin? JVM Kotlin es ideal para el desarrollo de aplicaciones server-side. Como ya se sabe, es compatible con cualquier stack basado en java. Referencia: https://kotlinlang.org/docs/reference/server- overview.html
  • 7. Pablo Angel Veliz Android+Kotlin: ¿Por qué Kotlin? Browser Kotlin tiene una implementación de front-end, traduciendo (transpiling) kotlin a JavaScript. Referencia: https://kotlinlang.org/docs/reference/js- overview.html
  • 8. Pablo Angel Veliz Android+Kotlin: ¿Por qué Kotlin? Native Es un proyecto de LLVM (Low Level Virtual Machine) para permitir compilaciones donde no es posible tener la virtual machine…, ejemplo iOS. Referencia: https://github.com/JetBrains/kotlin-native
  • 9. Pablo Angel Veliz Android+Kotlin: ¿Por qué Kotlin? Android Kotlin ya es lenguaje oficial de desarrollo en Android. Referencia: https://kotlinlang.org/docs/reference/android- overview.html
  • 13. Pablo Angel Veliz Android+Kotlin: WORKSHOP • Kotlin en Android Studio 2.X vs Android Studio 3 • Introducción el lenguaje • VAR, VAL • Manejo de Nulos • if, when • for, while • Classes, Data Classes • Extension Function • Lambda Expressions
  • 15. Pablo Angel Veliz Variables // Variables Inmutables SIN Declaración de Tipo: val nombre = “Pablo" val edad = 22 // Variables Inmutables CON Declaración de Tipo: val otroNombre : String = “Pablo" val otroEdad : Int = 22 // Variables mutables var pais = "Argentina" var otroPais : String = "Argentina"
  • 17. Pablo Angel Veliz Manejo de Nulos var parametro: String? = null Si luego quiero realizar una operación como con Java usando el length, tendremos el siguiente problema:
  • 18. Pablo Angel Veliz Manejo de Nulos var i: Int? = parametro?.length ¿que es esto? es una "safety operation" u operación "segura" como Kotlin lo llama. Básicamente, en ambos lados declaramos con el "?" que la operación puede dar null y esto NO dará Null Pointer Exception. Si estamos completamente seguros que la variable es segura y no dará problema de nulos, Kotlin nos deja declararlo de la siguiente manera: var i: Int = parametro!!.length
  • 20. Pablo Angel Veliz FOR El “for” se hace un tanto diferente a Java for(i in 1..10) { println("El valor de i: $i") } for(c in "Kotlin") { println(c) } val lenguajes = listOf("java", "c++", "kotlin") for( leng in lenguajes) { println(leng) } for ( i in 10 downTo 1) { println(i) } for ( i in 10 downTo 1 step 2) { println(i) }
  • 22. Pablo Angel Veliz WHILE var i = 1 while(i <= 10) { println(i) i++ } do { println(i) i++ } while (i <= 10)
  • 23. Pablo Angel Veliz WHEN En lugar de Switch tengo When y es mucho mas poderoso! var precio = 29 when(precio) { 0 -> println("Es cero!") in 1..10 -> println("Está de oferta!") !in 1..10 -> println("NO Está de oferta!") in 11..29 -> println("Está correctoa!") else -> println("Posible Error!") } when { precio <= 10 -> println("Está de oferta!") } var resultado = when { precio <= 10 -> 11 else -> 0 }
  • 24. CLASS y DATA CLASS
  • 25. Pablo Angel Veliz Classes El concepto de clases es muy similar al de java. class Aula1 (name: String, floor: Int) { val nombre: String val piso: Int init { this.nombre = name this.piso = floor } } // Botón derecho, "join declaration and assigment" class Aula2 (name: String, floor: Int) { val nombre: String = name val piso: Int = floor } // Botón derecho, "Move to Constructor" class Aula3 (val nombre: String, val piso: Int) { }
  • 26. Pablo Angel Veliz Métodos class persona (val name : String) { fun localizar() { } fun yaExiste1() : Boolean { return name.isBlank() } // Convert to "Expression Body" fun yaExiste2() : Boolean = name.isBlank() }
  • 27. Pablo Angel Veliz Data Classes Data Classes también es un concepto nuevo que no existe en Java. class DireccionTipoClass(val calle : String, val numero: String, val cp: String, val localidad: String) data class DireccionTipoDATAClass(val calle : String, val numero: String, val cp: String, val localidad: String) // Ahora DireccionTipoDATAClass tiene automáticamente métodos como: equals(), copy()... fun main() { val Oficina1 = DireccionTipoClass("Thames", "2215", "1024", "Palermo") val Oficina2 = DireccionTipoDATAClass("Thames", "2215", "1024", "Palermo") val Oficina3 = Oficina2.copy() }
  • 28. Pablo Angel Veliz Herencia En Kotlin, los tipos de clases son por default "final". Para que una clase puede tener herencias, debe ser una "Open Class". En java por default todas las clases son Open en Kotlin no. open class Forma(val name: String) { open fun area() = 0.0 } class Circulo(name: String, val radius: Double) : Forma(name) { override fun area() = Math.PI * Math.pow(radius, 2.0) } fun principalHerencia() { val circulo = Circulo("pequeño circulo", 2.0) val area = circulo.area() }
  • 29. Pablo Angel Veliz instanceof <-> is “is” es el equivalente a “instanceof” de java fun smartCast() { val movil : Drivable = Bicileta() movil.drive() if(movil is Bicileta) { movil.cambiarRueda() } if(movil is Barco) { movil.iniciarMotor() } }
  • 31. Pablo Angel Veliz Lambda Expression Las expresiones lambda permiten pasar funcionalidad como argumento de una forma muy simple y sin tener que usar clases anónimas. Esto hace que simplifique mucho la codificación. El formal en general de una expresión lambda es: { param1, param2 -> //parámetros separados por coma param1 + param2 //código a ejecutar }
  • 32. Pablo Angel Veliz Lambda Expression Supongamos temenos la típica acción de Click, en java sería: button.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ doSomething(); } });
  • 33. Pablo Angel Veliz Lambda Expression En Koltlin quedaría: button.setOnClickListener({ view -> doSomething() })
  • 34. Pablo Angel Veliz Lambda Expression Aplicación Práctica: llevamos el típico selector de menú a un código mucho mas limpio usando Lambda y When
  • 36. Pablo Angel Veliz Extension Functions Las “extension function” son una de las grandes novedades de Kotlin y es un tema muy potente. Básicamente una extension function me permite extender cualquier objeto. fun String.comparando(): String { this.compareTo("Hola") return "Estás igual!" } fun TestEF () { val texto : String = "" var resultado = texto.comparando() }
  • 37. Pablo Angel Veliz Extension Functions El siguiente código es uno de los tantos ejemplos prácticos que se pueden usar: val etHolaMundo = findViewById(R.id.et_HolaMundo) as TextView if( etHolaMundo.text.toString().isBlank() ) { etHolaMundo.text = "Ahora tiene un valor" } if (etHolaMundo.estaVacio()) { etHolaMundo.text = "Ahora tiene un valor" } } private fun TextView.estaVacio() = this.text.toString().isBlank()

Notas del editor

  1. Kotlin tiene de una forma más natural implementado los conceptos de "inmutabilidad" de las variables. ¿qué significa esto?, básicamente el concepto habla de que el valor de una variable NO pueda ser modificado luego de su inicialización. En Java, todas las variables/objetos mutan (a menos que estén indicadas explícitamente como "final"). Mutar significa básicamente, que cualquier otra parte del código podría modificar su valor. En Kotlin usaremos "val" usualmente para justamente crear variables inmutables. De hecho, el propio Android Studio al ver que definimos una variable cuyo valor es luego modificado o caso contrario, nunca se modifica, hará automáticamente la sugerencia de cambiar un var a un val o viceversa. Otro tema muy interesante en Kotlin es que NO necesito declarar los tipos, los mismos se infieren de su contenido.