SlideShare una empresa de Scribd logo
Kotlin
Programming
Language
CONSTRUCCIÓN DE
INTERFACES DE USUARIO
1er Cuatrimestre de 2019
Hello World
2
class Greeter(val name: String) {
fun greet() {
println("Hola $name")
}
}
fun main(args: Array<String>) {
Greeter(args[0]).greet()
}
package ar.edu.unq.ui.greeting;
public class Greeter {
private String name;
public Greeter(String name) {
this.name = name;
}
public void greet() {
System.out.println("Hello " + name);
}
public static void main(String[] args)
{
new Greeter(args[0]).greet();
}
}
◎ Package opcional
◎ Entry point como función
(no necesita estar en una clase)
◎ Los ; son opcionales
◎ Scope public por default
◎ Constructor primario en la
declaración
Consideraciones
◎ Esta clase es una presentación de Kotlin.
◎ No es una guía exhaustiva.
◎ Todo nuevo lenguaje se aprende codeando.
◎ Cuando surjan dudas primero vayan a
https://kotlinlang.org/docs/reference/
◎ También tienen guías nativas en
https://play.kotlinlang.org/koans/
◎ Y tienen las Prácticas y los TPs para codear.
3
Acerca de Kotlin
◎ Lenguaje de Propósito General
◎ Multi Plataforma
◎ Tipado Estático
◎ Inferencia de Tipos
4
◎ Puede compilar a
○ JVM (por ahora solo
nos importa este)
○ Android
○ Javascript
○ Assembler Nativo
◉ iOS
◉ MacOS
◉ Windows
◉ Linux
◉ WebAssembly
◎ Desarrollado por JetBrains
◎ El nombre fue dado por la Isla
de Kotlin, cerca de San
Petersburgo (Rusia)
◎ Vamos a usar la versión 1.3
Funciones
5
fun printMessage(message: String): Unit {
println(message)
}
fun printMessageWithPrefix(message: String, prefix: String = "Info") {
println("[$prefix] ${message}")
}
fun sum(x: Int, y: Int): Int {
return x + y
}
fun multiply(x: Int, y: Int) = x * y
fun main() {
printMessage("Hello")
printMessageWithPrefix("Hello", "Log")
printMessageWithPrefix("Hello")
printMessageWithPrefix(prefix = "Log", message = "Hello")
println(sum(1, 2))
}
Variables
6
// Variable mutable tipada e inicializada
var a: String = "initial"
// Variable inmutable tipada e inicializada
val b: Int = 1
// Variable inmutable inicializada con inferencia de tipo
val c = 3
// Variable mutable declarada con tipo sin inicializar
var d: Int
// Variable inmutable declarada con tipo sin inicializar
val e: Int
// No se rompe la inmutabilidad con la asignación condicional
if (someCondition()) { e = 1 } else { e = 2 }
Null Safety
7
var neverNull: String = "Esta variable no puede ser null"
neverNull = null // Compilation Error
var nullable: String? = "Esta variable puede ser null"
nullable = null // Todo bien
var inferredNonNull = "La inferencia de tipo no permite nullable"
inferredNonNull = null // Compilation Error
// Argumento no nullable
fun strLength(strNotNull: String): Int = strNotNull.length
strLength(neverNull) // Todo bien
strLength(nullable) // Compilation Error
// Argumento nullable
fun describeString(maybeString: String?): String {
if (maybeString != null) { return "Caracteres = ${maybeString.length}" }
else { return "Eso no es un string, es null" }
}
// Argumento y resultado nullable
fun strLengthNulleable(maybeString: String?): Int? = strNotNull?.length
Clases (I)
8
// Si se declara una clase "vacía", se pueden omitir las llaves
class Customer
// El header puede contener las propiedades
// y funciona como constructor
class Contact(val id: Int, var email: String)
fun main() {
val customer = Customer() // No se necesita new, sí los ()
val contact = Contact(1, "mary@gmail.com")
// Accessors automáticos
println(contact.id)
contact.email = "jane@gmail.com"
}
Clases (II): Herencia
9
class FinalDog // Por defecto las clases son final
class Bulldog : FinalDog // Error de compilación, Dog es final
// Para que pueda ser heredada hay que marcarla como open
open class Dog {
// Lo mismo para los métodos, por defecto no se pueden sobreescribir
open fun sayHello() = println("wof wof!")
fun finalHello() = println("soy irremplazable")
}
class Yorkshire : Dog() {
override fun sayHello() = println("wif wif!")
// Error de compilación
override fun finalHello() = println("soy irremplazable")
}
fun main() {
val dog: Dog = Yorkshire()
dog.sayHello() // Output: wif wif!
}
Uso del Condicional (if)
10
var max = a
// Uso tradicional
if (a < b) {
max = b
}
if (a > b) {
max = a
} else {
max = b
}
◎ En Kotlin if no es una estructura de control sino una expresión.
◎ Con lo cual siempre retorna un valor.
// Uso como expresión
val max = if (a > b) a else b
// Si se utilizan bloques,
// el valor del bloque
// es la última expresión
val max = if (a > b) {
print("a es mayor")
a
} else {
print("b es mayor")
b
}
val blue = "Blue"
val sameBlue = "Blue"
println(blue == sameBlue) // true
println(blue === sameBlue) // true, son la misma referencia
val numbers = setOf(1, 2, 3)
val sameNumbers = setOf(2, 1, 3)
println(numbers == sameNumbers) // true, son conjuntos iguales
println(numbers === sameNumbers) // false, son distintas referencias
val bart = User("Bart")
val bort = User("Bart")
println(bart == bort) // true, se llaman igual
println(bart === bort) // false, son distintas instancias
Igualdad
11
◎ = asignación
◎ == comparación estructural
◎ === comparación referencial
class User(val name: String) {
override fun equals(other: Any?): Boolean =
other is User && other.name == this.name
override fun hashCode(): Int =
name.hashCode()
}
Loops (for, while, do while)
12
val cakes = listOf(
"frutilla",
"merengue",
"chocolate"
)
// Se puede iterar directamente
// sobre los elementos
for (cake in cakes) {
println("Torta de $cake")
}
// Y también sobre los índices
for (i in array.indices) {
println(array[i])
}
◎ Funcionan de manera similar a otros lenguajes
var cakesEaten = 0
while (cakesEaten < 5) {
eatACake()
cakesEaten++
}
var cakesBaked = 0
do {
bakeACake()
cakesBaked++
} while (cakesBaked < 5)
Rangos
13
// Rango ascendente
for(i in 0..3) print(i)
// 0 1 2 3
// Rango ascendente con salto
for(i in 2..8 step 2) print(i)
// 2 4 6 8
// Rango descendente
for (i in 3 downTo 0) print(i)
// 3 2 1 0
// Rango descendente con salto
for (i in 9 downTo 0 step 3)
print(i)
// 9 6 3 0
// Rango ascendente de caracteres
for (c in 'a'..'d') print(c)
// a b c d
// Rango desc. de caract. con salto
for (c in 'z' downTo 's' step 2)
print(c)
// z x v t
// Se puede evaluar pertenencia
val x = 2
val inRange =
if (x in 1..10) print(x)
// true, 2
if (x !in 1..4) print(x)
// false
Clases Especiales (I): Data Classes
14
// Las Data Classes son ideales para almacenar información
// Definen automáticamente métodos como:
// equals(), copy(), hashCode(), toString()
data class User(val name: String, val id: Int)
fun main() {
val user = User("Alex", 1)
println(user) // User(name=Alex, id=1)
val secondUser = User("Alex", 1)
val thirdUser = User("Max", 2)
println(user == secondUser) // true
println(user == thirdUser) // false
// copy() genera una nueva instancia con las mismas propiedades
println(user.copy()) // User(name=Alex, id=1)
// Pero se pueden sobreescribir las propiedades deseadas
println(user.copy("Max")) // User(name=Max, id=1)
println(user.copy(id = 2)) // User(name=Alex, id=2)
}
Clases Especiales (II): Object
15
// Singleton of Prices
object Prices {
var standard: Int = 30
var holiday: Int = 50
var special: Int = 100
fun average() = sumAll() / 3
private fun sumAll() =
standard + holiday + special
}
fun main() {
println(Prices.standard) // 30
println(Prices.average()) // 60
}
◎ Un Object se puede pensar como la única instancia de una Clase
◎ Es en definitiva una aplicación del patrón Singleton
fun main() {
// Se puede utilizar como una expresión
// con propiedades y comportamiento
val unique = object {
var unique: Int = 42
fun average() =
(Prices.average() + unique) / 2
}
println(unique.average()) // 51
// Se le puede cambiar el estado
// (porque es una instancia ;)
unique.unique = 0
println(unique.average()) // 30
}
Colecciones (I): Listas & Conjuntos
16
val roots: List<String> = listOf("root", "groot")
val sudoers: MutableList<String> =
mutableListOf("tony", "steve", "bruce")
val planets: Set<String> = // Inmutable Set
setOf("tierra", "titan", "titan", "asgard", "tierra")
fun main() {
roots.add("fury") // <- Compilation Error
sudoers.add("carol")
println("${roots.size}") // 2
for (root in roots) println(root) // root, groot
sudoers.forEach { e -> println(e) } // tony, steve, bruce, carol
planets.forEach { println(it) } // tierra, titan, asgard
}
◎ Una list es una colección ordenada de elementos.
◎ Puede ser mutable o inmutable.
◎ Un set es una lista sin repetidos.
Colecciones (II): Maps
17
val codes: Map<Int, String> = mapOf(1 to "Intro", 2 to "Orga", 3 to "Mate1")
val approved: MutableMap<String, Int> =
mutableMapOf("Intro" to 10, "Orga" to 8, "Obj1" to 9)
fun approved(code: Int) = approved.containsKey(codes[code])
fun score(name: String): Int? =
if (approved.containsKey(name)) approved.getValue(name) else null
fun main() {
println(approved(1)) // true
println(approved(3)) // false
println(score("Intro")) // 10
println(score("UI")) // null
approved.forEach { key, value -> println("$key: $value") }
// Intro: 10, Orga: 8, Obj1: 9
codes.forEach { println("${it.key}: ${it.value}") }
// 1: Intro, 2: Orga, 3: Mate1
}
◎ Un map es una colección clave/valor. Puede ser mutable o inmutable.
18
Operaciones con Colecciones
val list = listOf(1, 2, 3)
Filter list.filter { it > 2 } // [3]
Map list.map { it * 2 } // [2, 4, 6]
Any, All, None list.any { it == 2 } // true
Find, FindLast list.find { it > 3 } // null
First, Last list.first() // 1
Count list.count { it > 1 } // 2
Min, Max list.max() // 3
Sorted list.sortedBy { -it } // [3, 2, 1]
Get or Else list.getOrElse(7) { 42 } // 42
Uff...
19
◎ Hasta acá un pantallazo de cómo se puede
programar en Kotlin
◎ Tienen mucho más para investigar
◎ ¿Vemos un ejemplo en PC?

