Kotlin para no programadores

Agradecimientos

Me gustaría hacer un agradecimiento especial a Dios por la vida de estas personas que sin ellas no hubiera descubierto mi pasión por la programación y desarrollado mis habilidades como programador.

Agradezco enormemente a Alfredo Texquis, Oscar Ruiz y José Luis, que aún sin ser de mi familia creyeron en mí antes que nadie. También quiero agradecer a mis padres que me permitieron estudiar hasta el punto de empezar a pagarme mis estudios.

Y por último, pero no menos importante, a mi esposa Danna Hernández que siempre me apoyo en mis sueños.

Yo creo en ti

Y así como yo necesité que alguien creyera en mí, quiero decirte que yo creo en ti. Quizás yo no tuve a un mentor que me enseñara el paso a paso, pero tuve personas que dieron parte de sus vidas para ayudarme.

Así, yo he decidido dedicar el tiempo que me toma cada semana para compartirte mi conocimiento para que así como yo, tu puedas descubrir que la programación puede ser esa pasión que estabas buscando.

Prólogo

Bienvenido a Kotlin para no programadores. Si alguna vez te has sentido intimidado por el mundo de la programación, este libro es para ti. A menudo, la programación se percibe como una habilidad reservada solo para ingenieros o matemáticos, pero la realidad es que cualquier persona puede aprender a programar, y este libro te guiará paso a paso.

En estas páginas, descubrirás los conceptos fundamentales de la programación, desde las bases más simples como qué es un dato o qué es una función, hasta la creación de tu primera aplicación móvil. A través de ejemplos prácticos, aprenderás a usar Kotlin, uno de los lenguajes más modernos y accesibles para el desarrollo de software, especialmente en el ámbito móvil.

Exploraremos herramientas recomendadas que te ayudarán a iniciar, conocerás la lógica detrás de los algoritmos, entenderás cómo tomar decisiones dentro de un programa mediante condiciones, y verás cómo repetir tareas con los ciclos. Además, tocaremos temas esenciales como las estructuras de datos, que son la base para organizar información en tus aplicaciones.

Al final de este recorrido, estarás listo para desarrollar tu propia aplicación móvil básica, todo sin necesidad de experiencia previa en programación. ¡Es hora de adentrarte en el mundo de Kotlin y descubrir que tú también puedes crear tecnología!

¿Cómo leer este libro?

Este libro está diseñado para que aprendas a tu propio ritmo y de manera amigable. No necesitas tener ningún conocimiento previo en programación, solo ganas de aprender.

Consejos para aprovechar al máximo este libro

Si encuentras algo que no entiendes, tómate un momento para releerlo. La programación puede parecer complicada al principio, pero con paciencia y práctica, verás que es más sencilla de lo que parece.

Estructura del libro

Cada capítulo está organizado de la siguiente manera:

Recuerda que este libro está escrito pensando en ti, que quieres dar tus primeros pasos en la programación. ¡Estás a punto de comenzar un emocionante viaje en el mundo del desarrollo de software!

Descarga el libro y recibe actualizaciones exclusivas

¡Gracias por tu interés en Kotlin para no programadores! Este libro está disponible en dos formatos para que elijas el que mejor se adapte a ti:

Si deseas descargar el PDF o mantenerte al tanto de nuevas revisiones, mejoras, o contenido adicional, solo necesitas registrarte. De esta forma, podremos avisarte cuando haya actualizaciones y garantizar que siempre tengas la versión más reciente.

¡Regístrate ahora y comienza tu aprendizaje con Kotlin!

Índice

¿Qué es la programación?

Alguna vez te preguntaste: ¿Cómo es que Google sabe que quiero viajar a Mazatlán? O ¿Cómo sabe Facebook que estuve viendo videos sobre carpintería? Tal vez te diste cuenta que Youtube te muestra videos relacionados a tus subscripciones.

Las computadoras nos han permitido hacer tantas cosas. Como mandar a un hombre a la luna, o permitir que los coches se conduzcan solos.

Es impresionante pensar lo pequeñas que las computadoras están logrando ser. Ahora cualquier persona con la capacidad de comprar un smartphone tiene a acceso a un computador, pues eso es lo que son. Todos los dispositivos smart son pequeños computadores.

Pero, ¿Qué significa computar?

¿Qué significa computar?

Computar es enumerar matemáticamente. Una computadora sólo entiende números a los que llamaremos datos: Es decir 0 y 1. Para que una computadora pueda ser prendida o apagada, necesita recibir una simple instrucción: 0 para apagar y 1 para prender. De aquí viene el símbolo de los controles o los switch.

La computación fue creada con el fin de almacenar, procesar y transmitir datos: Almacenar, como cuando guardas una foto o un vídeo. Procesar, como cuando escribes un documento en word. Transmitir como cuando mandas mensajes por Messenger o WhatsApp.

Las primeras computadoras fueron personas que calculaban lógica y matemáticamente una gran cantidad de información. Con el paso del tiempo, se desarrolló una forma de calcular esta información más rápido que los humanos.

El sistema binario es la base de la computación: Sólo piensa en los números. El 0 y el 1. Son sólo 2 números. Por eso se llama sistema binario. El sistema que normalmente utilizamos es el sistema decimal. Del 0 al 9, son 10 números. Las computadoras entonces entienden el 0 decimal como 0 binario, el 1 decimal como 1 binario, el 2 decimal como 10, binario y el 10 decimal como 1010.

¿Cómo me comunico con una computadora?

A través de un lenguaje casi humano, escribimos una serie de instrucciones que posteriormente la computadora traduce a su sistema binario por medio de algunos algoritmos de software llamados compiladores.

Así que, para lograr que una computadora me obedezca, necesito saber escribir en alguno de los lenguajes que algún compilador pueda traducir a binario. También puedo aprender binario, pero esta y más información estará disponible en mi futuro curso de programación.

Las computadoras y dispositivos smart que compramos en una tienda, vienen con una serie de aplicaciones preprogramadas para decirle a nuestros dispositivos que hagan lo que necesitamos.

Lenguajes de programación más utilizados en 2020

Te dejo el listado de platzi.com para que obtengas más información.

Igual, te dejo la lista para que te des una idea:

  1. JavaScript
  1. Java
  1. Python
  1. Ruby
  1. PHP
  1. C++
  1. CSS
  1. C#
  1. C
  1. Go

Pensamiento computacional

Según Jeannette M. Wing, en uno de sus artículos publicados sobre el pensamiento computacional expresa que:

Computational thinking, 10 years later - Microsoft Research Jeannette M. Wing «El pensamiento computacional involucra el resolver problemas, diseñar sistemas y entender el comportamiento humano, basándose en los conceptos fundamentales de la informática. El pensamiento computacional incluye un rango de herramientas mentales que reflejan la amplitud del campo de la informática.»

Pensar como un informático es mas que saber programar una computadora. Es necesario pensar en multiples niveles de abstracción. Descomponiendo un problema en pequeños problemitas para resolverlo parte por parte.

Para explicar la abstracción, voy a utilizar un ejemplo:

Explicando la abstracción

Pensemos en una humano. Físicamente hablando, tiene un cuerpo con el que puede sentir y experimentar el mundo que lo rodea. Este sería el primer nivel de abstracción: Un humano tiene un cuerpo y tiene vida.

Ahora, como humano tiene un nombre, una manera de ser y de pensar. Este sería el segundo nivel de abstracción: Daniel es muy inteligente, pero se enoja con facilidad. Estos dos niveles nos permiten tener dos conceptos diferentes del mismo elemento, utilizando contextos diferentes: El material y el emocional.

Finalmente, el humano piensa. Y esta imaginación lo lleva a preguntarse: ¿Cuál es el propósito se su existencia? ¿Quién nos creo? ¿Para qué nací? Y ¿Qué hay después de la muerte? Este sería un tercer nivel de abstracción: La razón de la existencia.

Como podemos observar. Pensar en un humano puede ser tan sencillo como los pensar en los 5 sentidos, cómo tan complejo como el hablar del existencialismo.

Conclusión

Ahora que ya sabes cómo piensan los programadores, te invito a que resulevas tus problemas a través del pensamiento computacional.

¿Qué puedo hacer con la programación?

Ser programador tiene muchos beneficios. No sólo los niveles de ingreso a los que podemos aspirar, la flexibilidad de los horarios, o la gran cantidad de demanda que existe.

Como programador he desarrollado diferentes habilidades que muy pocos de mis conocidos tienen. Mi perspectiva del mundo y de la tecnología han cambiado drásticamente. Ahora entiendo cómo funciona el mundo.

Gracias a mis habilidades como programador, he podido trabajar en varias industrias en muy pocos años y así, he descubierto lo que me apasiona.

Si tu no has descubierto lo que te apasiona, entonces, te invito a que veas este video hasta el final.

¿Qué puedo hacer con la programación?

Programar puede ser tan sencillo como programar una alarma, hasta tan complejo como hablar con una computadora o hablar con un robot. Pero en este articulo me enfocaré en la programación como la acción de escribir código en algún lenguaje de programación. Es decir, programar computadoras.

