# Aprende a programar con ejercicios

## Introducción
**¡Bienvenidos a mi repositorio de programación!** Si estás empezando en este mundo y quieres poner tus habilidades en práctica, ¡este es el lugar perfecto para ti! Te guiaré a través de ejercicios prácticos y te proporcionaré enlaces a recursos para ayudarte a comprender la teoría. ¡Ven y únete a mi repositorio de aprendizaje de la programación hoy mismo!
¿Listo para empezar tu aventura en el mundo de la programación? Antes de escribir tu primer código, hay una cosa muy importante que debes hacer: ¡elegir tu lenguaje de programación! Pero no te preocupes, te mencionaré algunos consejos para que puedas elegir el mejor lenguaje para ti. Aquí hay algunos puntos que debes tener en cuenta:
* Identifica tus objetivos y el tipo de trabajo o proyecto que quieres realizar. Algunas preguntas que puedes hacerte son: ¿quieres crear aplicaciones web o móviles? ¿Te interesa la ciencia de datos o el aprendizaje automático? ¿Te gustaría trabajar en el desarrollo de videojuegos o en el diseño de sistemas operativos?
* Investiga qué lenguajes de programación son adecuados para el tipo de trabajo o proyecto que quieres realizar. Por ejemplo, si quieres crear aplicaciones web, es probable que quieras aprender HTML, CSS y JavaScript. Si te interesa la ciencia de datos, es posible que quieras aprender Python. Si te gustaría trabajar en el desarrollo de videojuegos, es posible que quieras aprender C++ o C#.
* Considera el nivel de dificultad y la curva de aprendizaje de cada lenguaje. Algunos lenguajes son más fáciles de aprender que otros, por lo que pueden ser más adecuados para principiantes. Sin embargo, también es importante considerar si un lenguaje es más adecuado para el tipo de trabajo o proyecto que quieres realizar, incluso si es más difícil de aprender.
* Infórmate sobre la comunidad y la popularidad de cada lenguaje. Es útil aprender un lenguaje que tenga una gran comunidad de programadores y recursos disponibles, ya que esto puede hacer que sea más fácil obtener ayuda y aprender nuevas habilidades.
* Prueba diferentes lenguajes para encontrar el que más te guste. Una vez que hayas identificado unos pocos lenguajes que sean adecuados para tus objetivos y que estén en tu nivel de dificultad, es útil dedicar un poco de tiempo a probar cada uno de ellos para ver cuál te gusta más.
----
## Indice
* [Aprende a programar con ejercicios](#aprende-a-programar-con-ejercicios)
* [Introducción](#introducción)
* [Indice](#indice)
* [Entorno de desarrollo](#entorno-de-desarrollo)
* [Roadmaps](#roadmaps)
* [Recursos extra](#recursos-extra)
* [Estructura del proyecto](#estructura-del-proyecto)
* [Tabla de contenido](#tabla-de-contenido)
* [1. Declaración de variables](#1-declaración-de-variables)
* [2. Funciones](#2-funciones)
* [3. Estructuras condicionales](#3-estructuras-condicionales)
* [4. Bucles](#4-bucles)
## Entorno de desarrollo
Aunque no lo parezca, es importante elegir un entorno de desarrollo (Editor de código o IDE), ya que ahi es donde estarás siempre que programes y el conocer bien tu IDE, hará que programes de una forma mas cómoda y rápida, para elegir uno, hay varios factores a considerar:
* El lenguaje de programación que vas a utilizar: Algunos IDEs son especializados en ciertos lenguajes de programación, por lo que es importante elegir uno que soporte el lenguaje que deseas utilizar.
* La facilidad de uso: Un IDE intuitivo te permitirá programar de manera más eficiente y cómoda.
* Las características y herramientas disponibles: Algunos IDEs tienen más herramientas y funcionalidades que otros. Considera cuáles son las herramientas que necesitarás y busca un IDE que las ofrezca.
* La plataforma en la que deseas programar: Asegúrate de elegir un IDE que sea compatible con la plataforma en la que deseas programar (por ejemplo, Windows, Mac, Linux).
* El precio: Algunos IDEs son gratuitos, mientras que otros son de pago. Considera tu presupuesto y elige uno que se ajuste a tus necesidades y tu bolsillo.
*Es recomendable probar varios IDEs antes de tomar una decisión final. Puedes descargar versiones de prueba o utilizar versiones gratuitas para probarlos y ver cuál se adapta mejor a tus necesidades.*
*En mi caso usare Intellij IDEA, que es el IDE para Kotlin, pero se puede usar cualquier otro IDE o editor de código para este lenguaje o cualquiera que elijas.*
Para este repositorio, los ejercicios de ejemplo serán resueltos en [Kotlin](https://kotlinlang.org/) y puedes ingresar [aquí](https://play.kotlinlang.org/) y probar dichos ejemplos.
## Roadmaps
Aquí hay una lista de roadmaps que te pueden ayudar a continuar con tu aprendizaje dependiendo de la rama de programación que hayas elegido.
* [Desarrollo web (FrontEnd)](https://github.com/Z8264/frontend-developer-roadmap): HTML, CSS, JavaScript, React, Angular, Vue.js
* [Desarrollo web (BackEnd)](https://github.com/Abanoub-Asaad/Java-Backend): Python, Java, C#, Ruby, PHP, Go
* [Ciencia de datos](https://github.com/DataScienceResearchPeru/OpenSource-RoadMap-DataScience): Python, R, SAS, SQL, Julia
* [Inteligencia artificial](https://github.com/AMAI-GmbH/AI-Expert-Roadmap): Python, R, Java, C++
* [Programación móvil (IOS)](https://github.com/mouredev/Apple-Developer-Roadmap): Swift.
* [Programación Movil (Android)](https://github.com/mouredev/Android-Developer-Roadmap) Java, Kotlin.
* [Programación Movil (Híbrido, Flutter)](https://roadmap.sh/flutter): Dart
* [Programación de videojuegos](https://github.com/utilForever/game-developer-roadmap): C++, C#, Unity (C#), Unreal Engine (C++)
* [Administración de bases de datos](https://roadmap.sh/postgresql-dba): SQL, MySQL, Oracle, MongoDB, Redis, PostgresSQL
## Recursos extra
Aquí hay una serie de recursos para facilitar tu camino a la programación de forma autodidacta.
* [Proyectos para principiantes](https://github.com/MunGell/awesome-for-beginners)
* [Libros de programación](https://github.com/EbookFoundation/free-programming-books)
* [Recursos gratis para desarrolladores](https://github.com/ripienaar/free-for-dev)
* [Lo que todo programador debería saber](https://github.com/mtdvio/every-programmer-should-know)
* Aprende Ingles
* [Clozemaster](https://www.clozemaster.com/)
* [Learn American English](https://www.learnamericanenglishonline.com/)
* Practica lo aprendido
* [HackerRank](https://hackerrank.com/)
* [Leetcode](https://leetcode.com/)
* [Codewars](https://www.codewars.com/)
## Estructura del proyecto
Por cada tema/subtema del temario se crea una clase dentro del proyecto, dentro de dicha clase, agregare una nueva función por cada ejercicio resuelto, una vez hecho eso, en la clase principal se declara un objeto de la clase, después de ello se manda a llamar a los métodos en donde estén los ejemplos para asi ejecutar cada ejercicio y comprobar la salida de dicho método.
## Tabla de contenido
### 1. Declaración de variables
* Tipos de datos en Kotlin (enteros, flotantes, booleanos, cadenas, etc.):
* Declaración de variables con "var" y "val":
* Diferencias entre "var" y "val":
* Asignación de valores a variables en Kotlin:
* Inicialización de variables en Kotlin:
* Null Safety en Kotlin:
* Uso de "?." y "!!" en Kotlin para evitar el NullPointerException:
* Declaración de variables sin tipo (Any, Any?, Unit):
* Conversión de tipos de datos en Kotlin (toInt(), toDouble(), etc.):
* Uso de "is" y "as" para comprobación y conversión de tipos en Kotlin:
* Operadores de comparación en Kotlin (==, !=, >, <, etc.):
* Operadores de asignación en Kotlin (+=, -=, etc.)
* Concatenación de cadenas en Kotlin (con "+" y con "$")
* Interpolación de cadenas en Kotlin (con "${ }" y con " $"):
### 2. Funciones
* Declaración de funciones:
* Parámetros y valores de retorno:
* Funciones con nombre:
* Funciones con expresiones lambda:
* Funciones con parámetros opcionales y valores por defecto:
* Funciones anidadas:
* Funciones con ámbito de bloque:
* Funciones inlining:
* Funciones con parámetros variables:
* Funciones con parámetros de tipo clase genérica:
* Funciones de extensión:
### 3. Estructuras condicionales
* Sentencia "if":
* Sentencia "when":
* Operadores lógicos:
* Sentencia "else":
* Sentencia "else if":
* Uso de paréntesis para evaluar condiciones múltiples:
* Anidamiento de estructuras condicionales:
* Uso de la palabra clave "break" en estructuras "when":
* Uso de la palabra clave "continue" en estructuras de control de flujo:
* Diferencias entre "break" y "continue":
### 4. Bucles
* Bucles "for":
* Bucles "for each":
* Bucle "while":
* Bucle "do-while":
* Romper y continuar bucles:
* Uso de la palabra clave "break" para romper bucles:
* Uso de la palabra clave "continue" para continuar a la siguiente iteración de un bucle:
* Anidamiento de bucles:
* Bucles "for" anidados:
* Bucles "for each" anidados:
* Bucles "while" anidados:
* Bucles "do-while" anidados:
* Uso de la palabra clave "return" para salir de una función dentro de un bucle:
* Bucles infinitos: