anncode

[Android Native, Kotlin, Geek & Teacher]

Programación Funcional: Sistema de tipos 0 (0)

En la programación funcional, existe un concepto llamado «sistema de tipos» que juega un rol fundamental. Piénsalo como un conjunto de reglas que ayudan a mantener el orden y la seguridad en tu código.

Veamos cómo Kotlin maneja este concepto para hacer nuestro código más limpio y confiable.

¿Qué es este Sistema de Tipos y por qué es Importante?

En Kotlin, el sistema de tipos es esencial porque desempeña un papel crítico en la seguridad y la corrección del código.

  • Ayuda a prevenir errores comunes, como tratar de sumar un número con una cadena de texto.
  • Al especificar explícitamente los tipos de datos que una función acepta el código se vuelve más claro y autoexplicativo.
  • Refactorización Segur, el sistema de tipos te alerta sobre cualquier lugar en el código que necesita ser actualizado para que coincida con los nuevos tipos.

Kotlin: Amigo del Sistema de Tipos

Kotlin es un lenguaje de programación que le da mucha importancia al sistema de tipos, aunque con un toque de flexibilidad.

Esto significa que mientras nos permite ser un poco más relajados en comparación con otros lenguajes, aún establece reglas que mantienen las cosas bajo control.

Mira los tipos de datos que maneja Kotlin:

Ejemplo

Imagina que estás escribiendo un código para manejar diferentes Frutas.

Quieres asegurarte de que solo se utilicen nombres de frutas válidas, como «Manzana» o «Pera», y no nombres aleatorios como «Anahí Salgado».

El sistema de tipos en Kotlin te permite crear una estructura especial para las Frutas, de modo que solo se puedan usar los nombres correctos.

Supongamos que creamos una clase llamada Fruit para representar las estaciones del año:

class Fruit(val name: String)

fun setFruit(fruit: Fruit) {
    println("Name of the Fruit: ${fruit.name}")
}

fun main() {
    val apple: Fruit = Fruit("Apple")
    displayFruitName(apple)
}

Aquí, en lugar de simplemente usar una cadena para representar una fruta, hemos creado una clase llamada Fruit. Esto nos permite ser más específicos y garantizar que solo se utilicen valores válidos. La función setFruit solo aceptará objetos del tipo Fruit, asegurando que se utilicen las piezas adecuadas en el lugar correcto.

Mirando hacia el Futuro con Kotlin

Una de las cosas geniales de Kotlin es que te permite diseñar tus propios tipos de datos.

Puedes construir tipos que se ajusten perfectamente a tu problema.

Programación Funcional

El sistema de tipos es de vital importancia en la programación funcional por varias razones:

❇️ Inmutabilidad.

El sistema de tipos ayuda a garantizar la inmutabilidad al prevenir que los datos sean modificados de manera inesperada además de restringir la forma en que las funciones pueden interactuar con ellos.

🌀 Seguridad en la Refactorización.

El sistema de tipos permite realizar refactorizaciones con confianza, ya que los errores de tipo se detectan en tiempo de compilación.

📵 Prevención de Errores.

Un sistema de tipos sólido ayuda a prevenir errores comunes, como pasar argumentos incorrectos a una función o realizar operaciones no válidas.

💹 Seguridad y Confiabilidad.

El sistema de tipos contribuye a la seguridad y la confiabilidad del código al atrapar errores en tiempo de compilación en lugar de tiempo de ejecución.

🧬 Polimorfismo Controlado.

El sistema de tipos permite definir funciones polimórficas que pueden operar en varios tipos de datos, pero con restricciones bien definidas. Para que entiendas mejor esto mira Principios SOLID

Ahora sabemos cómo Kotlin maneja el sistema de tipos de manera inteligente. Aunque no es tan estricto como algunos otros lenguajes, sigue siendo un gran defensor de la integridad y la claridad del código.