Existen infinidad de formas de programar una computadora, y se van desarrollando nuevas con el paso de las horas. Pero es importante entender las principales aplicaciones de la programación, pues estamos tan envueltos en la tecnología que pensamos que lo que conocemos como normal, nunca va a dejar de existir. Pero déjame decirte que gracias a los programadores podemos disfrutar de muchas cosas en nuestra vida moderna.

Lista de computadoras

En la siguiente lista te presento las diferentes computadoras que existen. Quizás tu no sabias que eran computadoras.

1 Computadoras de escritorio y laptops

Esto puede ser bastante obvio para algunos, pero es importante mencionarlas.

2 Los dispositivos smart

Es decir, smartphones, smartwatch, smart TV, tablets, etc. Es muy posible que ya lo supieras, pero igual, es importante mencionarlo.

3 Los automóviles

Desde hace ya algunos años, los automóviles vienen con un pequeño computador que les permite detectar los diferentes sensores de tu auto y así indicarte si tu auto tiene algún problema.

4 Electrodomésticos no smart

Así es, antes de que existieran los modernos dispositivos inteligentes, existieron electrodomésticos que eran programados para que pudieran hacer sus funciones básicas. Microondas, licuadoras, estufas, etc, eran programadas con Java.

5 Teléfonos celulares no smart

Así es, antes de los dispositivos smart y touch, los primeros teléfonos celulares fueron computadoras cada vez más pequeñas.

6 Consolas de videojuegos

Muchos ya lo saben, pero otros piensan que su consola de videojuegos es más que un computador. La verdad es que tiene características poco comunes en computadores pues estas computadoras están especializadas en ejecutar videojuegos.

7 Robots

Así es, todos los robots del mundo son computadoras. A excepción de los robots que se hacen pasar por humanos. En este caso, los robots pueden ser también algoritmos.

8 Lectores de CD, DVD, blue ray

Todos estos dispositivos cuentan con un pequeño computador interno que les permite poder leer el contenido de tus películas o canciones.

9 Aire acondicionado, calefacción

Piensa en cualquier aparato que tenga una pantalla con letras de colores. Todos estos aparatos tan cotidianos tienen una computadora que les dice qué hacer.

10 Router, modem

También nuestros proveedores de internet, teléfono y cable, son computadoras.

¿Cuáles son los trabajos más comunes y los más extraños para un programador?

Cuando no eres un programador, o incluso siendo un programador novato, es muy común pensar que todos los programadores hacen lo mismo; escribir código. Y aunque esto sea verdad, ser programador es una habilidad que te permite trabajar en tantas cosas que escribir código termina siendo lo que menos haces.

Me gustaría mostrarles una lista de las categorías que me parecen más relevantes en donde los programadores hemos trabajado. La lista estará ordenada de los más comunes hasta los más extraños.

1 Programación web

Desde sitios en internet hasta aplicaciones más complejas. Esta es una de las industrias más crecientes en donde la gran mayoría de los programadores terminan trabajando.

2 Programador de Apps Android, IOS

Así es, los programadores móviles. Aunque IOS es un poco más exclusivo y por lo tanto, un poco más difícil de encontrar programadores con esta tecnología, la verdad es que tanto Android como IOS son cada vez más demandados, a tal punto que los programadores web inventaron maneras de hacer aplicaciones para Android y IOS con el mismo código.

3 Programador de apps de escritorio

Cualquier computador de escritorio o laptop necesita una serie de programas o aplicaciones que necesitas para realizar tus tareas.

4 Programador de apps de escritorio

Cualquier computador de escritorio o laptop necesita una serie de programas o aplicaciones que necesitas para realizar tus tareas.

5 Programador de videojuegos

Así es, cualquier videojuego lleva programación dentro.

6 Programador de realidad virtual/aumentada

La realidad virtual es crear todo un mundo como minecraft e interactuar en el. Por otro lado, la realidad aumentada es utilizada por pokemon Go, creando objetos virtuales y hacerlos interactuar en nuestro mundo real.

7 Seguridad informática

Algo así como un Hacker pero bueno.

8 Machine learning

Esto es relativamente nuevo, pero gracias al Machine learning podemos hacer que las computadoras aprendan cualquier cosa.

9 Cloud computing

El nombre es un poco extraño porque no existe algo como una nube en donde se guarde la información o se procese, pero así se le conoce a la red de servidores que ofrecen servicios como almacenamiento, bases de datos, redes, software variado, etc.

10 Programador de microcontroladores

Es como programar circuitos eléctricos.

11 Automatización y Robótica

Estas dos las puse juntas porque son similares, aunque el enfoque puede ser tan variado como cualquiera de las anteriores.

Y si pareciera poco, cada día se inventan más areas en donde se utiliza la programación.

Sólo para que te des una idea, existen sistemas para:

  1. Contabilidad.
  1. Mercados.
  1. Restaurantes.
  1. Escuelas.
  1. Gasolineras.
  1. Farmacias.
  1. Laboratorios.
  1. Agricultura.
  1. Hospitales.
  1. Fábricas.
  1. … Y la lista continua.

¿Cuánto gana un programador?

Ahora, hablar de salarios puede ser un tanto incómodo para algunos. Pero mi propósito es que se den una idea de cuánto podrían ganar ustedes si decidieran comenzar su carrera como programadores de software.

Las cifras que les voy a mostrar son aproximadas y basado en mi experiencia. Es decir, platicando con mis compañeros de mis diferentes trabajos, negociando mi sueldo, etc. Los niveles son representativos a contribuidores individuales en las empresas. Es decir, un programador para los primeros niveles, o un ingeniero de software que tienen una tarea específica dentro de la empresa.

N0 – N2

Características

Sueldos mensuales

N3 – N5

Características

Sueldos mensuales

N6 – N8

Características

Sueldos mensuales

Mi primer trabajo como programador

Finalmente, me gustaría compartirte una pequeña parte de mi experiencia como programador.

Inicios

Empecé a aprender programación en una preparatoria llamada CECyTE en Tijuana BC.

Fue a los 16 años que descubrí que me quería dedicar al desarrollo móvil. Mi primer aplicación fue una calculadora del área de un rectángulo. Durante ese año, de los 16 a los 17, estuve bajo la tutela de dos de los profesores que han causado más impacto en mi vida: Alfredo Texquis y Oscar Ruiz.

Ellos me enseñaron las bases de la programación y el desarrollo móvil. Con ellos desarrollé mi primer aplicación móvil para la preparatoria y participé en concursos que me impulsaron a crear tecnología. Ellos me regalaron mi primer laptop y gracias a ellos conseguí mis primeros dos trabajos.

Mi primer trabajo como programador

Fue desarrollar una pequeña app para el proyecto de unos universitarios. De la mano de mi hermano, Enrique Medina como diseñador, y de mi profesor Oscar Ruiz, desarrollamos una pequeña aplicación llamada Coupons App, cuya funcionalidad consistía en guardar cupones digitales.

Por esta aplicación no ganamos mucho porque realmente no hicimos mucho, pero a mis 16 años, que me pagaran por algo que haría gratis fue espectacular.

Mi primer sueldo como programador

Lo conseguí gracias a mi profesor Alfredo Texquis. Un compañero de carrera (Alberto Peralta) trabajaba en una recicladora reparando computadoras y su Jefe (José Luis Quiroz) estaba buscando a un programador que le ayudara a desarrollar aplicaciones móviles para que los empleados de la recicladora pudieran dejar sus escritorios y pasar a la acción a través de tablets.

Recuerdo estar sentado utilizando la laptop que mis profesores me habían regalado, cuando Alberto me mandó un mensaje a Facebook preguntándome si me gustaría trabajar como programador. Me comentó lo que tenía que hacer y fui a la entrevista. Debido a que tenía sólo 17 años, le pedí a mi profesor Texquis que me acompañara a mi entrevista.

El día de la entrevista, conocí a José Luis, quien me entrevistó y me contó lo que quería hacer. Al principio creí que quería pagarme por hacer una aplicación, pero mi profesor me explicó que quería que trabajara para él. Cuando José Luis me preguntó, qué sabía hacer con la programación móvil, yo contesté: «Lo que sea». ¡Qué iluso fui! En fin. Al finalizar la entrevista, salí con una oferta de trabajo y una carta de José Luis para mis padres pidiéndoles que autorizaran que yo me uniera a su equipo.

¿Cómo puedo empezar a programar?

Puede parecer obvio para algunos, pero es importante mencionar que es necesario tener una computadora. Esta computadora debe contar con ciertos requisitos indispensables para ser utilizada como un dispositivo para desarrollar.

Aún si no eres programador, sabras que una computadora tiene muchas especificaciones. Entonces, cómo elegir la mejor computadora?

En este capítulo te daré algunas recomendaciones antes de elegir tu computador para desarrollar. Además te compartiré algunos cursos de programación básica. Al terminar exitosamente esos cursos podrás presumir que sabes las bases de la programación.

Recomendaciones antes de empezar a desarrollar

En el 2021, el año en que se escribió este artículo, casi cualquier lenguaje de programación cuenta con una área de juego para probar sus diferentes características. Así que podemos considerar requisito mínimo que tu computador tenga instalado un navegador web moderno.

