Diego Albitres
It's just me, Dalb.
Docente: Flor Cárdenas Mariño
Tema: El lenguaje de programación Kotlin
U202016866 – Yamile Izaguirre
U202015652 – Diego Albitres
Ciclo: 2020-I
Kotlin es un lenguaje de programación de código abierto y gratuito, con usos múltiples. Tiene un tipado estático diseñado principalmente para la JVM (Máquina virtual de Java) y para desarrollo de aplicaciones para Android. Este combina características de programación funcional y la programación orientada a objetos. Además, se enfoca mucho en la interoperabilidad con Java, la claridad del lenguaje y el soporte de herramientas para su desarrollo.
La idea del lenguaje Kotlin surgió en 2011, cuando los programadores de la compañía JetBrains buscaban sustituir Java en proyectos de Android. Fue creado con el objetivo de que fuese un lenguaje con las características de Scala, pero sin todo el tiempo de compilación de este.
En 2012 empezó a ser un proyecto de código abierto bajo Licencia Apache y en 2014 se publicó un directorio de ejercicios para aprender este lenguaje. Finalmente, su primer versión estable (Kotlin v1.0) fue lanzada el 15 de febrero de 2016.
// archivo: holamundo.kt
package com.example.name
fun holaMundo() {
println("¡Hola, mundo!")
print("¡Kotlin!")
println("¡Es genial!")
}
// archivo: app.kt
import com.example.name.holaMundo
import kotlin.text.*
fun main(): Int {
holaMundo()
return 0
}
/*
Resultado:
¡Hola, mundo!
¡Kotlin! ¡Es genial!
*/fun main() {
val a: Int = 1
val b = 2
val c: Int
c = 3
var x = 5
x += 1
val entrada = readLine()
val entero = readLine()!!.toInt()
println("a + b + c es ${a + b + c + x}")
println("Entrada 1: $entrada")
println("Entrada 2: $entero")
}
/*
Resultado:
Dato1
50
a + b + c + x es 12
Entrada 1: Dato1
Entrada 2: 50
*/fun sumar(a: Int, b: Int) = a + b
fun mostrarSuma(a: Int, b: Int): Unit {
println("La suma es ${a + b}")
}
fun main() {
val a = readLine()!!.toInt()
val b = readLine()!!.toInt()
if (a >= 0 && b >= 0) {
println("Suma: ${sumar(a, b)}")
} else {
println("Solo números positivos.")
}
}
/*
Resultado:
5
25
Suma: 30
*/| Tipo | Valor Mínimo | Valor Máximo |
|---|---|---|
| Byte | -128 | 127 |
| Short | -32768 | 32767 |
| Int | -2,147,483,648 (-2^31) | 2,147,483,647 (2^31 - 1) |
| Long | -9,223,372,036,854,775,808 (-2^63) | 9,223,372,036,854,775,807 (2^63- 1) |
// El tipo de valor se infiere.
// Por defecto, los valores reciben el tipo Int a menos que se necesite un Long
val a = 1 // Int
val largo = 3000000000 // Long
val aLong = 1L // Long
val aByte: Byte = 1
// Para hacer los números largos más legibles, se puede utilizar _.
val millon = 1_000_000
val tarjeta = 1234_5678_9012_3456L
| Tipo | Cantidad de decimales |
|---|---|
| Float | 6-7 |
| Double | 15-16 |
// El tipo de valor se infiere.
// Por defecto, los valores que tengan decimales reciben el tipo Double
val pi = 3.14 // Double
val ejemplo1 = 2.7182818284 // Double
val ejemplo2 = 2.7182818284f // Float, por lo tanto queda como 2.7182817 (se aproxima)
// No hay conversión implicita de datos
fun main() {
fun mostrarDouble(d: Double) { print(d) }
val flo = 1.1f
val entero = 1
val dou = 1.1
mostrarDouble(dou)
mostrarDouble(entero) // Error de tipo de dato
mostrarDouble(flo) // Error de tipo de dato
}#include <bits/stdc++.h>
using namespace std;
int main() {
char letra;
cout << "Ingrese una letra: ";
cin >> letra;
int num = letra;
cout << "Código ASCII: " << num << endl;
}
/*
Resultado:
Ingrese una letra: F
Código ASCII: 70
*/fun main() {
print("Ingrese una letra:")
val letra = readLine()!!.toCharArray()[0]
val num = letra.toInt()
println("Código ASCII: $num")
/* o también: */
val letra = readLine()!!.toCharArray()[0].toInt()
println("Código ASCII: $letra")
}
/*
Resultado:
Ingrese una letra: F
Código ASCII: 70
*/Kotlin v1.0 se lanzó el 15 de febrero de 2016 y se considera la primera versión oficialmente estable.
Kotlin v1.1 se lanzó el 1 de marzo de 2017. En esta versión se incluye soporte oficial para compilar código a JavaScript y se introducen las co-rutinas como una función experimental.
Kotlin v1.2 se lanzó el 28 de noviembre de 2017. En esta versión se añadió la posibilidad de reusar el código entre plataformas (Java y JavaScript). Además, se añadió soporte experimental para proyectos multiplataforma.
Kotlin v1.3 fue lanzado el 29 de octubre de 2018, introduciendo soporte oficial para co-rutinas en funciones asíncronas.
Se aventuró a usar Kotlin como el lenguaje principal para su aplicación móvil, incluso antes de que Google anuncie el soporte oficial para Kotlin en aplicaciones de Android.
Es una aplicación escrita completamente en Kotlin. Los desarrolladores afirmaron que al elegir este lenguaje hubo una gran diferencia de comodidad, calidad y velocidad a favor.
Al no tener organizaciones separadas de Android y iOS, decidieron usar Kotlin porque esta se parece mucho a Swift y eso ayuda a que haya una mejor comunicación, intercambio de conocimientos entre ingenieros y un desarrollo más eficiente.
Una empresa constructora vende terrenos con la Forma I (ver figura). Realice un programa en Kotlin para obtener el área respectiva de un terreno de medidas de cualquier valor.
Nota: Para resolver este problema se debe identificar que la forma A está compuesta por dos figuras: un triángulo de base B y de altura (A - C); y por otro lado, un rectángulo que tiene base B y altura C.
Ejercicio tomado de la primera hoja de ejercicios de Algoritmos.
Forma I
B
A
C
(A - C)
fun main() {
print("Ingrese el valor de A: ")
val a = readLine()!!.toInt()
print("Ingrese el valor de B: ")
val b = readLine()!!.toInt()
print("Ingrese el valor de C: ")
val c = readLine()!!.toInt()
val areaTriangulo = (b * (a - c)) / 2
val areaRectangulo = b * c
val areaTotal = areaTriangulo + areaRectangulo
println("El área de la figura es $areaTotal")
}
/*
Ingrese el valor de A: 5
Ingrese el valor de B: 10
Ingrese el valor de C: 20
El área de la figura es 125
*/En una entidad del estado se está realizando un proceso de calificación del personal que labora en la misma. Conocedores de su habilidad en la programación le solicitan que escriba una aplicación que ayude a determinar el puntaje que obtiene un empleado.
Se le solicita que elabore un programa en Kotlin que reciba como datos la cantidad de años que el empleado labora en la entidad y los estudios realizados y nos determine e imprima el puntaje obtenido.
Ejercicio tomado de la sexta hoja de ejercicios de programación en C++.
| Estudios | Puntos |
|---|---|
| Primarios | 5 |
| Secundarios | 10 |
| Universitarios | 20 |
| Posgrado | 30 |
| Años | Puntos |
|---|---|
| < 5 | 5 |
| >= 5 | 10 |
Para realizar la calificación se tomará en cuenta los siguientes criterios de asignación de puntos:
fun main() {
print("Ingrese la cantidad de años que labora: ")
var years = readLine()!!.toInt()
print("Estudios (P: Primaria; S: Secundaria; U: Universitario; G: Posgrado): ")
var studies = readLine()!!.toCharArray()[0].toUpperCase()
var points: Int = 0
if (years < 5) {
points = 5
} else if (years >= 5) {
points = 10
}
when (studies) {
'P' -> points += 5
'S' -> points += 10
'U' -> points += 20
'G' -> points += 30
}
println("Puntaje obtenido: $points")
}
/*
Ingrese la cantidad de años que labora: 7
Estudios (P: Primaria; S: Secundaria; U: Universitario; G: Posgrado): U
Puntaje obtenido: 30
*/Una empresa de transporte desea contar con una aplicación, que permita descomponer el código de salida de sus buses y determinar el departamento de destino, hora de salida y si se realizan paradas o no. Para desarrollar la aplicación, se debe considerar que todos los códigos de salida tienen 4 dígitos, donde el primer dígito se utiliza para determinar el departamento de destino, los siguientes 2 dígitos indican la hora de salida y el último dígito señala si se realizan paradas o no.
Se le pide a usted elaborar un programa en Kotlin que solicite UN código de salida (de 4 dígitos, dato que tiene que validar) y determine el departamento, hora de salida y si se realizan paradas o no y muestre un mensaje en el siguiente formato:
Nota: No se olvide de realizar las validaciones necesarias para que la aplicación funcione correctamente.
Ejercicio tomado de la novena hoja de ejercicios de programación en C++.
| Código | Departamento |
|---|---|
| 1 | Piura |
| 2 | Ica |
| 3 | Ayacucho |
| Código | Paradas |
|---|---|
| 1 | Sí |
| 2 | No |
Para determinar el departamento y si se realizan paradas o no deberá utilizar las siguientes tablas:
fun main() {
print("Ingrese un código de salida: ")
val code = readLine()!!.toInt()
val cityCode: Int = code / 1000
val hour: Int = (code % 1000) / 10
val stopCode: Int = ((code % 1000) % 10)
var city: String = ""
var stop: String = ""
when (cityCode) {
1 -> city = "Piura"
2 -> city = "Ica"
3 -> city = "Ayacucho"
}
when (stopCode) {
1 -> stop = "Sí"
2 -> stop = "No"
}
println("Departamento de destino: $city")
println("Hora de salida: $hour")
println("Realizan paradas: $stop")
}
/*
Ingrese un código de salida: 1182
Departamento de destino: Piura
Hora de salida: 18
Realizan paradas: No
*/Una empresa de software tiene planificado comprar programas para el desarrollo de aplicaciones móviles. El costo es variable según el fabricante elegido. También deberá elegir el tipo de programa y si es Lenguaje de Programación debe elegir el dispositivo (Celulares, Tablas y Otros). La tabla de precios es la siguiente:
Se le pide elaborar un programa en Kotlin que permita determinar el costo total por la compra del programa elegido si se tienen como datos el fabricante (M: Microsoft; A: Apple; L: Linux), el tipo de programa (S: Sistema operativo; L: Lenguaje de programación) y el dispositivo (C: Celular; T: Tabla; O: Otros).
Nota: Debe validar los datos de entrada para una correcta ejecución de su programa.
Ejercicio tomado de la tercera hoja de ejercicios de estructuras selectivas en C++.
import kotlin.system.exitProcess
fun getPricing(fabr: Char, disp: Char?): Int {
if (disp == null) {
when (fabr) {
'M' -> return 1500
'A' -> return 2500
'L' -> return 1000
}
} else {
when (fabr) {
'M' -> {
if (disp == 'C') return 1800
if (disp == 'T') return 1200
if (disp == 'L') return 900
}
'A' -> {
if (disp == 'C') return 1900
if (disp == 'T') return 1800
if (disp == 'L') return 1600
}
'L' -> {
if (disp == 'C') return 100
if (disp == 'T') return 150
if (disp == 'L') return 50
}
}
}
return 0
}fun main() {
print("Fabricante: ")
val fabr = readLine()!!.toCharArray()[0].toUpperCase()
if (!(fabr == 'M' || fabr == 'A' || fabr == 'L')) {
println("El fabricante ingresado no es válido.")
exitProcess(1)
}
print("Tipo de programa: ")
val type = readLine()!!.toCharArray()[0].toUpperCase()
if (!(type == 'S' || type == 'L')) {
println("El tipo de programa ingresado no es válido.")
exitProcess(1)
}
if (type == 'L') {
print("Ingrese el tipo de dispositivo: ")
val disp = readLine()!!.toCharArray()[0].toUpperCase()
if(!(disp == 'C' || disp == 'T' || disp == 'O')) {
print("El tipo de dispositivo ingresado no es válido.")
exitProcess(1)
}
println("Precio final: ${getPricing(fabr, disp)} soles.")
} else {
println("Precio final: ${getPricing(fabr, null)} soles.")
}
}/*
Fabricante: M
Tipo de programa: L
Ingrese el tipo de dispositivo: C
Precio final: 1800 soles.
*/Popko, A. (2018). 10 Android Apps Written in Kotlin - Examples of Successful Applications. Recuperado de: https://bit.ly/2xjgVbw.
Alcón, I. (2019). Kotlin, el lenguaje de programación de Android que usamos en Geographica. Recuperado de: https://bit.ly/2yTxJq8.
Kotlin Docs – Basic Syntax. (s.f.). Recuperado de: https://bit.ly/3aO74bt.
Kotlin Docs – Basic Types. (s.f.). Recuperado de: https://bit.ly/2zIMigz.
Kotlin Docs – Coding Conventions. (s.f.). Recuperado de: https://bit.ly/3bRqNZ5.
Primera hoja de ejercicios de Algoritmos. (2020). Recuperado de: https://bit.ly/2yR0Vho.
Sexta hoja de ejercicios de Programación en C++. (2020). Recuperado de: https://bit.ly/3aQpTKY.
Novena hoja de ejercicios de programación en C++. (2020). Recuperado de: https://bit.ly/2VOvYn2.
Tercera hoja de ejercicios de estructuras selectivas. (2020). Recuperado de: https://bit.ly/2xjRiaF.
By Diego Albitres
Presentación sobre el lenguaje de programación Kotlin. Trabajo Parcial del curso de Programación I de la UPC - Ciclo: 2020-I.