Más contenido relacionado

La actualidad más candente

Sudoku
SudokuSudoku
Sudoku
alberpilot
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Richard Eliseo Mendoza Gafaro
 
Ejercicios de programacion concurrente
Ejercicios de programacion concurrenteEjercicios de programacion concurrente
Ejercicios de programacion concurrente
edgar muñoz
 
Hechos en clase
Hechos en claseHechos en clase
Hechos en clase
Řỉgö VẻGầ
 
Ejercicios python
Ejercicios pythonEjercicios python
Ejercicios python
Jasson Sánchez
 
Tipos basicos de java
Tipos basicos de javaTipos basicos de java
Tipos basicos de java
Cristian Reyes Molina
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
Jonathan Israel
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
Will Gomezz
 
Charla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScriptCharla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScript
Ricardo Pallás Román
 
Video 1 metodos y arreglos
Video 1 metodos y arreglosVideo 1 metodos y arreglos
Video 1 metodos y arreglos
Videoconferencias UTPL
 
Por qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que túPor qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que tú
Javier Acero
 
Python3000
Python3000Python3000
Python3000
wozgeass
 
Codigo en visual basic
Codigo en visual basicCodigo en visual basic
Codigo en visual basic
Nubia Espiritu Ruiz
 
Ejercicios java
Ejercicios javaEjercicios java
Ejercicios java
josesan999
 