Algunos ejemplos pueden ser:

Algunos ejemplos de áreas de juegos (Playground en inglés) son los siguientes:

JavaScript - https://playcode.io/

El área de juego más rápida y simple con resultados visuales y en consola en tiempo real. Aprende, prueba y haz prototipos facilmente.

Python - https://www.programming-hero.com/code-playground/python/index.html

Programming Hero es una divertida, interactiva, visual, y amigable manera de aprender a programar.

Java - https://code.sololearn.com/cVRUy2BwauK8

Con code sololearn puedes probar Java a de forma rápida y sencilla.

Go - https://play.golang.org/

El área de juegos oficial del lenguaje de programación creado por Google.

Ruby - https://try.ruby-lang.org/playground/

Ruby y su área de juegos. Prueba este sencillo lenguaje a través de este sencilla área de juegos.

Kotlin - https://play.kotlinlang.org/

Por supuesto no puede faltar el área de juego del lenguaje en el que está inspirado este libro.

Más áreas de juegos

Si quieres descubrir las áreas de juegos de más lenguajes de programación, te recomiendo la siguiente herramienta de github en donde se muestra la lista de popularidad de los diferentes lenguajes de programación en diferentes fechas. Sólo necesitas elegir un lenguaje y escribir en tu navegador de preferencia la palabra playground . Por ejemplo: Kotlin playground.

Cursos de programación básica

Finalmente, te quiero compartir una pequeña pero poderosa lista de cursos de programación desde 0.

Te puedo garantizar que al finalizar estos cursos podrás decir que ya sabes las bases de la programación.

Platzi - https://platzi.com/cursos/programacion-basica/

Programa desde cero, domina Javascript, entiende HTML y aprende de algoritmos. Sí, desde cero. Entenderás la lógica del código, cómo piensan los programadores y cómo programar juegos, proyectos y hasta robots y electrónica. Aprender a programar no es fácil, pero Platzi lo hace efectivo.

EDTeam - https://ed.team/cursos/programacion

Programar no se trata de código, se trata de lógica. Este curso te enseña la lógica que te permitirá dominar cualquier lenguaje.

Google Digital Garage - https://learndigital.withgoogle.com/digitalgarage/course/basics-code

Entiende lo básico de la programación.

Toma una introducción a la programación, encuentra cómo funciona, qué puedes hacer, y cómo puede beneficiarte.

Herramientas recomendadas para empezar a programar

Es importante reconocer que la gran mayoría de los recursos disponibles en internet se encuentran únicamente en Inglés, por lo que dividiremos esta lista entre los recursos que están en ambos idiomas y los que sólo se encuentran en español, al menos por el momento.

💡
Es importante hacerte la invitación a aprender inglés. No sólo por la cantidad de recursos en internet que se encuentran únicamente en ese idioma. Esto te ampliará tus posibilidades de encontrar trabajo como programador cuanto antes.

Herramientas disponibles en español

Jetbrains Academy - https://www.jetbrains.com/es-es/academy/

Esta es mi favorita. Sin embargo, es de paga.

Si tienes los recursos para pagarlo, realmente te recomiendo probar esta herramienta.

Jetbrains Academy es un sistema de formación personalizado en el que puedes aprender a programar en diferentes lenguajes como Kotlin, Python, Java, JavaScript, entre otros.

Cuenta con rutas de aprendizaje por lenguajes. En la ruta, irás construyendo un proyecto que demostrará todo lo que habrás aprendido a lo largo del curso. Al final, podrás agregar estos proyectos a tu hoja de vida.

Esta herramienta es relativamente nueva, por lo que espera que el contenido en español esté bastante más limitado en comparación con lo que encontrarás en inglés.

Algunas de sus funciones son:

FreeCodeCamp - https://www.freecodecamp.org/espanol/

Sin duda, una de las herramientas más completas en internet.

Aprende a programar gratis. Construye proyectos. Obtén certificados.

Desde 2014, más de 40,000 graduados de freeCodeCamp.org han conseguido trabajos en empresas de tecnología, entre las que se incluyen:

Puedes obtener certificaciones verificadas gratuitas en diferentes temas como:

Lo vuelvo a decir, ¡Es completamente gratis!

GrasshoperApp - https://grasshopper.app/

Esta es una de las más divertidas en internet.

Tan simple como resolver acertijos mientras aprendes.

Grasshopper nació gracias al trabajo de un equipo de programadores apasionados del taller de Google para productos experimentales, Area 120.

Su intención es que todas las personas aprendan a programar, incluso si tienen una vida muy ocupada.

Grasshopper es para ayudar a que personas como tú accedan al mundo de la programación de forma fácil y divertida.

También cuenta con una versión para teléfonos celulares, lo que te permitirá seguir aprendiendo durante tus viajes diarios o mientras esperas en una fila.

Mimo - https://getmimo.com/

¡Aprender a programar puede ser fácil y divertido!

Aprender a programar en tu día a día.

Completa ejercicios super pequeños y recibe retroalimentación inmediata.

Experimenta con ejemplos y alcanza tus metas diarias.

Khan Academy - https://es.khanacademy.org/computing/computer-programming

Para cada estudiante, cada salón de clases.

Khan Academy es una organización sin fines de lucro con la misión de ofrecer educación gratuita de primer nivel, para cualquier persona en cualquier lugar.ç

No sólo cuentan con cursos de programación.

Su aprendizaje es personalizado, con contenido de confianza y herramientas para empoderar a los maestros.

Herramientas sólo disponibles en Inglés

W3School - https://www.w3schools.com/

W3School está optimizada para aprender, probar y practicar. Los ejemplos están simplificados para mejorar la lectura y el entendimiento básico.

Cuenta con tutoriales, referencias, y ejemplos que están siendo actualizados constantemente.

Solo learn - https://www.sololearn.com/

La mejor manera de aprender a programar puede ser utilizando solo learn.

Sus cursos están diseñados por expertos con prácticas del mundo real.

No importa el nivel de experiencia que tengas. Aprende paso a paso. Recibe certificados para validar tus nuevas habilidades.

Puedes aprender en computadora o bien, descargando la app.

CodeAcademy Go - https://www.codecademy.com/resources/blog/codecademy-go-faq/

Codecademy Go es una aplicación móvil suplementaria de la herramienta Codecademy. Con Codecacademy Go puedes practicar tu código, revisar conceptos, y leer artículos e historias que te acercarán a alcanzar tus metas de aprendizaje. Todo desde la comodidad de tu teléfono.

Últimas recomendaciones

Sé que es mucha información, pero no te preocupes. Mantendré este libro actualizado para que puedas utilizarlo como referencia en tu carrera.

Recuerda que no es necesario aprender todo. Basta con aprender los fundamentos y elegir el lenguaje que mejor se adapte a la carrera que quieras elegir.

En este libro nos enfocaremos únicamente en Kotlin, pero tu podrás cambiar de lenguaje cuando domines las bases, o seguir aprendiendo Kotlin junto conmigo.

¿Qué es una función?

A partir de este capítulo comenzamos con conceptos de programación. Por eso te quiero invitar a tomarte tu tiempo para leer cada capítulo. Cada capítulo te ayudará a entender los conceptos a través de analogías del mundo real y ejemplos prácticos.

Empecemos con el título de este capítulo. ¿Qué es una función?

Definición de función

💡
Rutina almacenada para ser ejecutada en cualquier momento por cualquier actor.

Sí, a mí tampoco me queda claro. Tratemos de desmenuzar

Rutina almacenada

Imagina una acción que practicas todos los días: Caminar, hablar, respirar. Sencillo? Bien. Todas estas son rutinas de algunos seres humanos. Digo algunos porque no todos podemos hablar, caminar o incluso respirar. Pero, ¿Tú si puedes? ¿Por qué?

En algún momento de tu vida alguien te enseñó a caminar, hablar, pero, ¿Quién te enseñó a respirar? Bueno, eso viene en tu ADN. Sin entrar en detalles, tus antepasados dejaron escrito en su ADN que era necesario respirar para sobrevivir.

Todas estas rutinas están almacenadas en tu ADN y tu cerebro.

Para ser ejecutada en cualquier momento

Retomando las rutinas. Si tú puedes caminar, no es como que todo el tiempo estés caminando. Así mismo las funciones necesitan ser ejecutadas para llevarse a cabo. Quiero decir que no caminas sin pensarlo. Tu cerebro le dice a tus pies y tu cuerpo como mantener el equilibrio.

Y ¿Qué pasa con la respiración? ¿Esa si es automática? Pues, sí y no. Por su puesto que puede ser automática, pero aún la respiración es una rutina aprendida por tus pulmones, corazón, nariz, etc. Tu cerebro le dice a tus órganos cómo y cuánto respirar.

Por cualquier actor

Lo venimos diciendo anteriormente, en la mayoría de los casos, nuestro cerebro sabe cómo realizar cada rutina, pero no todo el tiempo actúa sin tu permiso. Digamos que además de respirar y hacer funcionar tus órganos internos, tu cerebro necesita que tu le digas qué hacer en todo momento.

