anncode

[Android Native, Kotlin, Geek & Teacher]

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.

Aprendiendo a analizar un problema Orientado a Objetos 0 (0)

Una de las habilidades más importantes que debes desarrollar en la Programación Orientada a Objetos es que aprendas a pensar en Objetos.

Los objetos pueden ser físicos o conceptuales

Los objetos físicos son todas las cosas que sí podemos ver y hasta tocar. Por ejemplo:

  • user
  • product
  • payment

Los conceptuales no existen fisicamente, existen imaginariamente o conceptualmente. Por ejemplo:

  • account
  • bag
  • session

He diseñado un Curso de Diseño Orientado a Objetos y Principios SOLID dónde te enseño a detectar Objetos de problemas reales, echale un ojo a este Cupón de Descuento.

Los objetos son sustantivos y no verbos

Esta es una de las principales claves para saber que el elemento en el que estoy pensando es un objeto. Los objetos nunca deben ser acciones o verbos, en su lugar son sustantivos.

Un sustantivo según este sitio es: «la palabra que designa personas, animales, plantas…»

Los objetos tienen características y funcionalidades

Los objetos deben tener características y/o funcionalidades.

Por ejemplo:

El objeto Mochila tiene como características: tamaño, color, tipo.

Al tratar de definir las características de un objeto se suele cometer el error de decir la respuesta a ella por ejemplo decir que una característica de Mochila es Verde. Debes ir a un nivel más arriba de abstracción y pensar lo que define a Verde como característica, esto sería el color.

Los objetos los detectaremos en Historias de Usuario

Al estár trabajando activamente en un proyecto real el primer concepto que conocerás son: Las Historias de Usuario (User Stories)

Estás provienen de las metodologías Agile y básicamente narran una sitiuación en el software con sus involucrados.

De aquí es de dónde partiremos para detectar nuestros objetos

Una Historia de Usuario se ve así:

  • Título: Registrarse
  • Cómo: Lector del Blog
  • Quiero: Suscribirme al Blog
  • Para: Poder realizar los comentarios a las entradas de mi interés

Detectemos los objetos:

  • User
  • Blog
  • Comment
  • Post

Sí, parece una locura que con tan poca información detectemos todo eso, pero por eso es tan importante aprender a analizar y sobre todo pensar en objetos.

Ahora te muestro cómo lo hicimos:

ObjetoExplicación
UserLo obtuvimos de Cómo: Lector del Blog nos indica que un Lector del blog puede ser un usuario
BlogLo obtuvimos de Quiero: Suscribirme al Blog
CommentLo obtuvimos de la sección Para: Poder … los comentarios pueden tener: título y descripción que son atributos
PostLo obtuvimos de Para: Poder … los comentarios estarán visualizandose en la entidad Post

Ahora ya sabes que usamos las historias de usuario para identificar objetos, estos pueden ser físicos o conceptuales, sus nombres siempre son adjetivos y tienen carácterísiticas y funcionalidades.

En mi Curso de Diseño Orientado a Objetos y Principios SOLID te enseño todo desde cero y paso a paso con ejemplos reales, te dejé un regalo en este link para que lo adquieras a un precio especial.

😊 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.

Principios SOLID 0 (0)

Los principios SOLID son un acrónimo recopilado por Robert C. Martín en su libro Clean Architecture.

Nacen de la Programación Orientada a Objetos y sirven para Diseñar Programas.

  • Tolerantes al cambio
  • Fácil de entender
  • Reutilizables

Para mí son recomendaciones y guías nos muestran cómo crear, Clases, Métodos, Interfaces, etc. correctamente y conforme a la POO.

En mi Curso de Diseño Orientado a Objetos y Principios SOLID te enseño todo desde cero y paso a paso con ejemplos reales, te dejé un regalo en este link para que lo adquieras a un precio especial.

Objetivo de los Principios SOLID

Su principal Objetivo basado en la POO es:

Crear software de la forma más modular posible.

Al tener software y sus componentes con esta calidad nos permitirá ensamblarlo e intercambiarlo como si fueran Bloques de Lego.

Principios SOLID uno a uno de manera general

(S) Single Responsibility Principle

Significa: Responsabilidad Única pero, se entenderá mucho más si lo definimos como: «Que un elemento de un programa tenga solo una sola razón para cambiar»

Cada componente debe ser sumamente independiente pero al mismo tiempo tener las capacidades de conectarse con otros para trabajar y resolver tareas más complejas.

(O) Open / Closed Principle

«Abierto por extensión pero cerrado para modificación»

Aquí nos enfocamos en pensar cómo hacer crecer el software o en otras palabras, hacerlo Escalable.

El software debería poder crecer sin dolor, si añadir algo nuevo provoca una multitud de cambios puede ser que tengamos que abrir un montón de clases y modificarlas.

Precisamente para evitar este dolor el principio dice que los elementos deben ser Cerrados para Modificación.

Pero entonces, ¿cómo añado algo nuevo?

Si añadirlo significa ensamblarlo o conectarlo como un bloque de Lego, ¡Bingo! tu diseño es escalable.

(L) Liskov Sustitution Principle

Barbara Lizkov fue la creadora de este principio.

La definición compleja dice:

Por cada objeto O1 del tipo S existe un objeto O2 del tipo T, cuando O1 es sustituído por O2 entonces S es un subtipo de T.

Pero en otras palabras podemos decir que:

En una jerarquía de clases padre e hijos. Los hijos deben cumplir por completo con la naturaleza de su padre sin hacerse pasar por otras clases

(I) Interface Segregation Principle

Significa: Segregación de Interfaces.

Segregar Interfaces viene de la acción de dividir, y para dividir correctamente una Interfaz hay que seguir pensando en las responsabilidades que debe tener.

Cuando implementas una interfaz en una clase, esta debe estar diseñada para que a todos sus métodos les escribas un comportamiento.

Si por alguna razón al implementar una interfaz estás dejando métodos vacíos esta es una señal de que tal vez tiene muchas responsabilidades, por lo que necesitarás segregarla o dividirla.

(D) Dependency Inversion Principle

El principio dice:

Los módulos de alto nivel no deberían depender de los de bajo nivel.
Ambos deberían depender de abstracciones

Lo primero que hay que diferenciar es que la Inversión de Dependencias es diferente a la Inyección de Dependencias.

El Objetivo de la Inyección de Dependencias es suministrar objetos a un elemento en lugar de ser él mismo quien los cree.

Por otro lado el diferenciador del Principio de Inversión de Dependencias es su última parte: Ambos deberían depender de abstracciones.

A cualquier nivel que lleves este principio, desde un método, una clase, un módulo etc. La Inversión de dependencias se verá al depender de Abstracciones en lugar de cosas concretas.

Los elementos más abstractos que tenemos en Kotlin son: Clases Abstractas y las Interfaces.

apple fruit with plastic syringes

El objetivo de este Post es darte un panorama general sobre los Principios SOLID, visita todos y cada uno por separado en nuestro sitio web para que tengas más comprensión con ejemplos de código.

En mi Curso de Diseño Orientado a Objetos y Principios SOLID te enseño todo desde cero y paso a paso con ejemplos reales, te dejé un regalo en este link para que lo adquieras a un precio especial.

😊 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.