Entonces, en tu próximo encuentro con Kotlin, recuerda que los tipos son como los buenos amigos que mantienen todo en orden y equilibrio en el mundo de la programación.

En mi Curso Esencial de Kotlin  te enseño todo desde cero y paso a paso con ejemplos reales, te dejé un regalo en este link.

😊 Gracias por comparitr haces un excelente trabajo divulgando conocimiento.

Métodos de conversión de datos en Kotlin 0 (0)

Prepara tu mente analítica, porque vamos a descubrir cómo estos métodos pueden enriquecer nuestra habilidad para manipular datos con eficiencia y precisión.

Recordemos lo que aprendimos en la lección pasada: en Kotlin, cada tipo de dato es un objeto en sí mismo. Esta característica única nos permite realizar operaciones y transformaciones entre tipos.

¿Recuerdas el ejercicio anterior donde calculábamos precios con impuestos?

¡Pues prepárate para realizar esas operaciones usando métodos especiales incorporados en los tipos de datos!

Operaciones de Alto Calibre

En lugar de recurrir a los operadores tradicionales, como el asterisco o la suma, podemos utilizar métodos específicos para los tipos de datos.

Por ejemplo, times y plus son métodos predefinidos en los tipos numéricos, permitiéndonos ejecutar cálculos complejos con una simple llamada.

¡Imagina la simplicidad de multiplicar o sumar valores con tan solo un método!

val price = 100.0
val taxes = 0.15
val total = price.times(1 + taxes) // Realiza el cálculo del precio con impuestos

Transformando con Precisión:

La magia no se detiene ahí. Los métodos de conversión te permiten cambiar el tipo de dato de manera fluida.

Supongamos que deseamos convertir un número Double a un número Float, con una precisión de solo 7 decimales.

Los métodos toFloat() y roundToInt() nos facilitan esta tarea.

val originalNumber = 12.3456789
val convertedNumber = originalNumber.toFloat().roundToInt() // Convierte y redondea

Transformando Strings en Números

En este fragmento de código, se muestra cómo realizar la conversión de datos en Kotlin utilizando métodos específicos para convertir un valor de tipo String a otros tipos de datos como Byte y Double.

Veamos cada parte en detalle:

val numberString = "1"

// Conversión de String a Byte
val numberByte: Byte = numberString.toByte()
println("El numero en byte es: $numberByte")

// Conversión de String a Double
val numberDouble = numberString.toDouble()
println("El numero en Double es: $numberDouble")

En primer lugar, se toma un valor representado como cadena "1" y se convierte en un tipo de dato Byte utilizando la función toByte().

Si la conversión no es válida dentro del rango del tipo Byte, se generará una excepción.

Luego, se efectúa una conversión similar convirtiendo la cadena en un tipo Double mediante toDouble(), lo que se realiza con éxito debido a la naturaleza numérica del valor.

Transformando en Símbolos:

Ahora, lo que puede parecer realmente emocionante es la conversión creativa.

¿Quieres convertir un número en un carácter y luego en un símbolo? ¡Vamos a explorar el código Unicode para hacerlo!

Por ejemplo, imprimamos símbolos como 💖

// ♡  0x2661
// ❤ 0x2764

val unicodeInt = 0x2661
val unicodeChar = unicodeInt.toChar()
val unicode = unicodeChar.toString()

println(unicode)

Estas conversiones subrayan cómo Kotlin facilita la conversión entre diferentes tipos de datos, pero es fundamental considerar las restricciones de rango y la precisión al realizar estas operaciones de conversión.

Todo esto que aprendiste es parte del Curso Esencial de Kotlin míralo completo a un precio especial solo aquí en mi sitio web.

😊 Gracias por comparitr haces un excelente trabajo divulgando conocimiento.

String y String Templates en Kotlin 0 (0)

En esta lección, vamos a sumergirnos en el emocionante mundo de los strings y string templates en Kotlin.

Es esencial comprender cómo funcionan y cómo podemos darles formato para mejorar la legibilidad y funcionalidad de nuestro código.