Ejemplo completo

Imagina que te despiertas por las mañanas, ¿Quién te despertó? ¿La alarma? ¿El ruido de los vecinos? Así es, tu cerebro. Tu cerebro sabe como despertarte. Por eso, cuando tu intentas despertarte por tu propia cuenta, pero el cerebro aún no da la orden, puedes sufrir de la parálisis del sueño. Lo mejor que puedes hacer es esperar a que tu cerebro de la orden de despertar al resto de tu cuerpo.

¿Cómo lo hacen las computadoras?

Las computadoras también tienen memorias que utilizan como cerebros. Aunque son considerablemente más primitivos que los cerebros humanos.

Para que una computadora encienda (O despierte), necesita tener almacenada una rutina de encendido. Lo mismo con el apagado. A estas rutinas les llamamos funciones. Es por eso que decimos que una computadora no funciona cuando no prende o no se puede apagar.

Funciones en programación

Pero, ¿Cómo le hace la computadora para saber la hora, o para imprimir mis documentos, o reproducir videos? Bueno, eso es fácil de explicar, difícil de hacer.

Las computadoras son tontas. Necesitan que se les enseñe a hacer todo. Sin intervención humana, las computadoras no pueden aprender.

Entonces, podemos decir que los programadores escriben funciones para que la computadora pueda cumplir con sus deberes.

Cuando la tarea que se quiere completar es muy grande, por ejemplo: Una calculadora, no basta con una función que haga todo. Mas bien los programadores crear una gran cantidad de funciones para que la computadora sepa calcular. A este conjunto de funciones le llaman programa de computadora o aplicación. Así es como se crean las aplicaciones de calculadora.

Función para sumar dos números en Kotlin

Para que tu puedas probar estos ejemplos te invito a que visites el área de juegos oficial de Kotlin.

Veamos el siguiente ejemplo:

/**
 * 1 Función principal. Esta es la función que se ejecuta cuando le damos 
 * click al botón de play.
 */
fun main() {
    // 2 Dos valores para ser utilizados por nuestra función sumOf
    val a = 2
    val b = 2
    // 4 El resultado de la suma se guarda en aPlusB
		val aPlusB = sumOf(a, b)
    // 5 Imprimimos el valor
    print("a + b = $aPlusB")
}

/**
 * 3 Nuestra función de suma "sumOf"
 * 
 * @param a El primer valor para ser sumado
 * @param b El segundo valor para ser sumado
 * 
 * @return La suma de a + b
 */
fun sumOf(a: Int, b: Int): Int {
    return a + b
}
  1. Al darle click al botón de play, se ejecuta nuestra función main.
  1. Se crean dos valores para ser sumados por nuestra función sumOf, a y b.
  1. Se ejecuta nuestra función sumOf utilizando los valores a y b.
  1. El resultado de la suma se guarda en aPlusB.
  1. Imprimimos el valor en la consola.

¡Inténtalo tú mismo! Visita el area de juegos de Kotlin y copia y pega el ejemplo anterior. Dale play y mira lo que pasa.

Anatomía de una función

Algunos lenguajes de programación son similares por la manera en la que se escriben. A esto le llamamos sintaxis. Sin embargo, las funciones no se escriben igual en todos los lenguajes de programación. La anatomía de una función es siempre la misma, pero la forma de escribirlas cambiará de lenguaje en lenguaje.

En el siguiente ejemplo veremos la anatomía de una función escrita en Kotlin:

fun /* <- 1. Palabra clave que indica que esto es una función */ 
sumOf /* <- 2. Nombre de la función */
( /** <-
	 * 3. Parentesis que indican en donde escribir los argumentos
	 * necesarios para escribir la función
	 */
a: Int /* 4. El primer argumento de la función */,
b: Int /* El segundo argumento escrito después de la coma */
/**
	* Si queremos otro argumento, sólo tenemos que agregar una coma antes.
	*/
): Int /* <- 5. El tipo de dato que regresa la función cuando termina  */
{ /**
	 * 6. Llaves que determinan en donde empieza y termina la ejecución de una
	 * función
	 */

	return /* <- 7. Palabra clave que indica que la función regresará un valor */
}

1. Palabra clave fun

Cada lenguaje tiene palabras reservadas para indicar diferentes cosas. A esto le llamamos palabras claves o palabras reservadas.

Kotlin utiliza la palabra clave fun para indicar que lo que estás escribiendo es una función.

2. Nombre de la función

En Kotlin, puedes utilizar casi cualquier signo para nombrar tus funciones. Sin embargo, existen algunas convenciones de código para nombrar las variables, funciones, y otras cuestiones.

Si quieres aprender más sobre convenciones de código en kotlin, te invito a leer el siguiente artículo.

3. Paréntesis

Todas las funciones en Kotlin utilizan los paréntesis para determinar el área en donde debes defir los argumentos. Si bien, no es obligatorio que tus funciones tengan argumentos, todas las funciones necesitan llevar los paréntesis.

4. Argumentos de una función

Cada argumento debe de contener el nombre y el tipo de dato del argumento. Esto lo veremos en el siguiente capítulo, pero el tipo de dato define lo que es tu argumento, por ejemplo, un número o texto, etc.

5. Tipo de dato de retorno

Al terminar de ejecutarse, la función puede o no regresar un valor. Si la función regresa algún valor, debes indicar el tipo de dato de este valor, por ejemplo, un número o texto, etc. Si la función no indica el tipo de dato, la función regresará automáticamente un tipo de dato llamado Unit, el cual es utilizado para indicar que esta función no regresa nada especial al terminar su ejecución.

6. Llaves

Las llaves en Kotlin son utilizadas para determinar bloques de código. Algo así como párrafos al escribir.

7. Palabra clave return

Esta palabra clave se utiliza para indicar que el valor que se escriba a su derecha será devuelto por la función al terminar. Por ejemplo, la suma de nuestros argumentos.

¿Qué es un dato?

Seguramente ya escuchaste hablar de los datos móviles. Quizás lo asocias con el internet y la capacidad que tienes de navegar desde tu teléfono celular. Pero, ¿Por qué no le llamamos datos al WiFi? Si también te permite navegar en internet.

Definición de dato

💡
En informática, un dato es una cifra, letra o palabra que se suministra a la computadora como entrada y la máquina almacena en un determinado formato.

Vayamos parte por parte

Cifra, letra o palabra

En otras palabras, cualquier número, letra, símbolo o palabra. Cualquier información que te pida una computadora.

Por ejemplo, al iniciar sesión en una app móvil, quizás te pidan que ingreses tu correo y tu contraseña. Ambos son datos, porque ambos son texto. Y ¿Cuándo te piden tu foto de perfil? también las imágenes son datos, pues las computadoras las almacenan como un número; un número bastante largo y difícil de entender.

En realidad, la computadora almacena todo internamente como 0 y 1. Por ejemplo, un 1 es igual a un 1 para la computadora, pero un 2 es igual a un 10. Esto te lo explicaré más adelante. Por ahora quédate con la idea de que los datos son números.

Se suministra a la computadora como entrada

En realidad, el dato puede ser suministrado a la computadora como entrada, pero la computadora también suministra datos como salida.

Pensemos en una cámara de teléfono.

Así como la foto fue una entrada en tu teléfono, también fue una salida, pues tu le pediste ver la imagen que ya había sido almacenada.

La máquina almacena en un determinado formato

Veamos el formato como la forma, tamaño y el modo de presentar algo.

Para que una computadora pueda almacenar información, necesitas suministrar esa información en la forma en que la computadora lo entiende.

Por ejemplo, escribir tu usuario y contraseña. La computadora te pedirá que escribas a través de un teclado físico o digital. Quizás puedas dictarlo a través del micrófono, pero esa voz se convertirá en texto. ¿Por qué? porque la computadora quizás sólo acepta el formato en texto.

Ahora, el hecho de que puedas escribir texto en la computadora, no significa que la computadora lo entienda. Entonces ¿Qué es lo que la computadora entiende? Para entenderlo necesitamos aprender el sistema binario.

Sistema binario

¿Qué es el sistema binario? empecemos por el sistema decimal: Es el sistema numérico que utilizamos en el día a día. Se llama decimal porque sólo se utilizan 10 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y el 9.

En el sistema binario sólo se utilizan 2 dígitos: 0 y 1.

El sistema binario nació de la época en que las computadoras eran grandes máquinas eléctricas. Antes programar era conectar y desconectar cables. Un cable conectado representaba corriente y el desconectado la ausencia de corriente. Así, para darle instrucciones a la computadora hacía falta conectar y desconectar cables.

En la actualidad, los cables fueron reemplazados por pulsos eléctricos. Para almacenar los datos se utilizan diferentes técnicas.

Sin embargo, sería casi imposible que un humano le de instrucciones a una computadora directamente utilizando el sistema binario. Por eso, existen los lenguajes de programación que nos ayudan a hacer esta tarea muchísimo más simple.

Si quieres aprender más sobre el sistema binario, aquí te dejo un enlace para que puedas leer más adelanta:

