SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
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

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

Coloreo de grafos
Coloreo de grafosColoreo de grafos
Coloreo de grafosJorge
 
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
 
Jyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc java-cap06 la clase string
Jyoc java-cap06 la clase stringJyoc X
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeansedgar muñoz
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01cursobeta
 
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 2xjordi
 
Informe Final Del Proyecto Poo
Informe Final Del Proyecto PooInforme Final Del Proyecto Poo
Informe Final Del Proyecto PooEPN
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadasGaloGabriel
 

Similar a 1.2. kotlin (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 dumpingxavazque2
 
380914324 poo-kotlin
380914324 poo-kotlin380914324 poo-kotlin
380914324 poo-kotlinxavazque2
 
146817358 android
146817358 android146817358 android
146817358 androidxavazque2
 
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-kotlinxavazque2
 
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-juegoxavazque2
 
325940441 motion-ui
325940441 motion-ui325940441 motion-ui
325940441 motion-uixavazque2
 
371081023 curso-desarrollo-android
371081023 curso-desarrollo-android371081023 curso-desarrollo-android
371081023 curso-desarrollo-androidxavazque2
 
4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones4.1. validaciones-y-excepciones
4.1. validaciones-y-excepcionesxavazque2
 
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-bindingxavazque2
 
5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_httpxavazque2
 
435338801 programacion-mobile-android
435338801 programacion-mobile-android435338801 programacion-mobile-android
435338801 programacion-mobile-androidxavazque2
 
457126889 android-pdf
457126889 android-pdf457126889 android-pdf
457126889 android-pdfxavazque2
 
266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventorxavazque2
 
7. react js-1
7. react js-17. react js-1
7. react js-1xavazque2
 
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-pdfxavazque2
 
484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdfxavazque2
 
2.1. arena-y-binding
2.1. arena-y-binding2.1. arena-y-binding
2.1. arena-y-bindingxavazque2
 

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

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Último (16)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

1.2. kotlin

  • 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?