Prepara tu mente para lo que veremos a continuación.

Comprendiendo los Strings en Kotlin

Los strings en Kotlin son secuencias de caracteres que nos permiten almacenar y manipular texto. Imagina una caja llena de letras y símbolos que pueden combinarse para formar palabras y frases.

En lugar de manejar un solo carácter, como lo hacíamos con el tipo de dato char, ahora podemos trabajar con una secuencia completa.

Exacto de manera más profunda los strings son cadenas de chars.

Declarando Strings

Para declarar un string en Kotlin, podemos usar la palabra clave val seguida del nombre de la variable y asignarle el valor entre comillas dobles. Es un proceso sencillo que nos permite crear y almacenar texto de manera eficiente.

fun main() {
    val miTexto = "Hola, esto es un ejemplo de Kotlin"
    println(miTexto)
}

String Templates: Dinamismo y Formato

Ahora, prepárate para una verdadera joya: los string templates.

Estos son como varitas mágicas que te permiten insertar valores de variables y expresiones dentro de los strings.

Para crear un string template, utilizamos el signo de dólar seguido del nombre de la variable o la expresión encerrada en llaves.

${ soy un string template }

Ejemplo Práctico de String Template

Imaginemos que tenemos un producto con un precio de $15.25 y un impuesto del 16%. Podemos crear un string que combine el precio y el impuesto para mostrar el resultado final. Usando string templates, podemos construir el mensaje de la siguiente manera:

val price = 15.25
val tax = 0.16

val message = "El precio después de impuestos es: ${price * (1 + tax)}"

¡Boom! Con el uso de llaves y el signo de dólar, transformamos un simple string en una obra maestra dinámica.

Consejos para Usar String Templates

¡Cuidado! Aunque los string templates son como una caja de herramientas mágica, no te excedas. Utilízalos de manera inteligente para no llenar tu código con lógica compleja. Recuerda que la legibilidad es clave.

Siempre es una buena práctica mantener el código limpio y legible.

Conclusión y Próximos Pasos

Los strings y string templates son compañeros indispensables en Kotlin.

Te permiten manipular texto de manera efectiva y darle vida a tus mensajes.

Mantén los ojos abiertos para las próximas clases, donde exploraremos más trucos y técnicas para llevar tus habilidades en Kotlin al siguiente nivel. ¡No te lo pierdas!

Todo esto que aprendiste es parte del Curso Esencial de Kotlin míralo completo a un precio especial solo aquí en mi sitio web.

😊 Gracias por comparitr haces un excelente trabajo divulgando conocimiento.

Tipos de Datos Booleanos y Caracteres 0 (0)

Tipos de Datos Booleanos

Solo pueden tener un valor, ya sea verdadero o falso, por eso su tamaño en memoria es de 1 byte

Nombres para variables booleanos

Escribimos variables booleanas en forma de pregunta

val isLoggedIn = true

val hasAddress = false

Con estos datos booleanos podemos generar las siguietes operaciones:

  • and -> representado por &&
  • or -> representado por ||
  • not -> representado !

Mira los tipos de datos Numéricos en este Post

Operación And

ValorOperaciónValorResultado
trueand / &&truetrue
trueand / &&falsefalse
falseand / &&truefalse
falseand / &&falsefalse
En la operación And ambos valores deben ser true para que el resultado sea true

Operación Or

ValorOperaciónValorResultado
trueor / ||truetrue
trueor / ||falsetrue
falseor / ||truetrue
falseor / ||falsefalse
En la operación Or somos más flexibles y mientras cualquiera de los valores sea true nos dará como resultado true

Operación Not

ValorOperaciónResultado
truenot / !false
falsenot / !true
Esta operación niega el valor original

Operaciones Booleanas con Kotlin ejemplos

val isLoggedIn = true
val hasAddress = false