¿Qué es el sistema binario?
por cgarcia | 27 Sep, 2022 | ¿Sabías que...?
https://codelearn.es/blog/que-es-el-sistema-binario/#:~:text=El

No es necesario que entiendas el sistema binario por ahora. Por ahora quiero que aprendas cómo funcionan los datos en un lenguaje de programación como Kotlin.

Literales (Variables y Constantes)

Para poder hablar de los diferentes tipos de datos de cualquier lenguaje de programación, es importante entender el concepto de variables y contantes.

Las literales comprenden tanto a las variables como a las contantes. Las literales tienen en común su capacidad de almacenar (Guardar) valores.

Pensemos por un momento en el dinero. ¿Cuánto dinero tienes? Seguramente pensaste en el dinero que hay en tu cuenta de banco. Ciertamente este dinero no siempre es el mismo, entonces, es variable. Ahora, si pensamos en el sueldo de un trabajador, podríamos considerar que este sueldo es constante.

Para definir una variable en Kotlin utilizamos la palabra clave var, y para las contantes val.

val sueldo
var cuentaDeBanco

Asignación / Inicialización

Decir que tienes dinero en el banco no es suficiente para que sea verdad, es necesario que tu patrón te deposite el dinero para que tu cuenta tenga la cantidad que deseas. Incluso tú puedes depositar la cantidad que deseas.

Para abrir una cuenta bancaria es necesario depositar una cantidad inicial. A este proceso se le llama inicialización. Depositar cualquier dinero en tu cuenta es asignarle a tu cuenta un nuevo valor. A este proceso le llamamos asignación.

Imagina que tienes 1000 en tu cuenta. Esta semana te depositan tu sueldo. Tu sueldo semanal es de 10000 . Después tendrás 11000.

var cuentaDeBanco = 1000
val sueldo = 10_000
cuentaDeBanco += sueldo

println(cuentaDeBanco)

Puedes probar este código en el área de juegos oficial de Kotlin.

Tipos de datos

Como lo vimos anteriormente, la computadora acepta cifras, letras y palabras. Estos formatos son almacenados como 0 y 1 en la computadora.

Un lenguaje de programación utiliza formatos un tanto similares a los humanos para después ser interpretados por la computadora en su propio lenguaje.

Veamos qué tipos de datos utiliza Kotlin para esto.

Tipos básicos en Kotlin - https://kotlinlang.org/docs/basic-types.html

En Kotlin, todo es un objeto en el sentido que cualquier dato puede tener funciones y características. Sin embargo, Kotlin maneja algunos tipos de datos básicos que representan las cifras, letras y números del mundo real.

Números - Enteros

Kotlin te permite escribir números enteros en diferentes cantidades.

Un número entero es un número que no tiene punto decimal. Por ejemplo, el 1, 100, -500, etc.

Ejemplo:

val uno = 1 // Int
val tresMilMillones = 3000000000 // Long
val unoQuePodriaSerMasLargo = 1L // Long
val unByte: Byte = 1

Números - Punto flotante

Para los números reales, Kotlin provee tipos de punto flotante Float y Double. Existe un estándar llamado IEEE 754 que especifica la diferencia de decimales entre estos tipos. Como su nombre lo indica, Double puede tener el doble de decimales que Float.

Puedes inicializar literales con Double o Float con números teniendo una parte fraccionada. Está separado con un número entero separado con un punto .. Para variables inicializadas con números fraccionados, el compilador lo interpreta como un tipo Double. Si quieres que sea float, es necesario especificarlo.

val pi = 3.14 // Double
val uno: Double = 1 // Error: El tipo de dato no es el mismo
val unoDouble = 1.0 // Double
val unoFloat: Float = 1.0f // Float
val dosFloat = 2.0f // Float

Booleanos

El tipo Boolean representa objetos booleanos que pueden tener dos valores: true (Verdadero) y false (Falso).

val verdadero: Boolean = true
val falso: Boolean = false
val sinValor: Boolean? = null

Caracteres

Los caracteres son representados por el tipo Char. Las literales de caracteres van en comillas simples: '1'.

val unCaracter: Char = 'a'

String (Cadena de texto)

Las cadenas de texto en Kotlin son representadas por el tipo String. Generalmente, un valor String es una secuencia de caracteres dentro de comillas dobles.

val unaCadenaDeTexto = "abcd 123"

Arrays (Arreglos o colecciones)

Finalmente, los arreglos en Kotlin son representados utilizando la palabra Array. Un arreglo es una lista o colección de elementos del mismo tipo. Esto quiere decir que podemos tener varios elementos o ninguno almacenados en una sola variable. ¿Con qué propósito? pues dependería de lo que necesitas, pero imaginemos que queremos vender productos. Quizás necesitemos una lista de productos, así que, podrías utilizar este tipo de dato (Array) para eso.

val productos = arrayOf("Camiseta", "Pantalón", "Zapátos")

Conclusión

Ahora ya sabes lo que es un dato, los diferentes tipos que existen y cómo la computadora los interpreta a través del sistema binario.

Hablar de datos es hablar de información. Nosotros como humanos siempre queremos categorizar las cosas. Entonces imagina los datos como información y los tipos de datos como categorías de información.

¿Qué es un algoritmo?

Imagina una receta. Sigues cada uno de los pasos para preparar el platillo perfecto. Pero no te sale como en el video. ¿Por qué? Quizás olvidaste un paso importante, o hay algún paso que no aparece en el recetario o video de cocina.

Cada paso en la receta es importante. Es lo que determina que obtengas el mismo resultado siempre; seguir el mismo algoritmo.

Definición de algoritmo

💡
En informática, se llaman algoritmos el conjunto de instrucciones sistemáticas y previamente definidas que se utilizan para realizar una determinada tarea. Estas instrucciones están ordenadas y acotadas a manera de pasos a seguir para alcanzar un objetivo.

Esta es una de las definiciones más complejas que he encontrado. Pero es la ideal para nosotros.

Conjunto de instrucciones sistemáticas

Una instrucción es una sub-tarea precisa. Por ejemplo, en una receta, cada paso de la receta es una instrucción. Pero el conjunto de instrucciones forman un sistema llamado receta.

Que se utilizan para realizar una determinada tarea

La tarea en una receta es el platillo a cocinar. Si sigues cada paso lograrás realizar la tarea determinada.

Estas instrucciones están ordenadas y acotadas a manera de pasos a seguir

Ordenar y acotar las instrucciones es esencial para obtener el mismo resultado. Si decides cambiar el orden de las tareas corres el riesgo de obtener un resultado diferente.

Y en ocasiones es imposible cambiar el orden. Por ejemplo, no puedes batir los huevos sin antes romper el cascarón. O no puedes cocinar sin antes prender la estufa. Sé que parece lógico, pero es importante precisar el orden y acotar las instrucciones para que garanticemos el mismo resultado.

Es por eso que obtener un resultado diferente nos hace pensar si hay algún paso que no seguimos al pie de la letra.

¿Cuáles son las características de un algoritmo?

Es importante precisar que cada algoritmo es diferente. Sin embargo, todos deben cumplir con las siguientes características para ser considerado algoritmos:

  1. Inicio y fin: Es importante precisar que un algoritmo puede o no tener pre-requisitos. Es decir, qué se necesita antes de empezar. Pero una vez empieza el algoritmo, debe terminar en algún punto.
  1. Exactitud: Cada algoritmo debe de garantizar que, siempre que se siga al pie de la letra, el resultado debe ser el mismo.
  1. Secuencia: Cambiar el orden de las instrucciones siempre provocará un resultado diferente.
  1. Finitos: El número de pasos para ejecutar la tarea debe ser finito para darla por concluida.

Ejemplo de un algoritmo

Hagamos un pequeño ejemplo de un algoritmo para ayudar a nuestro pequeño robot a llegar al final del laberinto.

En la imagen tenemos marcado el punto de inicio con una S de start de color verde, y de rojo tenemos la E de exit.

Todo algoritmo tiene un inicio y un fin, así que nuestro algoritmo se definiría de la siguiente manera:

  1. Iniciamos desde la puerta de entrada S
  1. Salimos por la puerta de salida E

¿Y cómo definimos los pasos intermedios? primero intenta resolver el laberinto. ¿Listo? ¿No? aquí tienes una pequeña ayuda:

Ahora intenta describir paso a paso cómo avanzarías por el laberinto.

¿Cómo te fue? ¿Pudiste hacerlo? ¿No? no te preocupes, deja te muestro cómo lo describiría yo:

  1. Iniciamos desde la puerta de entrada S.
  1. Avanzamos recto hasta la intersección.
  1. Giramos hacia la derecha.
  1. Avanzamos recto hasta la intersección.
  1. Giramos hacia la izquierda.
  1. Avanzamos recto hasta la pared.
  1. Giramos hacia la derecha.
  1. Avanzamos recto hasta la pared.
  1. Giramos hacia la izquierda.
  1. Avanzamos recto hasta la pared.
  1. Giramos hacia la izquierda.
  1. Avanzamos recto hasta la pared.
  1. Giramos hacia la izquierda.
  1. Avanzamos recto hasta la pared.
  1. Giramos hacia la derecha.
  1. Avanzamos recto hasta la pared.
  1. Giramos hacia la derecha.
  1. Avanzamos recto hasta la salida.
  1. Salimos por la puerta de salida E.