C Funciones
C FuncionesC Funciones
C Funciones
Brivé Soluciones
 
Python03
Python03Python03
Python03
Victor Pando
 
Lección No. 1 de Python
Lección No. 1 de PythonLección No. 1 de Python
Lección No. 1 de Python
Victor Pando
 
Semana 4 Estructuras de datos(Listas)
Semana 4   Estructuras de datos(Listas)Semana 4   Estructuras de datos(Listas)
Semana 4 Estructuras de datos(Listas)
Richard Eliseo Mendoza Gafaro
 
Semana 6 Módulos en Python Entrega 1
Semana 6   Módulos en Python Entrega 1Semana 6   Módulos en Python Entrega 1
Semana 6 Módulos en Python Entrega 1
Richard Eliseo Mendoza Gafaro
 

La actualidad más candente (19)

Sudoku
SudokuSudoku
Sudoku
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
 
Ejercicios de programacion concurrente
Ejercicios de programacion concurrenteEjercicios de programacion concurrente
Ejercicios de programacion concurrente
 
Hechos en clase
Hechos en claseHechos en clase
Hechos en clase
 
Ejercicios python
Ejercicios pythonEjercicios python
Ejercicios python
 
Tipos basicos de java
Tipos basicos de javaTipos basicos de java
Tipos basicos de java
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
 