// Operación And
println(isLoggedIn && hasAddress) // Devuelve false
println(isLoggedIn.and(hasAddress)) // Al ser un objeto podemos usar su función and

// Utilizando Infix Functions de Kotlin podemos expresarlo así:
println(isLoggedIn and hasAddress) 

// Operación Not
println(!isLoggedIn) // Devuelve false
println(isLoggedIn.not()) // Al ser un objeto podemos usar su función not

Utilizando Infix Functions de Kotlin el código resulta mucho más simple y sencillo de leer. Kotlin ama el Clean Code 💜

Tipos de Datos Caracteres Char

Son diferentes a los tipo String

Su tamaño es de 2 bytes y las declaras usando comillas simples ' .

val keyPressed = 'a'

Secuencias de Escape más comunes Soportadas en Kotlin

Caracteres de EscapeResultado
\tGenera un espacio de tabulador
\nGenera un salto de línea
\'Nos permite poner una comilla simple ' dentro de un tipo de dato Char
\"Nos permite poner comillas dobles " dentro de un tipo de dato String
\\Nos permite poner una antidiagonal \ dentro de un tipo de dato String
\$Nos permite poner el símbolo de $

Ejemplos

val keyPressed = 'a' // imprime a
val dollarSymbol = '\$'  // imprime $
val singlQuote = '\''  // imprime '

Todo esto que aprendiste es parte del Curso Esencial de Kotlin míralo completo a un precio especial solo aquí en mi sitio web.

😊 Gracias por comparitr haces un excelente trabajo divulgando conocimiento.

Tipos de Datos Numéricos en Kotlin 0 (0)

Kotlin maneja tipos de datos numéricos principalmente:

  • Números Enteros
  • Números Decimales

Números Enteros

  • Byte
  • Short
  • Int
  • Long

Tipo de DatoTamañoRango
Byte1 Byte-128 a 127
Short2 Bytes-32,768 a 32,767
Int4 Bytes-2,147,483,648 a 2,147,483,647
Long8 Bytes-2^63 a (2^63) – 1

Elige el más adecuado de acuerdo al rango de númeración que necesitas manejar.

Ejemplos:

// Byte -127 - 128
val age = 20 //Sí compila
val newAge: Byte = 128 //No compila
// Int
// 2 mil millones
val productId = 2147483747
val productId2 = 2_147_483_747

val productId3: Int = 2_147_483_748 //No compila
// Long
// 9 trillones
val userId: Long = 9_223_372_036_854_775_807
val userId2: Long = 9_223_372_036_854_775_808 //No compila
val userId3 = 9_223_372_036_854_775_807L //Si colocas L infiere el tipo de dato

Quieres saber más sobre cómo Kotlin Infiere datos mira este Post.

Números Decimales

  • Float
  • Double

Tipo de DatoTamañoRango
Float4 Bytes6 a 7 decimales
Double8 Bytes15 a 18 decimales

Por defecto el compilador infiere que estás declarando un tipo Double a menos que le indiques un Float con una F.

val myFloat = 2.12345678911234567F
println(myFloat) //imprime solo hasta 2.1234567 trunca lo que no es capaz de soportar
val myDouble = 2.123456789112345678 
println(myDouble) //imprime solo hasta 2.12345678911234567 trunca lo que no es capaz de soportar

¿Cuándo elegir Float y cuándo Double?

Esto gira entorno a la precisión entre más digitos soporte nuestro tipo de dato mayor precisión tendremos en el resultado, entonces medita en el tipo de operación que necesites hacer y el resultado.

BigInteger y BigDecimal

Estos son tipos de datos que provienen directamente de Java y están diseñados para trabajar con cálculos muy precisos por ejemplo:

  • Ciencia
  • Negocios – Dinero

Todo esto que aprendiste es parte del Curso Esencial de Kotlin míralo completo a un precio especial solo aquí en mi sitio web.

😊 Gracias por comparitr haces un excelente trabajo divulgando conocimiento.