Intenta seguir mi algoritmo en el laberinto y verifica si llegas hasta la salida.

Lo sé, es muchísimo más fácil simplemente ir dibujando en el laberinto el camino por el que vamos avanzando y olvidarnos de los pasos anteriores. Nuestro cerebro es bueno para resolver este tipo de problemas sin que nosotros tengamos que pensar en el paso a paso.

Pero te aseguro que si practicas haciendo más algoritmo, eventualmente podrás resolver problemas muchísimo más complejos que antes tu mente no te permitía. Por ejemplo, imagina cómo sería el algoritmo para resolver este laberinto?

Conclusión

Describir el paso a paso de la solución de un problema puede ser una tarea tediosa, pero una vez que somos consientes de cada paso para la solución de un problema podemos resolver problemas muchísimo más complejos un paso a la vez.

Definir un algoritmo es fundamental para que resolver problemas utilizando el pensamiento lógico. Esto nos ayudará a describir soluciones utilizando lenguajes de programación y desarrollar aplicaciones super simples.

Espero que puedas escribir tus propios algoritmos a partir de ahora.

¿Qué es un operador?

Desde operaciones aritméticas hasta operaciones lógicas. Una computadora puede hacer cualquier tipo de operaciones. Pero ¿cómo podemos nosotros indicarle a la computadora qué operación queremos que realice?

Definición de operador

💡
Símbolos para realizar operaciones

¿Así de simple? Sí, pero lo que se vuelve complicado es entender cuántos tipos de operadores existen y cómo se utilizan.

En nuestro caso revisaremos los tipos que se utilizan en Kotlin.

Operadores en Kotlin

Kotlin admite varios operadores y símbolos especiales. Algunos de ellos requieren conocimientos de programación un poco más avanzados para explicarlos, por lo que te invito a leer el libro de Kotlin para programadores para profundizar.

Los operadores básicos en Kotlin son los siguientes:

Conclusión

Gracias a estos símbolos es que podemos realizar operaciones en nuestra computadora. Y gracias a Kotlin podemos hacerlo en diferentes dispositivos que ejecutan Kotlin. Por ejemplo, los smartphones.

¿Qué es una condición?

Resolver problemas sencillos suele ser cuestión de seguir una serie de pasos en orden. Sin embargo, hay ocasiones en que los problemas requieren diferentes acciones dependiendo de algunas condiciones. Pero, qué es una condición?

Definición de condición

💡
En informática, una condición es una expresión o conjunto de expresiones que evalúan si una determinada situación o estado es verdadero o falso. Se utilizan en estructuras de control, como los condicionales, para tomar decisiones y ejecutar diferentes acciones en función del resultado de la evaluación de la condición.

Puesto en palabras simples, una condición es una pregunta que tenemos que responder. Y dependiendo de la respuesta tomaremos una decisión.

Condicional If en Kotlin