Charla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScriptCharla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScript
 
Video 1 metodos y arreglos
Video 1 metodos y arreglosVideo 1 metodos y arreglos
Video 1 metodos y arreglos
 
Por qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que túPor qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que tú
 
Python3000
Python3000Python3000
Python3000
 
Codigo en visual basic
Codigo en visual basicCodigo en visual basic
Codigo en visual basic
 
Ejercicios java
Ejercicios javaEjercicios java
Ejercicios java
 
C Funciones
C FuncionesC Funciones
C Funciones
 
Python03
Python03Python03
Python03
 
Lección No. 1 de Python
Lección No. 1 de PythonLección No. 1 de Python
Lección No. 1 de Python
 
Semana 4 Estructuras de datos(Listas)
Semana 4   Estructuras de datos(Listas)Semana 4   Estructuras de datos(Listas)
Semana 4 Estructuras de datos(Listas)
 
Semana 6 Módulos en Python Entrega 1
Semana 6   Módulos en Python Entrega 1Semana 6   Módulos en Python Entrega 1
Semana 6 Módulos en Python Entrega 1
 

Similar a 1.2. kotlin (1)

Coloreo de grafos
Coloreo de grafosColoreo de grafos
Coloreo de grafos
Jorge
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Videoconferencias UTPL
 
Lecture 37
Lecture 37Lecture 37
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
Jose Emilio Labra Gayo
 
Lab
LabLab
Lab
yito24
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase string
Jyoc X
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
jubacalo
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
edgar muñoz
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
cursobeta
 
Programación de código
Programación de códigoProgramación de código
Programación de código
Advanced Value Group, LLC
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2
xjordi
 
Informe Final Del Proyecto Poo
Informe Final Del Proyecto PooInforme Final Del Proyecto Poo
Informe Final Del Proyecto Poo
EPN
 
Tema3 p2%20
Tema3 p2%20Tema3 p2%20
NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
Shirley Contreras Ulloa
 