fun valorMasGrande(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

Un ejemplo muy sencillo es comparar dos literales y determinar cuál es el valor más grande.

En este ejemplo se utiliza la palabra reservada if (En español se refiere a la palabra condicional “si”) para comprobar la expresión que está entre los paréntesis (La condición). A continuación se definen dos acciones:

Además, en Kotlin podemos utilizar el if else como expresión:

fun valorMasGrande(a: Int, b: Int) = if (a > b) a else b

Condicional When en Kotlin

También hay ocasiones en las que deseamos definir más posibles acciones para nuestras condiciones.

fun describe(cualquierObjeto: Any): String =
    when (cualquierObjeto) {
        1          -> "Uno"
        "Hola"    -> "Saludos"
        is Long    -> "VAlor largo"
        !is String -> "No es un string"
        else       -> "Desconocido"
    }

En el ejemplo se utiliza la palabra reservada when para evaluar la literal cualquierObjeto. when regresará una cadena de texto “string” dependiendo de la condición. Por ejemplo, si cualquierObjeto es un 1, el texto regresado será “Uno”.

Conclusión

Las condicionales son especialmente útiles para definir diferentes acciones o valores dependiendo del resultado de nuestra condición.

Cuando tenemos una sola condición, if resulta suficiente y when será mejor cuando tenemos varias condiciones.

También podemos anidar condiciones, pero ese tema lo abordo con mejores prácticas sobre condicionales avanzados en el libro de Kotlin para programadores.

¿Qué es un ciclo?

En el fascinante mundo de la programación, los ciclos son herramientas fundamentales que permiten automatizar y repetir tareas. Pueden ser comparados con procesos repetitivos en la vida cotidiana, como lavar platos o hacer ejercicio, donde realizamos la misma acción varias veces hasta que se cumple cierta condición.

Definición de ciclo

💡
En programación, un ciclo es una estructura de control que permite ejecutar un conjunto de instrucciones de manera repetitiva hasta que una condición específica se cumple.

Un ciclo consta de tres partes principales:

  1. Inicialización: Se establece un valor inicial que controla el inicio del ciclo.
  1. Condición de Continuación: Se verifica una condición que determina si el ciclo debe continuar ejecutándose.
  1. Actualización: Se realiza una acción que modifica el valor de control para avanzar hacia el final del ciclo.

Ejemplo de Ciclo en Programación

Imaginemos que queremos imprimir los números del 1 al 5 en la pantalla. En lugar de escribir cinco líneas de código para cada número, podemos utilizar un ciclo para hacerlo de manera más eficiente. Aquí tienes un ejemplo en Kotlin:

fun main() {
    // Inicialización: Establecemos el valor inicial en 1
    var i = 1

    // Condición de Continuación: El ciclo se ejecutará mientras i sea menor o igual a 5
    while (i <= 5) {
        // Cuerpo del Ciclo: Imprimimos el valor de i
        println(i)

        // Actualización: Incrementamos el valor de i para avanzar en el ciclo
        i++
    }
}

En este ejemplo, el ciclo while se ejecutará mientras la variable i sea menor o igual a 5. En cada iteración, se imprime el valor de i y luego se incrementa para avanzar en el ciclo.

Tipos de Ciclos en Kotlin

Existen dos tipos de ciclos en Kotlin, while o do-while y el ciclo for.

While o do-while

El ciclo while o do-while repite un proceso hasta que la condición predefinida deja de cumplirse. Es decir, mientras la condición sea verdad, el ciclo se repite. Por ejemplo:

val palabras = listOf("apple", "banana", "kiwifruit")
var indice = 0
/** 
	* El ciclo while se repetirá mientras el indice sea menor que la cantidad
	* de palabras en la lista.
	*
	* Observa cómo el indice aumentará en uno cada vez que el ciclo se repita.
	*/
while (indice < palabras.size) {
    println("La palabra en la posición $indice es ${palabras[indice]}")
    indice++
}

/**
	* La única diferencia entre el ciclo while y do-while es el orden en el que
	* se evalúa la condición. Mientras que while primero evalúa la condición
	* y si la condición es verdadera ejecuta el proceso, el do-while primero
	* ejecuta el proceso y después después evalúa la condición.
	*/
do {
		println("La palabra en la posición $indice es ${palabras[indice]}")
	  indice++
} while (indice < palabras.size)

For

El ciclo for repite un proceso una cantidad definida de veces. Por ejemplo:

val palabras = listOf("Mis", "palabras", "no", "se", "acaban")
/** 
	* El ciclo for recorrerá la lista e imprimirá cada una de las palabras 
	* una a la vez
	*/
for (palabra in palabras) println(palabra)

Uso Práctico de Ciclos

Los ciclos son cruciales para procesar grandes conjuntos de datos, realizar operaciones repetitivas y controlar flujos de trabajo complejos. Desde la manipulación de elementos en una lista hasta la lectura de archivos, los ciclos proporcionan una manera eficiente de automatizar tareas en programación.

Consideraciones Finales

Al utilizar ciclos, es esencial asegurarse de que la condición de continuación eventualmente se vuelva falsa para evitar ciclos infinitos. También, se debe tener en cuenta la eficiencia del código y buscar optimizaciones cuando sea posible.

En resumen, los ciclos son una herramienta poderosa en el arsenal de cualquier programador, permitiendo la automatización de tareas repetitivas y la manipulación eficiente de datos. ¡Explora y experimenta con ciclos para mejorar tus habilidades de programación!

¿Qué es una estructura de datos?

En el vasto universo de la programación, las estructuras de datos son esenciales para organizar y almacenar información de manera eficiente. Si piensas en un programa como una cocina, donde los ingredientes son los datos y las herramientas son las funciones, las estructuras de datos serían los recipientes que seleccionas para guardar y manipular esos ingredientes.

Definición de Estructura de Datos

💡
En programación, una estructura de datos es una forma de organizar y almacenar datos para que puedan ser utilizados y manipulados de manera efectiva.

Cuando hablamos de utilizar y manipular datos podemos utilizar de ejemplo que tenemos muchos libros. Una estructura de datos sería ordenar los libros alfabéticamente en libreros. Creo que estamos de acuerdo en que si los libros están en cualquier orden y no están al alance de la mano sería super complicado encontrar tu libro favorito.

Características Principales de una Estructura de Datos

  1. Almacenamiento: Determina cómo se almacenan los datos, ya sea en secuencia, en bloques o de alguna otra manera específica.
  1. Acceso: Define cómo se accede y se manipulan los datos almacenados. Esto puede incluir la búsqueda, la inserción, la eliminación y otras operaciones.
  1. Eficiencia: Busca lograr el mejor rendimiento posible en términos de tiempo de ejecución y uso de memoria, según las necesidades del programa.

Ejemplo de Estructura de Datos en Kotlin

En Kotlin, como en muchos otros lenguajes de programación, puedes utilizar varias estructuras de datos. Veamos un ejemplo simple utilizando una lista para almacenar nombres:

fun main() {
    // Creación de una lista de nombres
    val listaNombres = mutableListOf("Ana", "Juan", "María", "Carlos")

    // Acceso y manipulación de la lista
    listaNombres.add("Laura")  // Agrega un nuevo nombre
    listaNombres.remove("Juan")  // Elimina el nombre "Juan"

    // Imprime la lista actualizada
    println("Lista de Nombres: $listaNombres")
}

En este ejemplo, hemos utilizado una estructura de datos llamada "lista" para almacenar nombres. La lista proporciona métodos para agregar y eliminar elementos, y también se puede acceder fácilmente a los elementos mediante su índice.

Tipos Comunes de Estructuras de Datos

  1. Listas: Colección ordenada de elementos que permite duplicados.
  1. Conjuntos: Colección de elementos únicos, sin orden específico.
  1. Mapas (o Diccionarios): Asocian claves con valores para una búsqueda eficiente.
  1. Colas: Sigue el principio "primero en entrar, primero en salir" (FIFO).
  1. Pilas: Sigue el principio "último en entrar, primero en salir" (LIFO).

Uso Práctico de Estructuras de Datos

Las estructuras de datos son fundamentales en la resolución de problemas de programación y en la optimización del rendimiento de los programas. Seleccionar la estructura de datos correcta para una tarea específica puede marcar la diferencia entre un programa eficiente y uno que consume muchos recursos.

Consideraciones Finales

Al explorar la programación y Kotlin, es crucial comprender no solo cómo escribir funciones, sino también cómo organizar y manipular datos de manera efectiva. Las estructuras de datos son herramientas poderosas que te permiten hacer precisamente eso. A medida que avanzas en tu aprendizaje, experimenta con diferentes estructuras de datos y descubre cuándo y cómo utilizarlas para optimizar tus programas.

Mi primer aplicación móvil

Después de esta lección, por fin podrás decir que programaste tu primer aplicación móvil en Android.

1. Antes de empezar

💡
Este capítulo es una réplica del Codelab oficial de Google Cómo crear tu primera app para Android.
💡
Para seguir este capítulo asumiremos que ya tienes instalado Android Studio.

Requisitos previos

Requisitos

Qué aprenderás

Qué compilarás

Así se verá la app cuando completes este tutorial (Excepto que dirá tu nombre).

[Screenshot de la app terminada]

Requisitos

2. Mira el video con instrucciones para compilar (opcional)

Si quieres ver cómo uno de los instructores de Google completa el tutorial, reproduce el siguiente vídeo.

O también puedes mirar el vídeo en nuestro canal.

[Embed Vídeo de Programación desde 0]

3. Cómo crear un proyecto con la plantilla

En este tutorial, crearemos una app para Android con la plantilla de proyecto Empty Activity, que proporciona Android Studio.

Para crear un proyecto en Android Studio:

  1. Abrimos Android Studio:
  1. En el diálogo Welcome to Android Studio, haz clic en la opción New Project.

    Se abrirá la ventana New Project con una lista de plantillas que ofrece Android Studio.

En Android Studio, una plantilla de proyecto es un proyecto de Android que proporciona el plano para un tipo de app determinado. Las plantillas crean la estructura del proyecto y los archivos necesarios de modo que Android Studio compile tu proyecto. Según la plantilla que elijas, te brindará un código inicial para que puedas avanzar más rápido.

  1. Asegúrate de que la pestaña Phone and Tablet esté seleccionada.
  1. Haz click en la plantilla Empty Activity para armar tu proyecto con ella. Esta plantilla nos permite crear un proyecto simple que puedes usar a fin de compilar una app de Compose. Tiene una sola pantalla y muestra el texto “Hello Android!”.
  1. Haz clic en Next. Se abrirá el diálogo New Project. Este tiene algunos campos para configurar el proyecto.
  1. Configura tu proyecto como se indica a continuación:
  1. Haz clic en Finish. Ese proceso puede tardar un rato, así que esperemos a que termine y continuamos.
  1. Es posible que veas el panel What’s New que contenga actualizaciones sobre funciones nuevas en Android Studio. Ciérralo por ahora.
  1. En la esquina superior derecha de android Studio, haz clic en el ícono de en medio que muestra una columna de líneas y un rectángulo. Esto te permitira ver tanto el codigo como el diseño. Tambien puedes hacer clic en el ícono de la columna de líneas para ver solo el codigo, o bien en el ícono de una imagen para ver solo el diseño.

Después de presionar el ícono de en medio, deberías ver tres areas:

  1. Haz clic en Build & Refresh. Es posible que la compilación tarde un poco en completarse, pero cuando finalice, la vista previa mostrará un cuadro de texto que indicará "Hello Android!". La actividad Empty Compose contiene todo el código necesario para crear esta app.

4. Cómo buscar archivos del proyecto

En esta sección, explorarás Android Studio mientras que te familiarizas con la estructura de archivos.

  1. En Android Studio, consulta la pestaña Project. En la pestaña Project, se muestran los archivos y las carpetas de tu proyecto. Cuando estabas configurando tu proyecto, el nombre de paquete era com.example.greetingcard. Puedes ver ese paquete aquí en la pestaña Project. En esencia, un paquete es una carpeta en la que se encuentra el código. Android Studio organiza el proyecto en una estructura de directorios compuesta por paquetes.
  1. Si es necesario, selecciona Android en el menú desplegable de la pestaña Project.

    Esta es la organización y vista estándar de los archivos que usas. Resulta útil cuando escribes código para tu proyecto, ya que puedes acceder con facilidad a los archivos en los que trabajarás en tu app. Sin embargo, si accedes a los archivos desde un navegador, como Finder o Windows Explorer, la organización de la jerarquía de archivos es muy distinta.

  1. Selecciona Project Source Files en el menú desplegable. Ahora puedes navegar entre los archivos del mismo modo que lo harías con cualquier navegador.
  1. Selecciona Android nuevamente para volver a la vista anterior. En este curso, usaras la vista de Android.

5. Cómo actualizar el texto

Ahora que conocemos Android Studio, es hora de comenzar a crear nuestra tarjeta de presentación.

Mira la vista Code del archivo MainActivity.kt. Observa que hay algunas funciones generadas automáticamente en este código, en particular, las funciones onCreate() y setContent().

💡

Nota: Recuerda que una función es un segmento de un programa que realiza una tarea específica.

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            GreetingCardTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Greeting(
                        name = "Android",
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

La función onCreate() es el punto de entrada a esta app y llama a otras funciones para compilar la interfaz de usuario. En los programas de Kotlin, la función main() es el lugar específico de tu código en el que se inicia el compilador de Kotlin. En las apps para Android, la función onCreate() realiza esa tarea.

La función setContent() dentro de la función onCreate() se usa a fin de definir el diseño mediante funciones que admiten composición. Se puede llamar a todas las funciones marcadas con la anotación @Composable desde la función setContent() o desde otras que admitan composición. La anotación le indica al compilador de Kotlin que Jetpack Compose usa esta función para generar la IU.

💡

Nota: El compilador toma el código Kotlin que escribiste, lo analiza línea por línea y lo traduce a algo que la computadora puede comprender. Este proceso se denomina compilación de código.

A continuación, observa la función Greeting(). La función Greeting() es una que corresponde a la componibilidad. Observa la anotación @Composable que se encuentra sobre ella. Una función de componibilidad toma alguna entrada y genera lo que se muestra en la pantalla.

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

Ya aprendiste sobre las funciones (si necesitas un repaso, visita el codelab Cómo crear y usar funciones en Kotlin), pero existen algunas diferencias con las funciones que admiten composición.

  1. Antes de la función, se agrega la anotación @Composable.
  1. Los nombres de las funciones @Composable llevan mayúscula.
  1. Las funciones @Composable no pueden retornar nada.

Por el momento, la función Greeting() toma un nombre y muestra el saludo Hello dirigido a esa persona.

  1. Actualiza la función Greeting() para presentarte en lugar de mostrar "Hello":
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hi, my name is $name!",
        modifier = modifier
    )
}
  1. Vuelve a compilar DefaultPreview presionando el botón de las flechas en círculo en la parte superior izquierda del panel de diseño:

¡Perfecto! Cambiaste el texto, pero te presenta como Android, un nombre que probablemente no sea el tuyo. A continuación, personalizarás la presentación con tu nombre.

La función DefaultPreview() es una función genial que te permite ver cómo se ve la app sin tener que compilarla por completo. Para que pueda ser una función de vista previa, debes agregar una anotación @Preview.

Como puedes ver, la anotación @Preview toma un parámetro llamado showBackground. Si estableces showBackground como verdadero, se agregará un fondo a la vista previa de tu app.

Como Android Studio usa un tema claro de forma predeterminada para el editor, puede resultar difícil ver la diferencia entre showBackground = verdadero y showBackground = falso. Sin embargo, así se ve la diferencia con un tema oscuro. Observa el fondo blanco en la imagen cuando se establece como verdadero.

@Preview(showBackground = true)
@Preview(showBackground = false)
  1. Actualiza la función DefaultPreview() con tu nombre. Luego, vuelve a compilar la app y revisa tu tarjeta de presentación personalizada.
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    GreetingCardTheme {
        Greeting("JesusDMedinaC")
    }
}

6. Cómo cambiar el color del fondo

Ahora tenemos el texto de presentación, pero es un poco aburrido. En esta sección, aprenderás a cambiar el color de fondo.

Si deseas establecer un color de fondo diferente para la presentación, deberás envolver el texto en una Surface. Una Surface es un contenedor que representa una sección de la IU en la que puedes modificar el aspecto, como el borde o el color de fondo.

  1. Para rodear el texto con una Surface, destaca la línea de texto, presiona (Alt+Enter en Windows o Option+Enter en Mac) y, luego, selecciona Surround with widget.
  1. Selecciona Surround with Container.

El contenedor predeterminado que te dará es Box, pero puedes cambiarlo por otro tipo de contenedor.

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Box {
        Text(
            text = "Hi, my name is $name!",
            modifier = modifier
        )
    }
}
  1. Borra Box y escribe Surface() en su lugar.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Surface {
        Text(
            text = "Hi, my name is $name!",
            modifier = modifier
        )
    }
}
  1. El contenedor Surface tiene un parámetro color. Configúralo como Color.
@Composable
fun Greeting(name: String) {
   Surface(color = Color) {
       Text(text = "Hi, my name is $name!")
   }
}
  1. Cuando escribes Color, puedes notar que la palabra estará en color rojo y subrayada. Para resolver este problema, presiona Alt+Enter en Windows o Option+Enter en Mac para mostrar las opciones de importación.
  1. Elige la librería de androidx.compsoe.ui.graphics

Notarás que se agregó una línea en la parte de arriba de tu archivo. Para verla deberás hacer click en los tres puntos suspensivos después de la palabra import.

La lista completa de importaciones se verá de la siguiente manera:

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import com.example.greetingcard.ui.theme.GreetingCardTheme

  1. Observa que la palabra Color que escribiste en los paréntesis de Surface cambió de roja y subrayada a subrayada en rojo. Para solucionar ese problema, agrega un punto después de la palabra. Verás una ventana emergente con diferentes opciones de colores.

Esta es una de las funciones geniales de Android Studio; es ingeniosa y te ayudará cuando sea posible. En este caso, reconoce que quieres especificar un color, así que te sugerirá diferentes colores.

  1. Elige un color para la superficie. Este codelab usa magenta, pero puedes elegir el que prefieras.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Surface(color = Color.Magenta) {
        Text(
            text = "Hi, my name is $name!",
            modifier = modifier
        )
    }
}
  1. Haz clic en Build & Refresh. El texto estará rodeado por el color que elegiste.

7. Cómo agregar padding

Ahora nuestro texto tiene un color de fondo; a continuación, agregaremos un poco de espacio (padding) alrededor del texto.

Se usa un Modifier para aumentar o decorar un elemento que admite composición. Un modificador que puedes usar es el modificador padding, que agrega espacio alrededor del elemento (en este caso, alrededor del texto). Esto se logra mediante la función Modifier.padding().

  1. Agrega estas importaciones a la sección de declaración de importaciones.

Asegúrate de usar Optimize Imports para organizar alfabéticamente las importaciones nuevas.

import androidx.compose.ui.unit.dp
import androidx.compose.foundation.layout.padding
  1. Agrega un modificador de padding al texto con un tamaño de 24.dp y haz clic en Build & Refresh.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Surface(color = Color.Magenta) {
        Text(
            text = "Hi, my name is $name!",
            modifier = modifier.padding(24.dp)
        )
    }
}

¡Felicitaciones! Compilaste tu primera app para Android en Compose. Este logro es bastante importante. Tómate un tiempo para experimentar con diferentes colores y texto, y personalízalos a tu gusto.

8. Código final

package com.example.greetingcard

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import com.example.greetingcard.ui.theme.GreetingCardTheme
import androidx.compose.ui.unit.dp
import androidx.compose.foundation.layout.padding

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            GreetingCardTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Greeting(
                        name = "Android",
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Surface(color = Color.Magenta) {
        Text(
            text = "Hi, my name is $name!",
            modifier = modifier.padding(24.dp)
        )
    }
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    GreetingCardTheme {
        Greeting("JesusDMedinaC")
    }
}

9. Conclusión

Aprendimos a utilizar Android Studio y creamos nuestra primera app para Android con Compose. ¡Genial!

Este capítulo es una réplica del Codelab oficial de Google Cómo crear tu primera app para Android y está inpirado en el curso Aspectos básicos de Android con Compose. Si quieres obtener información para ejecutar tu app en el emulador o en un dispositivo físico, consulta los siguientes codelabs de esta ruta de aprendizaje.

Resumen

Más información

Conclusión

¡Llegamos al final de este viaje! Como mencioné al inicio, yo creo en ti y espero que este libro te haya ayudado a dar tus primeros pasos en el mundo de la programación con Kotlin.

Aprendimos desde cero cómo configurar nuestro entorno de desarrollo con Android Studio, entendimos los conceptos básicos de Kotlin y, lo más emocionante, ¡creamos nuestra primera aplicación Android! Utilizamos herramientas modernas como Jetpack Compose y aprendimos sobre Composables, Modifiers y cómo dar vida a nuestra interfaz de usuario.

Este libro fue diseñado pensando en ti, que quizás nunca has programado antes. Por eso, cada concepto se explicó paso a paso, con ejemplos prácticos y claros. Mi objetivo fue darte una base sólida para que puedas seguir explorando el desarrollo de aplicaciones Android, ya sea como un pasatiempo o como el inicio de tu carrera profesional.

Recuerda que este es solo el comienzo. La programación es un viaje continuo de aprendizaje y descubrimiento. Te animo a que sigas practicando, experimentes con el código y, sobre todo, que no tengas miedo a equivocarte. Cada error es una oportunidad para aprender algo nuevo.

Si tienes dudas o necesitas ayuda, recuerda que puedes contactarme a través de cualquiera de mis redes sociales o correo electrónico. ¡Estoy aquí para apoyarte en tu camino hacia convertirte en un desarrollador Kotlin!

Biografía del Autor

Hola, soy Jesús Daniel Medina Cruz, Kotlin Mobile Engineer.

Actualmente, soy fundador de Academia Desde0, una plataforma dedicada a empoderar a personas interesadas en aprender desarrollo de software, desde principiantes hasta desarrolladores avanzados. Mi experiencia profesional incluye roles en empresas reconocidas como Bitso, Dexcom, y Globant, donde lideré proyectos en Kotlin Multiplatform, desarrollé aplicaciones innovadoras, e implementé mejores prácticas en arquitectura de software.

A lo largo de mi trayectoria, he diseñado y enseñado currículos educativos en plataformas como Arol.dev, cubriendo desde los fundamentos de Kotlin hasta desarrollo multiplataforma con tecnologías modernas. También he trabajado como consultor freelance, ayudando a empresas a implementar soluciones tecnológicas eficientes y escalables.

Me apasiona enseñar y compartir conocimientos, y este libro es una extensión de mi misión de hacer que la programación sea accesible para todos. Si alguna vez quisiste adentrarte en el mundo del desarrollo móvil, estoy aquí para guiarte paso a paso. Puedes contactarme en hi@jesusdmedinac.com o conectarte conmigo en LinkedIn. ¡Espero que disfrutes este viaje a través del aprendizaje de Kotlin!

Información de contacto

http://jesusdmedinac.com

http://jesusdmedinac.is-a.dev

Redes sociales

https://www.youtube.com/@jesusdmedinac/

https://www.linkedin.com/in/jesusdmedinac/

https://www.tiktok.com/@jesusdmedinac

https://www.facebook.com/jesusdmedinac

https://www.instagram.com/jesusdmedinac

https://x.com/JesusDMedinaC

https://github.com/jesusdmedinac

https://discord.gg/nChTf3PdGJ

https://www.twitch.tv/jesusdmedinac

Proyectos

https://desde0.jesusdmedinac.com/

https://composy.jesusdmedinac.com/

https://kmp.jesusdmedinac.com/

https://bubble.jesusdmedinac.com/

https://blog.jesusdmedinac.com/