Kruskal
KruskalKruskal
Kruskal
Alhe' Wero
 
Kruskal
KruskalKruskal
Kruskal
Alhe' Wero
 
Perl3 subrutinas
Perl3 subrutinasPerl3 subrutinas
Perl3 subrutinas
Alfonso Alba
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
Jose Emilio Labra Gayo
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
GaloGabriel
 
Clase 2
Clase 2 Clase 2
Clase 2
Willy Aguirre
 

Similar a 1.2. kotlin (1) (20)

Coloreo de grafos
Coloreo de grafosColoreo de grafos
Coloreo de grafos
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
Lecture 37
Lecture 37Lecture 37
Lecture 37
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Lab
LabLab
Lab
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase string
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2
 
Informe Final Del Proyecto Poo
Informe Final Del Proyecto PooInforme Final Del Proyecto Poo
Informe Final Del Proyecto Poo
 
Tema3 p2%20
Tema3 p2%20Tema3 p2%20
Tema3 p2%20
 
NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
 
Kruskal
KruskalKruskal
Kruskal
 
Kruskal
KruskalKruskal
Kruskal
 
Perl3 subrutinas
Perl3 subrutinasPerl3 subrutinas
Perl3 subrutinas
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Clase 2
Clase 2 Clase 2
Clase 2
 

Más de xavazque2

258939538 dumping
258939538 dumping258939538 dumping
258939538 dumping
xavazque2
 
380914324 poo-kotlin
380914324 poo-kotlin380914324 poo-kotlin
380914324 poo-kotlin
xavazque2
 
146817358 android
146817358 android146817358 android
146817358 android
xavazque2
 
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlinCurso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
xavazque2
 
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
xavazque2
 
325940441 motion-ui
325940441 motion-ui325940441 motion-ui
325940441 motion-ui
xavazque2
 
371081023 curso-desarrollo-android
371081023 curso-desarrollo-android371081023 curso-desarrollo-android
371081023 curso-desarrollo-android
xavazque2
 
4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones
xavazque2
 
3.1 mvc-mvvm-app model-binding
3.1 mvc-mvvm-app model-binding3.1 mvc-mvvm-app model-binding
3.1 mvc-mvvm-app model-binding
xavazque2
 
5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http
xavazque2
 
435338801 programacion-mobile-android
435338801 programacion-mobile-android435338801 programacion-mobile-android
435338801 programacion-mobile-android
xavazque2
 
457126889 android-pdf
457126889 android-pdf457126889 android-pdf
457126889 android-pdf
xavazque2
 
266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor
xavazque2
 
7. react js-1
7. react js-17. react js-1
7. react js-1
xavazque2
 
Tp1
Tp1Tp1
484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf
xavazque2
 
484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf
xavazque2
 
5.layouts
5.layouts5.layouts
5.layouts
xavazque2
 
6.2. js
6.2. js6.2. js
6.2. js
xavazque2
 
2.1. arena-y-binding
2.1. arena-y-binding2.1. arena-y-binding
2.1. arena-y-binding
xavazque2
 

Más de xavazque2 (20)

258939538 dumping
258939538 dumping258939538 dumping
258939538 dumping
 
380914324 poo-kotlin
380914324 poo-kotlin380914324 poo-kotlin
380914324 poo-kotlin
 
146817358 android
146817358 android146817358 android
146817358 android
 
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlinCurso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
 
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
 
325940441 motion-ui
325940441 motion-ui325940441 motion-ui
325940441 motion-ui
 
371081023 curso-desarrollo-android
371081023 curso-desarrollo-android371081023 curso-desarrollo-android
371081023 curso-desarrollo-android
 
4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones
 
3.1 mvc-mvvm-app model-binding
3.1 mvc-mvvm-app model-binding3.1 mvc-mvvm-app model-binding
3.1 mvc-mvvm-app model-binding
 
5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http
 
435338801 programacion-mobile-android
435338801 programacion-mobile-android435338801 programacion-mobile-android
435338801 programacion-mobile-android
 
457126889 android-pdf
457126889 android-pdf457126889 android-pdf
457126889 android-pdf
 
266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor
 
7. react js-1
7. react js-17. react js-1
7. react js-1
 
Tp1
Tp1Tp1
Tp1
 
484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf
 
484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf
 
5.layouts
5.layouts5.layouts
5.layouts
 
6.2. js
6.2. js6.2. js
6.2. js
 
2.1. arena-y-binding
2.1. arena-y-binding2.1. arena-y-binding
2.1. arena-y-binding
 

Último

DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
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
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
Desarrollo de habilidades de pensamiento.docx
Desarrollo de habilidades de pensamiento.docxDesarrollo de habilidades de pensamiento.docx
Desarrollo de habilidades de pensamiento.docx
ortizjuanjose591
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
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
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
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
 
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
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
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
 
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
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
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
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 

Último (20)

DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
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
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
Desarrollo de habilidades de pensamiento.docx
Desarrollo de habilidades de pensamiento.docxDesarrollo de habilidades de pensamiento.docx
Desarrollo de habilidades de pensamiento.docx
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
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
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
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
 
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
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
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..
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
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
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 

1.2. kotlin (1)

  • 2. Hello World 2 class Greeter(val name: String) { fun greet() { println("Hola $name") } } fun main(args: Array<String>) { Greeter(args[0]).greet() } package ar.edu.unq.ui.greeting; public class Greeter { private String name; public Greeter(String name) { this.name = name; } public void greet() { System.out.println("Hello " + name); } public static void main(String[] args) { new Greeter(args[0]).greet(); } } ◎ Package opcional ◎ Entry point como función (no necesita estar en una clase) ◎ Los ; son opcionales ◎ Scope public por default ◎ Constructor primario en la declaración
  • 3. Consideraciones ◎ Esta clase es una presentación de Kotlin. ◎ No es una guía exhaustiva. ◎ Todo nuevo lenguaje se aprende codeando. ◎ Cuando surjan dudas primero vayan a https://kotlinlang.org/docs/reference/ ◎ También tienen guías nativas en https://play.kotlinlang.org/koans/ ◎ Y tienen las Prácticas y los TPs para codear. 3
  • 4. Acerca de Kotlin ◎ Lenguaje de Propósito General ◎ Multi Plataforma ◎ Tipado Estático ◎ Inferencia de Tipos 4 ◎ Puede compilar a ○ JVM (por ahora solo nos importa este) ○ Android ○ Javascript ○ Assembler Nativo ◉ iOS ◉ MacOS ◉ Windows ◉ Linux ◉ WebAssembly ◎ Desarrollado por JetBrains ◎ El nombre fue dado por la Isla de Kotlin, cerca de San Petersburgo (Rusia) ◎ Vamos a usar la versión 1.3
  • 5. Funciones 5 fun printMessage(message: String): Unit { println(message) } fun printMessageWithPrefix(message: String, prefix: String = "Info") { println("[$prefix] ${message}") } fun sum(x: Int, y: Int): Int { return x + y } fun multiply(x: Int, y: Int) = x * y fun main() { printMessage("Hello") printMessageWithPrefix("Hello", "Log") printMessageWithPrefix("Hello") printMessageWithPrefix(prefix = "Log", message = "Hello") println(sum(1, 2)) }
  • 6. Variables 6 // Variable mutable tipada e inicializada var a: String = "initial" // Variable inmutable tipada e inicializada val b: Int = 1 // Variable inmutable inicializada con inferencia de tipo val c = 3 // Variable mutable declarada con tipo sin inicializar var d: Int // Variable inmutable declarada con tipo sin inicializar val e: Int // No se rompe la inmutabilidad con la asignación condicional if (someCondition()) { e = 1 } else { e = 2 }
  • 7. Null Safety 7 var neverNull: String = "Esta variable no puede ser null" neverNull = null // Compilation Error var nullable: String? = "Esta variable puede ser null" nullable = null // Todo bien var inferredNonNull = "La inferencia de tipo no permite nullable" inferredNonNull = null // Compilation Error // Argumento no nullable fun strLength(strNotNull: String): Int = strNotNull.length strLength(neverNull) // Todo bien strLength(nullable) // Compilation Error // Argumento nullable fun describeString(maybeString: String?): String { if (maybeString != null) { return "Caracteres = ${maybeString.length}" } else { return "Eso no es un string, es null" } } // Argumento y resultado nullable fun strLengthNulleable(maybeString: String?): Int? = strNotNull?.length
  • 8. Clases (I) 8 // Si se declara una clase "vacía", se pueden omitir las llaves class Customer // El header puede contener las propiedades // y funciona como constructor class Contact(val id: Int, var email: String) fun main() { val customer = Customer() // No se necesita new, sí los () val contact = Contact(1, "mary@gmail.com") // Accessors automáticos println(contact.id) contact.email = "jane@gmail.com" }
  • 9. Clases (II): Herencia 9 class FinalDog // Por defecto las clases son final class Bulldog : FinalDog // Error de compilación, Dog es final // Para que pueda ser heredada hay que marcarla como open open class Dog { // Lo mismo para los métodos, por defecto no se pueden sobreescribir open fun sayHello() = println("wof wof!") fun finalHello() = println("soy irremplazable") } class Yorkshire : Dog() { override fun sayHello() = println("wif wif!") // Error de compilación override fun finalHello() = println("soy irremplazable") } fun main() { val dog: Dog = Yorkshire() dog.sayHello() // Output: wif wif! }
  • 10. Uso del Condicional (if) 10 var max = a // Uso tradicional if (a < b) { max = b } if (a > b) { max = a } else { max = b } ◎ En Kotlin if no es una estructura de control sino una expresión. ◎ Con lo cual siempre retorna un valor. // Uso como expresión val max = if (a > b) a else b // Si se utilizan bloques, // el valor del bloque // es la última expresión val max = if (a > b) { print("a es mayor") a } else { print("b es mayor") b }
  • 11. val blue = "Blue" val sameBlue = "Blue" println(blue == sameBlue) // true println(blue === sameBlue) // true, son la misma referencia val numbers = setOf(1, 2, 3) val sameNumbers = setOf(2, 1, 3) println(numbers == sameNumbers) // true, son conjuntos iguales println(numbers === sameNumbers) // false, son distintas referencias val bart = User("Bart") val bort = User("Bart") println(bart == bort) // true, se llaman igual println(bart === bort) // false, son distintas instancias Igualdad 11 ◎ = asignación ◎ == comparación estructural ◎ === comparación referencial class User(val name: String) { override fun equals(other: Any?): Boolean = other is User && other.name == this.name override fun hashCode(): Int = name.hashCode() }
  • 12. Loops (for, while, do while) 12 val cakes = listOf( "frutilla", "merengue", "chocolate" ) // Se puede iterar directamente // sobre los elementos for (cake in cakes) { println("Torta de $cake") } // Y también sobre los índices for (i in array.indices) { println(array[i]) } ◎ Funcionan de manera similar a otros lenguajes var cakesEaten = 0 while (cakesEaten < 5) { eatACake() cakesEaten++ } var cakesBaked = 0 do { bakeACake() cakesBaked++ } while (cakesBaked < 5)
  • 13. Rangos 13 // Rango ascendente for(i in 0..3) print(i) // 0 1 2 3 // Rango ascendente con salto for(i in 2..8 step 2) print(i) // 2 4 6 8 // Rango descendente for (i in 3 downTo 0) print(i) // 3 2 1 0 // Rango descendente con salto for (i in 9 downTo 0 step 3) print(i) // 9 6 3 0 // Rango ascendente de caracteres for (c in 'a'..'d') print(c) // a b c d // Rango desc. de caract. con salto for (c in 'z' downTo 's' step 2) print(c) // z x v t // Se puede evaluar pertenencia val x = 2 val inRange = if (x in 1..10) print(x) // true, 2 if (x !in 1..4) print(x) // false
  • 14. Clases Especiales (I): Data Classes 14 // Las Data Classes son ideales para almacenar información // Definen automáticamente métodos como: // equals(), copy(), hashCode(), toString() data class User(val name: String, val id: Int) fun main() { val user = User("Alex", 1) println(user) // User(name=Alex, id=1) val secondUser = User("Alex", 1) val thirdUser = User("Max", 2) println(user == secondUser) // true println(user == thirdUser) // false // copy() genera una nueva instancia con las mismas propiedades println(user.copy()) // User(name=Alex, id=1) // Pero se pueden sobreescribir las propiedades deseadas println(user.copy("Max")) // User(name=Max, id=1) println(user.copy(id = 2)) // User(name=Alex, id=2) }
  • 15. Clases Especiales (II): Object 15 // Singleton of Prices object Prices { var standard: Int = 30 var holiday: Int = 50 var special: Int = 100 fun average() = sumAll() / 3 private fun sumAll() = standard + holiday + special } fun main() { println(Prices.standard) // 30 println(Prices.average()) // 60 } ◎ Un Object se puede pensar como la única instancia de una Clase ◎ Es en definitiva una aplicación del patrón Singleton fun main() { // Se puede utilizar como una expresión // con propiedades y comportamiento val unique = object { var unique: Int = 42 fun average() = (Prices.average() + unique) / 2 } println(unique.average()) // 51 // Se le puede cambiar el estado // (porque es una instancia ;) unique.unique = 0 println(unique.average()) // 30 }
  • 16. Colecciones (I): Listas & Conjuntos 16 val roots: List<String> = listOf("root", "groot") val sudoers: MutableList<String> = mutableListOf("tony", "steve", "bruce") val planets: Set<String> = // Inmutable Set setOf("tierra", "titan", "titan", "asgard", "tierra") fun main() { roots.add("fury") // <- Compilation Error sudoers.add("carol") println("${roots.size}") // 2 for (root in roots) println(root) // root, groot sudoers.forEach { e -> println(e) } // tony, steve, bruce, carol planets.forEach { println(it) } // tierra, titan, asgard } ◎ Una list es una colección ordenada de elementos. ◎ Puede ser mutable o inmutable. ◎ Un set es una lista sin repetidos.
  • 17. Colecciones (II): Maps 17 val codes: Map<Int, String> = mapOf(1 to "Intro", 2 to "Orga", 3 to "Mate1") val approved: MutableMap<String, Int> = mutableMapOf("Intro" to 10, "Orga" to 8, "Obj1" to 9) fun approved(code: Int) = approved.containsKey(codes[code]) fun score(name: String): Int? = if (approved.containsKey(name)) approved.getValue(name) else null fun main() { println(approved(1)) // true println(approved(3)) // false println(score("Intro")) // 10 println(score("UI")) // null approved.forEach { key, value -> println("$key: $value") } // Intro: 10, Orga: 8, Obj1: 9 codes.forEach { println("${it.key}: ${it.value}") } // 1: Intro, 2: Orga, 3: Mate1 } ◎ Un map es una colección clave/valor. Puede ser mutable o inmutable.
  • 18. 18 Operaciones con Colecciones val list = listOf(1, 2, 3) Filter list.filter { it > 2 } // [3] Map list.map { it * 2 } // [2, 4, 6] Any, All, None list.any { it == 2 } // true Find, FindLast list.find { it > 3 } // null First, Last list.first() // 1 Count list.count { it > 1 } // 2 Min, Max list.max() // 3 Sorted list.sortedBy { -it } // [3, 2, 1] Get or Else list.getOrElse(7) { 42 } // 42
  • 19. Uff... 19 ◎ Hasta acá un pantallazo de cómo se puede programar en Kotlin ◎ Tienen mucho más para investigar ◎ ¿Vemos un ejemplo en PC?