<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Jorge Torres Torres - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Jorge Torres Torres - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 19:37:24 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/jorge-torres-torres/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo aprender a programar: La guía que desearía haber tenido cuando empecé a aprender a programar ]]>
                </title>
                <description>
                    <![CDATA[ Solo el pensamiento de aprender a programar puede ser muy intimidante. La palabra programar es misteriosa por definición. Eso implica una forma técnica comunicación que las computadoras, y no los humanos, deben entender. Una forma en que muchas personas empiezan a programar es eligiendo un lenguaje de programación popular y ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-aprender-a-programar-la-guia-que-desearia-haber-tenido-cuando-empece-a-aprender-a-programar/</link>
                <guid isPermaLink="false">63015ccc7b4ec209a4024ead</guid>
                
                    <category>
                        <![CDATA[ aprende a programar ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jorge Torres Torres ]]>
                </dc:creator>
                <pubDate>Wed, 08 Mar 2023 19:53:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/08/The-Programming-Guide-I-Wish-I-Had-When-I-Started-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-learn-programming/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Learn Programming – The Guide I Wish I Had When I Started Learning to Code</a>
      </p><p>Solo el pensamiento de aprender a programar puede ser muy intimidante. La palabra <strong>programar </strong>es misteriosa por definición. Eso implica una forma técnica comunicación que las computadoras, y no los humanos, deben entender.</p><p>Una forma en que muchas personas empiezan a programar es eligiendo un lenguaje de programación popular y saltando de cabeza sin dirección. Esto podría ser haciendo un curso de programación en línea, un proyecto de tutorial, o una compra aleatoria de un libro sobre un tema en específico. </p><p>Rara vez los posibles desarrolladores comienzan con una ruta de aprendizaje -una vista panorámica del mundo de la codificación que describe un conjunto de conceptos, lenguajes y herramientas de programación relevantes que casi el 100% de los desarrolladores usan todos los días.</p><p>En este artículo, propongo una de esas rutas de aprendizaje. Hago esto describiendo 14 pasos, cada uno de los cuales analiza un concepto, lenguaje o herramienta esencial, que los desarrolladores profesionales usan para escribir código, colaborar y crear proyectos profesionales.</p><p>Elegí meticulosamente estos 14 pasos en función de mi propio viaje personal aprendiendo a programar, que abarca casi 20 años.</p><p>Parte de la razón por la que me tomó tanto tiempo sentirme cómodo como desarrollador es que aprendía sobre temas específicos sin un contexto más amplio del mundo de la programación.</p><p>Cada uno de los pasos de este artículo analiza un "esenciales &nbsp;de programación", algo que creo que es fundamental para al menos saber que existe al comienzo de tu viaje de aprendizaje de programación.</p><p>Una nota final antes de enumerar los pasos en la hoja de ruta: por supuesto, leer este artículo no te convertirá en unprogramador o programadora experto(a).</p><p>No está destinado a ser así. El propósito de este artículo es informarte que cada uno de estos temas existe y, con suerte, darte una idea básica de cómo funciona cada uno para que puedas desarrollarlos de manera inteligente en el futuro.</p><h2 id="14-pasos-en-la-ruta-de-aprendizaje-para-desarrolladores-principiantes"><strong>14 Pasos en la ruta de aprendizaje &nbsp;para Desarrolladores principiantes</strong></h2><ol><li><a href="#computer-architecture-basicos-bases-de-datos">Familiarízate con Computer Architecture y Básicos de &nbsp;Base de Datos</a></li><li><a href="#aprende-como-trabajan-lenguajes-programacion">Aprende como trabajan los lenguajes de Programación</a></li><li><a href="#como-funciona-internet">Comprende como funciona el Internet</a></li><li><a href="#practica-basica-linea-de-comandos">Practica básica de la Línea de Comandos </a></li><li><a href="#habilidades-editor-texto-vim">Incrementa tus habilidades en el Editor de Texto con VIM</a></li><li><a href="#aprende-html">Aprende algo de &nbsp;HTML</a></li><li><a href="#abordar-css">Abordar algo de CSS</a></li><li><a href="#empezar-programar-con-javascript">Empieza a Programar con JavaScript</a></li><li><a href="#continua-programando-con-python">Continua Programando con Python</a></li><li><a href="#conocimientos-java">Amplia &nbsp;tu conocimiento con Java</a></li><li><a href="#rastrea-codigo-con-git">Rastrea tu Código usando Git</a></li><li><a href="#guardar-datos-base-de-datos">Guarda Datos usando Base de Datos &nbsp;y SQL </a></li><li><a href="#leer-sobre-frameworks-mvc">Leer sobre Web Frameworks y MVC</a></li><li><a href="#manejadores-de-paquetes">Jugando con Administradores de Paquetes</a></li></ol><p>Sin más preámbulo, empecemos por lo primero.</p><!--kg-card-begin: html--><h2 id="##computer-architecture-basicos-bases-de-dato">1) Familiarízate con Arquitectura Computacional y Básicos de Datos</h2><!--kg-card-end: html--><p>Una de las cosas más maravillosas de los lenguajes de programación modernos es que nos permiten crear aplicaciones sofisticadas sin preocuparnos sobre los detalles medulares del hardware detrás de las escenas (en su mayor parte). </p><p>Esto es llamado Abstracción – La habilidad de trabajar con herramientas de niveles altos (en este caso los lenguajes de programación) que simplifican y disminuyen el ámbito requerido de nuestra comprensión y habilidades. </p><p>Sin embargo, eso no significa que no sea de utilidad saber los básicos de la estructura que tu código está ejecutando. Y al final, estar consciente de algunas cosas que te ayudan a navegar en tus conversaciones en el lugar de trabajo sobre el elevado uso de la CPU y memoria.</p><p>Así que aquí hay un mínimo de arquitectura computacional para que empieces.</p><p>La parte más importante de tu computadora son los microchips (también conocidos como circuitos integrados).</p><p>Los microchips dependen para funcionar de un componente eléctrico llamado transistor. Los transistores son pequeños interruptores eléctricos que están apagados (0) o encendidos (1) en un momento dado. Un solo microchip puede contener millones o miles de millones de diminutos transistores incrustados en él.<strong> </strong></p><p>Las computadoras más modernas tienen un procesador llamado <strong>Unidad Central de Procesamiento (CPU, Central Processing Unit )</strong>. Puedes comparar a la computadora con un cerebro. Maneja la mayoría de las tareas lógicas y de procesamiento de números que realiza la computadora.</p><p>Cada CPU tiene algo llamado conjunto de instrucciones, que es una colección de comandos binarios (ceros y unos) que la CPU entiende. Afortunadamente, ¡No es realmente necesario preocuparnos por esto como desarrolladores de software! Ese es el poder de la abstracción.</p><p>Si la CPU es el centro lógico del cerebro, es útil tener una memoria para guardar la información temporalmente o a largo plazo.</p><p>Las computadoras tienen <strong><strong>Random Access Memory (RAM</strong>) </strong>como "memoria de trabajo" (o memoria de corto plazo) para guardar información que se usa de forma activa por programas abiertos.</p><p>La RAM se compone de una colección de <strong>direcciones de memoria</strong>, que se pueden utilizar para almacenar bits de datos. En lenguajes más antiguos como C, los programadores tienen acceso para trabajar directamente con direcciones de memoria usando una característica llamada <strong>punteros</strong>, pero esto es raro en lenguajes más modernos.</p><p>Finalmente, hablaremos de un componente con el que seguramente está familiarizado: el disco duro. En nuestra analogía del cerebro, esto representa la memoria a largo plazo. Un disco duro es un dispositivo interno o externo que almacena datos que deberían persistir incluso después de apagar la computadora.</p><p>Antes de pasar a más detalles sobre los lenguajes de programación, dediquemos un segundo a hablar sobre los datos. Pero, ¿qué queremos decir exactamente con la palabra datos?</p><p>En un nivel alto, pensamos en cosas como documentos de texto, imágenes, videos, correos electrónicos, archivos y carpetas. Todas estas son estructuras de datos de alto nivel que creamos y guardamos en nuestras computadoras todos los días.</p><p>Pero debajo de la cubierta, un chip de computadora (como un chip de CPU o RAM) no tiene idea de qué es una "imágen" o un "video".</p><p>Desde la perspectiva de un chip, todas estas estructuras se almacenan como largas secuencias de unos y ceros. Estos unos y ceros se llaman <strong>bits.</strong></p><p>Los bits se almacenan comúnmente en un conjunto de ocho a la vez, conocido como<strong> byte</strong>. Un byte es simplemente una secuencia de ocho bits, como <code>00000001</code>, <code>01100110</code>, o <code>00001111</code>. Representar la información de esta manera se llama <strong>representación binaria</strong>.</p><!--kg-card-begin: html--><h2 id="#aprende-como-trabajan-lenguajes-programacion">2)Aprende cómo funcionan los Lenguajes de Programación</h2><!--kg-card-end: html--><p>En la sección anterior, mencionamos que la mayoría de las computadoras dependen de una CPU, y una CPU puede comprender un conjunto específico de instrucciones en forma de unos y ceros.</p><p>Por lo tanto, teóricamente podríamos escribir código que le diga a la CPU qué hacer al unir largas secuencias de unos y ceros en una forma que la CPU entienda. Las instrucciones escritas en forma binaria como esta se llaman <strong>código de máquina</strong>.</p><p>Suena horrible trabajar con él, ¿no? Bueno, probablemente lo sea, pero no lo sabría ya que principalmente uso lenguajes de programación de alto nivel como JavaScript, Python y Java.</p><p>Un <strong>lenguaje de programación de alto nivel</strong> proporciona un conjunto de palabras clave, declaraciones, y reglas de sintaxis legibles por humanos que son mucho más simples para que las personas aprendan, depuren y trabajen.</p><p>Los lenguajes de programación proporcionan un medio para cerrar la brecha entre la forma en que nuestros cerebros humanos entienden el mundo y la forma en que los cerebros de las computadoras (CPU) entienden el mundo.</p><p>En última instancia, el código que escribimos debe traducirse a las instrucciones binarias (código de máquina) que comprende la CPU.</p><p>Según el lenguaje que elijas, decimos que su código se<strong> compila</strong> o se <strong>interpreta</strong> en un código de máquina capaz de ser ejecutado por su CPU. La mayoría de los lenguajes de programación incluyen un programa llamado <strong>compilador </strong>o <strong>intérprete </strong>que realiza este paso de traducción.</p><p>Solo para dar algunos ejemplos: JavaScript y Python son lenguajes interpretados, mientras que Java es un lenguaje compilado. El hecho de que un lenguaje sea compilado o interpretado (o alguna combinación de ambos) tiene implicaciones para la conveniencia del desarrollador, el manejo de errores, el rendimiento y otras áreas, pero no entraremos en esos detalles aquí.</p><!--kg-card-begin: html--><h2 id="#como-funciona-internet">3)Comprende cómo funciona el Internet</h2><!--kg-card-end: html--><p>Cualquiera que sea el tipo de programación que te gustaría hacer, te encontrarás con situaciones en las que será útil saber cómo interactúan las computadoras entre sí. Esto suele ocurrir a través de Internet.</p><p>Internet no es más que una colección global de computadoras conectadas. En otras palabras, es una red global. Cada computadora en la red acuerda un conjunto de reglas que les permiten comunicarse entre sí. Para una computadora, "hablar" significa transferir datos.</p><p>Como discutimos en la sección anterior, todos los tipos de datos (páginas web, imágenes, videos, correos electrónicos, etc.) se pueden representar como unos y ceros.</p><p>Por lo tanto, podemos pensar en el Internet como un conjunto muy grande de computadoras que pueden transferir unos y ceros entre sí, de una manera que preserva el significado de esos datos. Internet no es más que un medio de conversación digital.</p><p>Si Internet es solo un gran escenario de conversación, definamos a los participantes de la conversación.</p><p>Primero, una analogía: la mayoría de las conversaciones humanas requieren al menos dos participantes. En la mayoría de los casos, una persona inicia la conversación y la otra responde, asumiendo que ambos están presentes y disponibles.</p><p>En la jerga de Internet, la computadora que inicia la conversación se llama <strong>cliente.</strong> La computadora que responde o contesta se llama<strong> servidor.</strong></p><p>Por ejemplo, supongamos que abres un navegador web y accede a "www.google.com". En este escenario, tu navegador web es el cliente. Por extensión, también puedes pensar en la computadora en la que está trabajando como el cliente.</p><p>En un sentido más abstracto, TÚ eres el cliente porque es quien inicia la conversación. Al escribir "www.google.com" en la barra de búsqueda y hacer clic en &lt;ENTER&gt;, tu navegador solicita iniciar una conversación con una de las computadoras de Google.</p><p>La computadora de Google se llama el servidor. Responde enviando los datos necesarios para mostrar la página web de Google en tu navegador. ¡Y voilá! La página web de Google aparece frente a sus ojos. Todas las transferencias de datos por Internet utilizan este tipo de relación cliente/servidor.</p><!--kg-card-begin: html--><h2 id="#practica-basica-linea-de-comandos">4) Practica  básica de la Línea de Comandos</h2><!--kg-card-end: html--><p>La <strong>Línea de Comandos </strong>puede resultar intimidante a primera vista. A menudo aparece en las películas como una pantalla negra críptica con texto, números y símbolos incomprensibles que se desplazan. Por lo general, se asocia con un pirata informático malvado o un compañero genio de la tecnología.</p><p>La verdad es que no hace falta ser un genio para usar o entender la línea de comandos. De hecho, nos permite realizar muchas de las mismas tareas con las que nos sentimos cómodos mediante un ratón de apuntar y hacer clic.</p><p>La principal diferencia es que acepta principalmente entradas a través del teclado, lo que puede acelerar las entradas significativamente una vez que lo domines.</p><p>Puedes utilizar la línea de comandos para navegar por las carpetas, enumerar el contenido de una carpeta, crear nuevas carpetas, copiar y mover archivos, eliminar archivos, ejecutar programas y mucho más. La ventana en la que puedes escribir comandos en la línea de comandos se llama <strong>terminal</strong>.</p><p>Veamos un breve tutorial de comandos básicos de navegación que te dará una idea de cómo trabajar en la línea de comandos.</p><p>Una vez que abres tu terminal, una primera pregunta típica es "¿Dónde estoy?". Para averiguarlo podemos usar el comando &nbsp;<code>pwd</code> &nbsp;(que significa, "print working directory" o en español sería "Imprimir directorio de trabajo"). Muestra nuestra ubicación actual en el sistema de archivos que nos dice en qué carpeta nos encontramos actualmente.</p><p>Ahora te recomiendo intentarlo tú:</p><h3 id="como-usar-la-terminal-de-l-nea-de-comandos"><strong>Como usar la Terminal de Línea de Comandos</strong></h3><p>Si estás en una Mac, abre la aplicación de la Terminal, que es esencialmente una terminal de línea de comandos de Unix.</p><p>Si está ejecutando un sistema operativo sin una GUI (interfaz gráfica de usuario), como Linux o Unix, debería estar en la línea de comandos de forma predeterminada cuando inicie la computadora. Si su sabor de Linux o Unix tiene una GUI, deberá abrir la terminal manualmente.</p><p>En el prompt, escribe <code>pwd</code> y presiona &lt;ENTER&gt;. La línea de comandos imprimirá la ruta a la carpeta en la que se encuentra actualmente.</p><p>De forma predeterminada, la carpeta activa al abrir la línea de comandos es el directorio de inicio del usuario que ha iniciado sesión. Esto se puede personalizar en caso de que desees la comodidad de comenzar en una ubicación diferente.</p><p>Para mayor comodidad, se puede hacer referencia al directorio de inicio utilizando el carácter de tilde ~. Usaremos esto en algunos ejemplos en el futuro.</p><p>Ahora que sabemos en cuál carpeta estamos, podemos usar el comando &nbsp;<code>ls</code> &nbsp;para enlistar el contenido del directorio actual. El comando <code>ls</code> viene de la palabra "List".</p><p>Escribe <code>ls</code> y presiona&lt;ENTER&gt;. Los contenidos (archivos y sub carpetas) que residen en el directorio actual se imprimen en la pantalla. </p><p>Vuelve a ejecutar los comandos anteriores así <code>ls -al</code> y presiona enter &lt;ENTER&gt;. Ahora obtendremos más detalles sobre el contenido del directorio, incluidos los tamaños de los archivos, las fechas de modificación y los permisos de los archivos.</p><p>El guion en el comando anterior nos permite establecer ciertos etiquetas que modifican el comportamiento del comando. En este caso, agregamos el indicador -a que enumerará todos los contenidos del directorio (incluidos los archivos ocultos), así como el indicador -l que muestra los detalles adicionales del archivo.</p><p>A continuación, podemos crear una nueva carpeta con el comando <code>mkdir</code>, que significa "Crear directorio". A continuación creamos una nueva carpeta llamada "testdir". </p><p>Escribe <code>mkdir testdir</code> y presiona&lt;ENTER&gt;. Después escribe <code>ls</code> &nbsp;y presiona &lt;ENTER&gt;. Deberías ver tu nuevo directorio en la lista.</p><p>Para crear varios directorios anidados a la vez, utiliza la etiqueta <code>-p</code> f para crear una cadena completa de directorios &nbsp;así: <code>mkdir -p directory1/directory2/directory3</code></p><p>La línea de comandos no es tan útil si solo podemos permanecer en una ubicación, así que aprendamos cómo navegar a través de diferentes directorios en el sistema de archivos. Podemos hacer esto mediante el comando cd, que significa "Cambiar directorio". </p><p>Primero, escribe &nbsp;<code>cd testdir</code> y presiona &lt;ENTER&gt;. &nbsp;Después escribe &nbsp;<code>pwd</code> y presiona &lt;ENTER&gt;. Ten en cuenta que el resultado ahora muestra que estamos dentro del directorio "testdir" especificado en el comando cd. ¡Lo buscamos!</p><p>Escribe <code>cd ..</code> y presiona &lt;ENTER&gt;. Los dos puntos <code>..</code> le indica a la Línea de Comandos para navegar hacia atrás al directorio principal.</p><p>Después escribe <code>pwd</code> &nbsp;y presiona &lt;ENTER&gt;. &nbsp;Nota como el resultado ahora muestra que está de vuelta en el directorio original. ¡Navegamos atrás!</p><p>A continuación, aprenderemos como crear un nuevo archivo vacío en el directorio actual.</p><p>Escribe <code>touch newfile1.txt</code> y presiona&lt;ENTER&gt;. Puedes usar el comando <code>ls</code> para ver que el nuevo archivo se creó en el directorio actual.</p><p>Ahora copiaremos ese archivo de una carpeta a otra usando el comando cp.</p><p>Escribe <code>cp newfile1.txt testdir</code> y presiona &lt;ENTER&gt;. Ahora usa los comandos <code>ls</code> y &nbsp;<code>ls testdir</code> para ver que el nuevo archivo aún existe en el directorio actual y se copió en el directorio "testdir".</p><p>También podemos mover archivos en lugar de copiarlos usando el comando <code>mv</code> .</p><p>Escribe <code>touch newfile2.txt</code> y presiona&lt;ENTER&gt; para crear un nuevo archivo.<br>A continuación, escribe <code>mv newfile2.txt testdir</code> y presiona &lt;ENTER&gt; para mover el archivo a la carpeta "testdir" .</p><p>Usa los comandos <code>ls</code> y <code>ls testdir</code> &nbsp;para confirmar que el archivo se ha movido a la carpeta "testdir" (ya no debería aparecer en la ubicación original en la que lo creó, ya que se movió, no se copió). </p><p>El comando <code>mv</code> también lo puedes usar para renombrar archivos.</p><p>Para hacer eso, escribe <code>touch newfile3.txt</code> y presionar &lt;ENTER&gt; para crear un nuevo archivo. Después escribe &nbsp;<code>mv newfile3.txt cheese.txt</code> &nbsp;y presiona &lt;ENTER&gt; para actualizar el nombre del archivo. Usa el comando <code>ls</code> para confirmar que el archivo fue renombrado.</p><p>Finalmente, podemos eliminar archivos y carpetas usando el comando <code>rm</code> .</p><p>Escribe <code>rm cheese.txt</code> y presiona&lt;ENTER&gt; para remover el archivo. Usa el comando <code>ls</code> &nbsp;para confirmar que el archivo fue removido.</p><p>Escribe <code>rm -rf testdir</code> y presiona &lt;ENTER&gt; para remover el directorio "testdir" y sus contenidos. Usa <code>ls</code> &nbsp;para confirmar que el directorio fue removido.</p><p>Toma en cuenta que debemos usar las etiquetas &nbsp;<code>-rf</code> al eliminar directorios. Eso fuerza la eliminación de la carpeta y todo su contenido.</p><!--kg-card-begin: html--><h2 id="#habilidades-editor-texto-vim">5.Incrementa tus Habilidades en el Editor de Texto con Vim</h2><!--kg-card-end: html--><p>En este punto, hemos cubierto los conceptos básicos de la línea de comandos y hemos visto algunos ejemplos de cómo podemos trabajar con archivos sin un ratón.</p><p>Aunque ahora sabemos cómo crear, copiar, mover, renombrar y eliminar archivos desde la línea de comandos, no hemos visto cómo editamos el contenido de los archivos de texto en la terminal.</p><p>Trabajar con archivos de texto en la terminal es importante porque el código de computadora no es más que texto guardado en un conjunto organizado de archivos.</p><p>Seguro que podríamos usar un editor de texto elegante como Microsoft Word (o probablemente editores de código especializados como Sublime o Atom) para escribir y editar nuestro código, pero esto no es obligatorio. La terminal suele ser el lugar más conveniente para escribir y editar código, ya que normalmente &nbsp;lo tenemos abierto para ejecutar comandos.</p><p>Hay varios editores de texto excelentes creados específicamente para este propósito, y recomiendo<a href="https://www.freecodecamp.org/news/vimrc-configuration-guide-customize-your-vim-editor/"> aprender los conceptos básicos de uno llamado Vim</a>.</p><p>Vim es uno de los editores de texto más antiguos y es una joya probada en el tiempo. Vim viene de "<strong><strong><em><em>VI</em></em></strong></strong> i<strong><strong><em><em>M</em></em></strong></strong>proved" que significa &nbsp;"VI mejorado", ya que es el sucesor de una herramienta llamada<em><strong> Vi</strong></em>.</p><p>Como se mencionó anteriormente, Vim es un editor de texto que se creó para ejecutarse directamente en la terminal, por lo que no necesitamos abrir una ventana separada para trabajar o usar un ratón. Vim cuenta con un conjunto de comandos y modos que nos permiten crear y editar contenido de texto de manera conveniente usando solo el teclado.</p><p>Vim<a href="https://www.freecodecamp.org/news/how-not-to-be-afraid-of-vim-anymore-ec0b7264b0ae/"> tiene una pequeña curva de aprendizaje,</a> pero con un poco de práctica, las habilidades que aprendas te darán dividendos a lo largo de su carrera de tu carrera en programación.</p><p>Vim está instalado de forma predeterminada en muchos sistemas operativos. Para verificar si está instalado en tu computadora, abre la Línea de comandos y escribe &nbsp;<code>vim -v</code>.</p><p>Si Vim se abre en tu terminal y muestra la versión, ¡está listo! De lo contrario, deberás instalarlo en tu sistema. (Ten en cuenta que puedes salir de Vim escribiendo <code>:!q</code> y presionando ). Para obtener más información sobre la instalación de Vim, consulta <a href="https://vim.org">https://vim.org</a>.</p><p>En mi opinión, la forma más rápida y fácil de aprender a usar Vim es usar su tutorial integrado, el<strong> VimTutor</strong>. Para ejecutarlo, asegúrate de que Vim esté instalado en tu sistema, abre la Línea de Comandos, escribe <code>vimtutor</code> , y presiona &lt;ENTER&gt; .</p><p>Es un tutorial tan bueno que no hay motivo para que pierda el tiempo tratando de explicarlo aquí. Así que te recomiendo revisar el VimTutor, ¡ahora! Nos vemos en la siguiente sección.</p><p>Si aún tienes energía después de haber completado VimTutor, consulta estos 7 comandos de Vim que mejorarán drásticamente tu productividad a medida que comiences a usar Vim.</p><!--kg-card-begin: html--><h2 id="#aprende-html">6) Aprende algo de HTML</h2><!--kg-card-end: html--><p>Puedes pensar en HTML, abreviatura de HyperText Markup Language, como los huesos de una página web. Determina la estructura de la página especificando los elementos que deben mostrarse y el orden en que deben mostrarse.</p><p>Cada página web que has visitado alguna vez en tu navegador tiene algo de HTML asociado. Cuando visitas una página web, el servidor web que aloja la página web envía algo de HTML a tu navegador, y tu navegador luego lo lee y lo muestra para ti.</p><p>La mayoría de las páginas web contienen un conjunto de contenido bastante estandarizado, que incluye un título, contenido de texto, enlaces a imágenes, enlaces de navegación, encabezados y pies de página, y más. Toda esta información se almacena como HTML que define la estructura de la página.</p><p>Una cosa a tener en cuenta es que HTML no es técnicamente un lenguaje de programación, aunque a menudo se le conoce como "código HTML".</p><p>Como veremos más adelante, otros lenguajes de programación nos permiten escribir código que hace cosas, como ejecutar un conjunto de instrucciones en secuencia. HTML no hace nada. No ejecutamos ni ejecutamos HTML. HTML simplemente se encuentra allí en un archivo y espera a ser enviado a un navegador web que se lo mostrará al usuario final.</p><p>De hecho, HTML es básicamente solo datos. Son datos que definen cómo debe verse una página web, nada más.</p><p>Entonces, ¿cómo se escribe HTML? HTML utiliza un conjunto estándar de <strong>etiquetas</strong> (básicamente solo etiquetas) para identificar los elementos disponibles que componen una página web. Cada etiqueta se define mediante corchetes angulares.</p><p>Por ejemplo, la etiqueta de <strong><strong>tít</strong>u<strong>l</strong>o </strong>se define así <code>&lt;title&gt;Título de mi Página &lt;/title&gt;</code> y la etiqueta de &nbsp;<strong><strong>pár</strong>rafo<strong> </strong></strong>se define así <code>&lt;p&gt;Un montón de contenido de texto aleatorio.&lt;/p&gt;</code>.</p><p>Cada elemento HTML se compone de una etiqueta inicial y una etiqueta final. La etiqueta de inicio es solo la etiqueta de la etiqueta entre paréntesis angulares, como esta</p><p><code>&lt;tagname&gt;</code></p><p>Esto abre la nueva etiqueta HTML. La etiqueta final es esencialmente la misma, pero usa una barra diagonal después del primer paréntesis angular, para marcarlo como una etiqueta final:</p><p><code>&lt;/tagname&gt;</code></p><p>Cualquier texto entre las dos etiquetas es el contenido real que mostrará la página.</p><p>Veamos un par de las etiquetas más comunes en uso. La primera es la etiqueta <code>&lt;html&gt;</code> . &nbsp;Esto define el inicio de una página HTML. Una correspondiente etiqueta <code>&lt;/html&gt;</code> &nbsp;(ten en cuenta la barra inclinada) define el final de la página HTML. Cualquier contenido entre estas etiquetas será parte de la página.</p><p>La segunda es la etiqueta <code>&lt;head&gt;</code> . &nbsp;Esto define información adicional que el navegador utilizará para comprender la página. La mayor parte del contenido de esta etiqueta no se muestra al usuario. La etiqueta correspondiente &nbsp;<code>&lt;/head&gt;</code> tag define el final de la sección HEAD.</p><p>Previamente, vimos la etiqueta <code>&lt;title&gt;</code> . t define el título de la página web, que el navegador mostrará en la pestaña del navegador. Esta etiqueta debe colocarse dentro de la sección <code>&lt;head&gt;...&lt;/head&gt;</code> .</p><p>La etiqueta siguiente es <code>&lt;body&gt;</code>. &nbsp;Todo el contenido dentro de esta etiqueta constituye el contenido principal de la página web. Poner estas cuatro etiquetas juntas se parece a esto:</p><pre><code class="language-html">&lt;html&gt;
    
    &lt;head&gt;
        &lt;title&gt;Título de mi Página&lt;/title&gt;
    &lt;/head&gt;
        
    &lt;body&gt;
        &lt;p&gt;Un montón de contenido de texto aleatorio&lt;/p&gt;
    &lt;/body&gt;

&lt;/html&gt;</code></pre><p>El fragmento HTML simple anterior representa una página web simple con un título y un solo párrafo como contenido del cuerpo.</p><p>Este ejemplo trae a colación un punto que no mencionamos en la última sección. Las etiquetas HTML se pueden anidar unas dentro de otras. Esto solo significa que las etiquetas HTML se pueden colocar dentro de otras etiquetas HTML.</p><p>HTML proporciona muchas otras etiquetas para brindar un rico conjunto de contenido a los usuarios de la web. No los cubriremos en detalle aquí, pero a continuación hay una breve lista de referencia:</p><ul><li><code>&lt;p&gt;</code>: Un párrafo de texto que comienza en una nueva línea.A</li><li><code>&lt;h1&gt;</code>: Un encabezado de página generalmente utilizado para títulos de página.</li><li><code>&lt;h2&gt;</code>:Un encabezado de sección generalmente utilizado para títulos de sección.</li><li><code>&lt;hx&gt;</code>: Donde x es un número entre 3 y 6, para encabezados más pequeños.</li><li><code>&lt;img&gt;</code>: Una imagen.</li><li><code>&lt;a&gt;</code>: Un enlace.</li><li><code>&lt;form&gt;</code>: Un formulario que contiene campos o entradas para que un usuario complete y envíe.</li><li><code>&lt;input&gt;</code>: Un campo de entrada para que los usuarios ingresen información, generalmente dentro de un formulario.</li><li><code>&lt;div&gt;</code>: Una división de contenido, utilizada para agrupar varios otros elementos con fines de espaciado.</li><li><code>&lt;span&gt;</code>: Otro elemento de agrupación, pero que se usa para envolver frases de texto dentro de otro elemento, generalmente para aplicar un formato específico solo a una parte específica del contenido del texto.</li></ul><!--kg-card-begin: html--><h2 id="#abordar-css">7) Abordar algo de CSS</h2><!--kg-card-end: html--><p>Una página web sin CSS (<strong><strong>C</strong></strong>ascading <strong><strong>S</strong></strong>tyle <strong><strong>S</strong></strong>heets), u hojas de estilo en cascada, en español, es como un pastel sin glaseado. Un pastel sin glaseado cumple su propósito, ¡pero no parece apetitoso!</p><p>CSS nos permite asociar propiedades de estilo como color de fondo, tamaño de fuente, ancho, alto y más con nuestros elementos HTML.</p><p>Cada propiedad de estilo le dice al navegador que represente el efecto deseado en la pantalla. Al igual que HTML, CSS no es técnicamente un lenguaje de programación. No nos permite realizar acciones, simplemente nos permite agregar estilos al HTML básico.</p><p>Veamos cómo asociar estilos CSS con nuestros elementos HTML. Hay tres piezas en este rompecabezas:</p><p><strong>El<strong> </strong> Selector de <strong>CSS: </strong></strong>Se utiliza para identificar el elemento o elementos HTML a los que queremos que se aplique el estilo.</p><p><strong>el nombre de la propiedad de <strong>CSS: </strong></strong>El nombre de la propiedad de estilo específica que queremos agregar a los elementos HTML coincidentes.</p><p><strong>El nombre de la propiedad de<strong> CSS: </strong></strong>El valor de la propiedad de estilo que queremos aplicar.</p><p>Aquí hay un ejemplo de cómo estas piezas se unen para establecer el color y el tamaño de fuente de un párrafo:</p><pre><code class="language-css">p {
  color: red;
  font-size: 12px;
}</code></pre><p>Comencemos por el principio, antes de las llaves. Aquí es donde va el selector de CSS. En este caso, es la letra<strong> p</strong> la que indica la etiqueta de HTML &nbsp;<code>&lt;p&gt;</code> (párrafo) . Esto significa que los estilos dentro de las llaves se aplicarán a todas las etiquetas <code>&lt;p&gt;</code> en la página web.</p><p>Pasemos a lo que va dentro de las llaves: los estilos que queremos aplicar a los elementos de destino.</p><p>Aquí encontramos pares de propiedades y valores CSS, separados por dos puntos. La propiedad (en este caso "color" y "font-size") están en la izquierda. Los valores de estas propiedades (en este caso "red" "12px") están del lado derecho. Un punto y coma termina cada par propiedad/valor.</p><p>Probablemente puedas ver cómo funciona esto. Los fragmentos de código CSS anteriores le indican al navegador que use letras rojas de tamaño 12px para todo el texto colocado dentro de las etiquetas &nbsp;<code>&lt;p&gt;</code> .</p><p>Entonces, ¿cómo sabe una página HTML que debe incluir estos estilos CSS? Ingresa la etiqueta de HTML <code>&lt;link&gt;</code> . Por lo general, los estilos CSS se crean en archivos separados (archivos <strong>.css</strong>) del HTML. Esto significa que necesitamos alguna forma de importarlos a nuestros archivos HTML para que el navegador sepa que los estilos existen.</p><p>El elemento <code>&lt;link&gt;</code> existe con este propósito. Incluimos los elementos <code>&lt;link&gt;</code> en la sección <code>&lt;head&gt;</code> &nbsp;de los archivos que nos permiten especificar los archivos CSS externos para importar:</p><pre><code class="language-css">&lt;head&gt;

    &lt;title&gt;Título de mi Páginaga&lt;/title&gt;

    &lt;link rel="stylesheet" type="text/css" href="/home/style.css"&gt;

&lt;/head&gt;</code></pre><p>En este ejemplo, estamos importando los estilos CSS especificados por el atributo <strong>href</strong>, en este caso el archivo<em> /home/style.css.</em></p><p>¡En las próximas 3 secciones, (finalmente) nos sumergiremos en algunos lenguajes de programación más técnicos!</p><p>Repasaremos una descripción general de JavaScript, Python y Java, así como algunos de los conceptos de codificación esenciales comunes a los 3 lenguajes. Compararemos y contrastaremos las características del lenguaje y el código de ejemplo para que pueda obtener una comprensión completa de los conceptos básicos de los tres.</p><!--kg-card-begin: html--><h2 id="#empezar-programar-con-javascript">8) Empezar a Programar con JavaScript</h2><!--kg-card-end: html--><p>Comencemos respondiendo la siguiente pregunta: si podemos usar HTML para construir la estructura de una página web y CSS para que se vea bonita, ¿por qué necesitamos JavaScript?</p><p>La respuesta es que técnicamente no lo hacemos. Si estamos contentos con un sitio estático que se sienta allí y se ve bonito, estamos listos para usar solo HTML y CSS.</p><p>La palabra clave aquí es "estático". Sin embargo, si queremos agregar funciones dinámicas a nuestras páginas web, como cambiar el contenido e interacciones de usuario más complejas, necesitamos usar JavaScript.</p><h3 id="-qu-es-javascript"><strong>¿Qué es JavaScript?</strong></h3><p>Entonces, ¿qué es exactamente JavaScript? JavaScript es un lenguaje de programación creado específicamente para sitios web e Internet. Como mencionamos en la sección 2, la mayoría de los lenguajes de programación se compilan o interpretan, y los programas generalmente se ejecutan de manera independiente.</p><p>JavaScript es algo único a este respecto, ya que fue diseñado para ejecutarse directamente dentro de los navegadores web. Nos permite escribir código que representa conjuntos de acciones que se ejecutarán en nuestras páginas web para hacer que nuestros sitios sean mucho más dinámicos.</p><p>Puedes escribir código JavaScript en archivos de texto nombrados con una extensión <code>.js</code> o dentro de la etiqueta <code>&lt;script&gt;</code> directamente en el HTML.</p><p>Durante muchos años, el código JavaScript estuvo principalmente relegado a ejecutarse dentro de los navegadores web. Pero el proyecto <strong><strong>Node.js</strong></strong> cambió este paradigma al crear un entorno de JavaScript independiente que podía ejecutarse en cualquier lugar.</p><p>En lugar de quedar atrapado en un navegador (es decir, del lado del cliente), <strong>Node.js s</strong>e puede instalar localmente en cualquier computadora para permitir el desarrollo y la ejecución de código JavaScript. También puedes instalar Node en servidores web, lo que permite usar JavaScript como código de back-end para aplicaciones en lugar de simplemente como código de front-end del navegador web.</p><p>Ahora que hemos cubierto algunos antecedentes, profundicemos en algunos conceptos básicos del lenguaje JavaScript.</p><h3 id="variables-y-asignaci-n-en-javascript"><strong>Variables y Asignación en JavaScript </strong></h3><p>Las variables posiblemente representan el concepto más fundamental en la programación. Una variable es simplemente un nombre o marcador de posición que se utiliza para hacer referencia a un valor particular.</p><p>La palabra <strong>variable</strong> implica que el valor almacenado puede cambiar a lo largo de la ejecución del programa.</p><p>Puedes usar variables para almacenar números, cadenas de caracteres de texto, listas y otras estructuras de datos de las que hablaremos más en un minuto.</p><p>Todos los lenguajes de programación usan variables, pero la sintaxis varía entre diferentes lenguajes.</p><p>Las variables son útiles ya que podemos hacer referencia a sus valores a lo largo de nuestro código. Esto nos permite verificar sus valores según sea necesario y realizar diferentes acciones dependiendo de cómo cambie el valor de la variable.</p><p>En JavaScript, declaramos variables usando la palabra reservada <code>let</code> , así: <code>let x;</code>.</p><p>Esto declara x como una variable que podemos usar en nuestro código. Ten en cuenta que agregamos un punto y coma al final de la línea. En JavaScript (y muchos otros lenguajes) se utilizan puntos y comas para especificar el final de cada instrucción de código.</p><p>Ahora que hemos creado la variable x, podemos asignarle un valor usando el signo igual, también llamado el <strong>operador de asignación</strong>: <code>x = 10;</code></p><p>Aquí asignamos el número 10 a la variable llamada <em>x</em>. Ahora, cada vez que usemos <em>x</em> en nuestro código, se sustituirá el valor 10..</p><p>Tanto la declaración como la asignación de variables se pueden hacer en una línea de la siguiente manera:</p><pre><code class="language-javascript">let x = 10;</code></pre><h3 id="tipos-de-datos-en-javascript"><strong>Tipos de Datos en JavaScript </strong></h3><p>En la última sección, almacenamos un valor entero (número entero) en la variable llamada x. También puede almacenar números decimales, o <strong>números de punto flotante </strong>como son conocidos. Por ejemplo, podríamos escribir: <code>let x = 6.6;</code>.</p><p>Los diferentes tipos de valores que podemos almacenar en las variables se denominan <strong>tipos de datos.</strong> Hasta ahora solo hemos visto tipos de datos numéricos (enteros y números de punto flotante), pero solo estamos arañando la superficie. También podemos almacenar datos de texto en variables..</p><p>En la terminología de programación, un fragmento de texto se denomina <strong>cadena </strong>o <strong>string</strong>. Podemos almacenar un valor de cadena en nuestra variable<em> x</em> rodeándolo con comillas simples o dobles:s:</p><pre><code class="language-javascript">let x = 'Hola!';

let y = "Hola Amigo!";</code></pre><p>El siguiente tipo de datos que discutiremos es el <strong>booleano. </strong>Un booleano solo puede contener uno de dos valores, <code>true</code> or <code>false</code> – y deben estar todos en minúsculas. En JavaScript, verdadero y falso son dos palabras clave que se usan específicamente como valores para variables booleanas:</p><pre><code class="language-javascript">let x = true;

let y = false;</code></pre><p>Nota que estos valores &nbsp;<code>true</code> y <code>false</code> no aparecen entre comillas como lo hacen las cadenas. Si los encerramos entre comillas, los valores serían cadenas, no booleanos.<br>A menudo usamos booleanos para controlar el flujo de programas en sentencias condicionales (if/else) sobre las que aprenderemos a continuación.</p><h3 id="declaraciones-de-control-de-flujo-de-programa-en-javascript"><strong>Declaraciones de Control de flujo de programa en JavaScript</strong></h3><p>Ahora que comprendemos las variables y los tipos de datos básicos de JavaScript, echemos un vistazo a algunas cosas que podemos hacer con ellas..</p><p>Las variables no son tan útiles sin poder decirle a nuestro código que haga algo con ellas. Podemos hacer que nuestras variables hagan cosas usando <strong>declaracione<strong>s</strong></strong>.</p><p>Las declaraciones son palabras clave especiales que nos permiten realizar alguna acción en nuestro código, a menudo en función del valor de una variable que hemos definido. Las declaraciones nos permiten definir el flujo lógico de nuestros programas, así como realizar muchas acciones útiles que dictarán cómo funcionan nuestros programas.</p><h4 id="declaraciones-if-else"><strong>Declaraciones If / Else</strong></h4><p>La primera declaración que discutiremos es la declaración if. La declaración if nos permite realizar alguna acción solo cuando una condición deseada es verdadera. Así es como funciona:</p><pre><code class="language-javascript">let x = 10;

if ( x &gt; 5 ) {
    console.log('X es MAYOR que 5!');
} else {
    console.log('X NO es MAYOR que 5!');
}</code></pre><p>Definimos una variable llamada <em>x</em> y fijamos su valor en 10. Luego viene nuestra sentencia <code>if</code> . &nbsp;Después de la palabra reservada <code>if</code>, tenemos un conjunto de paréntesis que contiene la condición a evaluar, en este caso, <code>x &gt; 5</code>. Acabamos de definir x igual a 10, por lo que sabemos que esta condición es verdadera en este ejemplo.</p><p>Dado que la condición entre paréntesis es verdadera, el código entre las llaves se ejecutará y veremos la cadena "¡X es MAYOR que 5!" impreso en la pantalla. (No hemos discutido el significado de <code>console.log()</code>, así que por ahora imprime el valor entre paréntesis en la pantalla).</p><p>En el mismo ejemplo, también incluimos una declaración <code>else</code> . Esto nos permite ejecutar código específico en caso de que la condición sea <code>false</code>.</p><h4 id="bucles-while"><strong>Bucles While </strong></h4><p>El siguiente tipo de declaración que discutiremos es el &nbsp;<strong>ciclo <strong>while</strong></strong>. &nbsp;Los bucles nos permiten repetir un bloque de código tantas veces como queramos, sin tener que copiar y pegar el código una y otra vez.</p><p>Por ejemplo, supongamos que necesitamos imprimir una oración en la pantalla 5 veces. Podríamos hacerlo así:</p><pre><code class="language-javascript">console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');
console.log('Este mensaje es muy importante!');</code></pre><p>Esto funciona bien para solo 5 mensajes, pero ¿qué pasa con 100 o 1000? Necesitamos una mejor manera de repetir fragmentos de código varias veces, y los bucles nos permiten hacer esto. En la terminología de codificación, la repetición de un fragmento de código varias veces se denomina <strong><strong>itera</strong>c<strong>ión.</strong></strong></p><p>Este siguiente bucle <code>while</code> &nbsp;continuará ejecutando el bloque de código dentro de él mientras la condición especificada permanezca &nbsp;<code>true</code> &nbsp;:</p><pre><code class="language-javascript">let x = 1;

while ( x &lt;= 100 ) {
    
    console.log('Este es un mensaje muy importante!');
    
    x = x + 1;
    
}
</code></pre><p>En este ejemplo, we initialize <em><em>x</em></em> to the value of 1. Luego escribimos un bucle <code>while</code>. Similar a a una declaración <code>if</code> , agregue una condición entre paréntesis. En este caso la condición es <code>x &lt;= 100</code>. Esta condición será <code>true</code> siempre que <em>x</em> sea menor o igual a <em>100</em>.</p><p>A continuación especificamos el bloque de código a ejecutar entre llaves. Primero, imprimimos nuestro mensaje a la consola. Luego incrementamos x en 1.</p><p>En este punto, el búcle intenta volver a evaluar la condición para ver si todavía está <code>true</code>. La variable<em> x</em> ahora tiene un valor de <em>2 </em>ya que se incrementó en la primera ejecución del ciclo. La condición sigue siendo <code>true</code> ya que 2 es menor que 100.</p><p>El código en el bucle se repite hasta que x se incrementa al valor de 101. En este punto,<em> x</em> es mayor que 100, por lo que la condición ahora es <code>false</code>, y el código en el bucle deja de ejecutarse.</p><h3 id="la-etiqueta-script-de-html"><strong>La etiqueta &nbsp; &lt;script&gt; de &nbsp;HTML</strong></h3><p>Ahora que hemos introducido JavaScript, analicemos cómo agregar archivos de código JavaScript en una página HTML. Podemos hacer esto usando una etiqueta HTML que aún no hemos discutido: la etiqueta <code>&lt;script&gt;</code> .</p><p>Esto es similar al elemento <code>&lt;link&gt;</code> elemento que usamos para agregar archivos CSS a nuestro HTML, excepto que el elemento<code>&lt;script&gt;</code> específico para &nbsp;JavaScript.</p><p>Digamos que guardamos uno de los ejemplos anteriores de JavaScript que discutimos en un archivo llamado <code>customscript.js</code> en la misma carpeta que nuestro archivo HTML. Podemos agregar este archivo JavaScript a nuestro HTML agregando la siguiente etiqueta HTML en dentro de la sección &nbsp;<code>&lt;head&gt;...&lt;/head&gt;</code> de nuestro HTML:</p><pre><code class="language-html">&lt;script type="text/javascript" src="customscript.js"&gt;&lt;/script&gt;</code></pre><p>Esto cargará el código JavaScript del archivo, que se ejecutará cuando la página web se muestre en el navegador.</p><p>Una vez que sientas más confianza con con tus habilidades de JavaScript, puedes intentar construir algunos de estos divertidos proyectos para principiantes para practicar.</p><!--kg-card-begin: html--><h2 id="#continua-programando-con-python">9)Continua Programando con Python</h2><!--kg-card-end: html--><p>Ahora que has aprendido algo de JavaScript básico, será útil saltar a otro lenguaje de programación: Python</p><p>Muchos lenguajes de programación proporcionan un conjunto similar de funciones, incluidas variables, operadores aritméticos, declaraciones if/else, bucles y funciones.</p><p>Es útil ver cómo diferentes lenguajes de programación implementan funciones similares. Los conceptos suelen ser muy similares, pero la sintaxis (la forma en que se escribe el código) varía de un idioma a otro.</p><h3 id="qu-es-python"><strong>Qué es Python?</strong></h3><p>Primero cubriremos un poco de información básica sobre Python. Al igual que JavaScript, Python es un lenguaje de programación de alto nivel que prioriza la facilidad de desarrollo sobre la velocidad de ejecución.</p><p>En mi opinión, Python es uno de los mejores lenguajes para principiantes. La sintaxis es limpia e intuitiva y es un lenguaje muy popular en las esferas empresarial y de código abierto.</p><p>Anteriormente hablamos de lenguajes compilados versus lenguajes interpretados. Python es un lenguaje interpretado. Cada vez que queremos ejecutar un programa en Python, el <strong>interpretador de</strong> <strong><strong>Python &nbsp;</strong></strong>procesa activamente su código y lo ejecuta línea por línea en su máquina.</p><p>Esto es diferente a los lenguajes compilados, en los que primero usaríamos un compilador para procesar el código en una forma más optimizada (un ejecutable) y luego lo ejecutaríamos más tarde.</p><p>A diferencia de JavaScript, Python no se creó para ejecutarse directamente dentro de los navegadores web. Python fue creado para ser un <strong>lenguaje de secuencias de comandos </strong>conveniente, un lenguaje que se puede usar para escribir código para tareas arbitrarias que generalmente se ejecutan en la computadora local de un usuario.</p><p>El código de Python se puede ejecutar en cualquier computadora que tenga instalado el intérprete de Python. Todavía es un lenguaje de secuencias de comandos de uso común, pero también se usa ampliamente para la ciencia de datos y las aplicaciones del lado del servidor.</p><h3 id="variables-y-asignaci-n-en-python"><strong>Variables y Asignación en Python</strong></h3><p>Like JavaScript, Python allows us to define variables. In Python we can simply use the equals sign to create and assign variables as needed:</p><pre><code class="language-python">x = 10
y = "cheese"</code></pre><p>Hay dos diferencias entre la sintaxis para definir variables en Python y JavaScript. En Python, no necesitamos la palabra reservada <code>let</code> y tampoco necesitamos un punto y coma al final de cada línea.</p><p>Python usa un conjunto de reglas de sintaxis basadas en espacios en blanco y sangría. Esto elimina la necesidad de caracteres de terminación de línea, como el punto y coma, y el alcance del bloque mediante llaves.</p><h3 id="tipos-de-datos-en-python"><strong>Tipos de Datos en Python</strong></h3><p>Python también tiene un conjunto de tipos de datos que podemos asignar a nuestras variables. Estos incluyen números enteros, números de punto flotante (decimales), cadenas, listas y diccionarios.</p><p>Los números enteros, los números de punto flotante y las cadenas son esencialmente iguales a sus contrapartes de JavaScript, por lo que no repetiremos esa información aquí.</p><p>En Python, los booleanos son muy similares a los de JavaScript, excepto que las palabras clave True y False deben estar en mayúsculas:</p><pre><code class="language-python">x = True

y = False</code></pre><h3 id="declaraciones-de-flujo-de-control"><strong>Declaraciones de Flujo de Control</strong></h3><p>Al igual que en JavaScript, Python tiene un conjunto similar de declaraciones de control de flujo, pero con una sintaxis ligeramente diferente.</p><h4 id="declaraciones-if-else-1"><strong>Declaraciones if / Else</strong></h4><p>Este es el equivalente en Python del ejemplo if/else que vimos en la sección de JavaScript:</p><pre><code class="language-python">x = 10

if ( x &gt; 5 ):
    print('X es MAYOR que 5!')
    
else:
    print('X NO es MAYOR que 5!')</code></pre><p>Definimos una variable llamada <em>x </em>y establecimos su valor en 10, seguido de nuestra declaración <code>if</code> t. Dado que la condición entre paréntesis se evalúa cómo <code>True</code>, &nbsp;se ejecutará el código indentado después de la declaración <code>if</code> , &nbsp;y veremos la cadena de texto &nbsp;'X es MAYOR que 5!' impreso en la pantalla.</p><p>En Python, usamos la función &nbsp;<code>print()</code> &nbsp;para imprimir información en la pantalla.</p><p>También ten en cuenta que la declaración &nbsp;<code>else</code> &nbsp;de arriba, que imprimirá una cadena alternativa a la pantalla si <em>x </em>si la condición es <code>False</code>.</p><p>Hay dos diferencias principales entre el código Python anterior y el código JavaScript que vimos anteriormente. Python usa dos puntos en lugar de llaves para indicar el comienzo del bloque de declaración de <code>if</code> .</p><p><em>Además, la indentación de la función <code>print()</code> es muy importante en Python . En JavaScript, la indentación &nbsp;o el espacio en blanco entre las declaraciones no</em> importa, ya que JavaScript identifica bloques de código usando llaves e identifica el final de una declaración usando un punto y coma. ¡Pero en este ejemplo de Python, no hay punto y coma ni llaves!</p><p>Esto se debe a qué Python en realidad usa el espacio en blanco y los caracteres de nueva línea para identificar el final de las declaraciones y los bloques de código.</p><p>Los dos puntos le dicen al intérprete de Python que el bloque &nbsp;<code>if</code> está empezando. El código que conforma el bloque <code>if</code> debe estar indentado (1 tab = 4 espacios es la convención) para que el intérprete de Python sepa que es parte del bloque <code>if</code> . La siguiente línea sin indentación señalará el final del bloque &nbsp;<code>if</code>.</p><p><strong>Ciclos While </strong></p><p>A continuación, analizaremos los bucles en Python. El ciclo &nbsp;<code>while</code> en Python es esencialmente el mismo que vimos en JavaScript, pero con la sintaxis de Python:</p><pre><code class="language-python">x = 1

while ( x &lt;= 100 ):
    print('Este es un mensaje muy importante!')
    x = x + 1

print('Esto no está en el ciclo!')</code></pre><p>Las diferencias entre este ciclo <code>while</code> y la versión de JavaScript son las siguientes:</p><ul><li>Eliminamos &nbsp;<code>let</code> al definir nuestras variables. </li><li>Eliminamos los puntos y comas al final de línea.</li><li>Reemplazamos las llaves con dos puntos.</li><li>Nos aseguramos de que el código en el ciclo esté indentado con una tabulación.</li></ul><p>Imprimimos un mensaje adicional fuera del ciclo para mostrar que las líneas de código sin indentación no son parte del ciclo y no se repetirán.</p><p>Para Pythonistas principiantes, recomiendo echar un vistazo a <a href="https://initialcommit.com/blog/zen-of-python">Zen of Python</a>, que es una lista de 20 reglas generales para escribir código Pythonic.</p><p>Y cuando sientas más familiaridad con los conceptos básicos, intenta crear algunos de estos divertidos proyectos de Python para principiantes.</p><p></p><!--kg-card-begin: html--><h2 id="#conocimiento-java">10)Amplia tu conocimiento con Java</h2><h2><!--kg-card-end: html--><p>Ahora que hemos trabajado con un par de lenguajes de programación de alto nivel, demos un paso más abajo con Java.</p><p>A diferencia de JavaScript y Python, que ejecutan el código fuente en tiempo real mediante un intérprete, Java es un lenguaje compilado. Esto significa que se usa un compilador (en lugar de un intérprete) para convertir el código fuente de Java en una forma que la computadora pueda entender.</p><p>La mayoría de los compiladores generan uno o más archivos ejecutables compuestos por código de máquina que están listos para ejecutarse en el sistema operativo y la plataforma de hardware específicos para los que fueron compilados.</p><p>Pero Java es algo especial porque compila el código fuente de Java en una forma intermedia llamada <strong><strong>bytecode</strong></strong>. Esto es diferente al código de máquina que producen la mayoría de los otros lenguajes compilados. El código de bytes de Java está destinado a ser ejecutado por algo llamado &nbsp;<strong><strong>Java Virtual Machine (JVM)</strong></strong>.</p><p>You can think of the JVM as a program that you install on your computer, which allows you to run Java programs by executing Java bytecode. </p><p>Puede pensar en la JVM como un programa que instala en su computadora, que le permite ejecutar programas Java ejecutando bytecode. Cuando las personas hablan de "<em>si Java está instalado o no en una computadora</em>", generalmente preguntan si la <strong>JVM </strong>está instalada o no en la computadora.</p><p>La JVM cumple una función similar a la de los intérpretes que discutimos en capítulos anteriores. Pero en lugar de tomar el código fuente (que se almacena en archivos .java) como entrada, toma el <u><em>código de bytes compilado.</em></u></p><p>El beneficio de esta configuración es que permite que el<u><em> código de bytes</em></u> compilado en sistemas operativos y plataformas particulares sea ejecutado por una JVM en cualquier otra plataforma.</p><p>Por ejemplo, imagine que tenemos un archivo de código Java que fue escrito y compilado <u><em>en código de bytes e</em></u>n una computadora que ejecuta el sistema operativo Windows. Est<u><em>e código de bytes</em></u> se puede ejecutar (es decir, el programa se puede ejecutar) mediante una JVM en cualquier plataforma, incluidos Windows, Mac OS, Linux, etc.</p><p>Este no es el caso con la mayoría de los ejecutables compilados en otros lenguajes de programación, que solo pueden ejecutarse en el entorno para el que fueron compilados.</p><p><strong> Variables y asignación en Java</strong></p><p>Una gran diferencia entre Java y los lenguajes que hemos visto hasta ahora (Python y JavaScript) es que Java es un lenguaje de <strong>tipo estático</strong>.</p><p>Esto significa que los tipos de datos de nuestras variables deben conocerse y establecerse en el momento de compilar el programa.</p><p>Cada vez que creamos una variable en código Java, debemos especificar explícitamente el tipo de datos de esa variable, como un número entero, una cadena, etc. Esto se llama <strong>declaración</strong> de variables.</p><p>Una vez que declaramos el tipo de datos de una variable, solo puede contener ese tipo de datos durante la ejecución del programa.</p><p>Esto es muy diferente de JavaScript y Python, donde los tipos de datos variables se establecen durante la ejecución del programa, también conocido como <strong>tiempo de ejecución. </strong></p><p>Por lo tanto, los lenguajes como JavaScript y Python se conocen como lenguajes de <strong>tipado dinámico:</strong> no establecemos explícitamente los tipos de datos variables en nuestro código fuente y podemos reasignar fácilmente una variable a cualquier tipo sobre la marcha.</p><p>En Java, creamos variables usando esta sintaxis:</p><pre><code class="language-java">Datatype name = value;</code></pre><p>Aquí <code>Datatype</code> es el tipo de datos que almacenará la variable, como Integer, String, etc. Luego, <code>name</code> representa el nombre de la variable que estamos definiendo para que podamos usarla en nuestro código. Y <code>value</code> &nbsp;es el valor real que estamos asignando a la variable. Ten en cuenta que, al igual que JavaScript, todas las declaraciones de Java terminan en punto y coma.</p></h2><h3 id="tipos-de-datos-en-java"><strong>Tipos de Datos en Java</strong></h3><p>En Java, los tipos de datos integrados básicos se denominan tipos de datos <strong>primitivos</strong> y se verán muy familiares según lo que hemos visto en lenguajes de nivel superior como Python y JavaScript. Los principales tipos primitivos son:</p><ul><li>Integer <code>int</code>: Almacena números enteros entre −2,147,483,648 y 2,147,483,647.</li><li>Float <code>float</code>: Almacena números enteros entre 3.4x10^−038 a 3.4x10^038.</li><li>Boolean <code>bool</code>: Almacena números enteros entre <code>true</code> o &nbsp;<code>false</code>.</li></ul><p>Ten en cuenta que hay algunos otros tipos primitivos (corto, largo, byte y doble) que no cubriremos aquí, ya que no se usan con tanta frecuencia como los demás. Así es como inicializamos estos tipos de datos:</p><p>Integer: <code>int x = 100;</code></p><p>Float: <code>float pi = 3.14;</code></p><p>Char: <code>char middleInitial = 'T';</code></p><p>Boolean: <code>bool isHuman = true;</code></p><p>Quiero reiterar que una vez que se declara el tipo de datos de una variable, esa variable solo puede contener valores del tipo de datos especificado.</p><p>Por ejemplo, se generaría un error si nuestro programa intentara almacenar un valor de carácter dentro de una variable que se declaró como un número entero. No podemos asignar el carácter 'S' a la variable entera x en el ejemplo anterior.</p><p>El siguiente tipo de datos que analizaremos es la cadena: una secuencia de caracteres, números o símbolos representados como datos textuales.</p><p>Las cadenas en Java son un tipo de datos no primitivo, lo que significa que se construyen a partir de partes más pequeñas. Para declarar una variable de cadena usamos el tipo de datos Cadena y colocamos el valor asignado entre comillas dobles:</p><pre><code class="language-java">String name = "Harry Potter";</code></pre><h3 id="declaraciones-de-control-de-flujo-de-programa-en-java"><strong>Declaraciones de control de flujo de programa en</strong> Java</h3><p>Al igual que JavaScript, Java usa llaves para definir bloques de código <code>if</code> para declaraciones, bucles y funciones. Examinaremos las mismas declaraciones de control de programa que en los capítulos anteriores y actualizaremos los ejemplos para usar la sintaxis de Java.</p><h4 id="declaraciones-if-else-2"><strong>Declaraciones If / Else </strong></h4><p>Aquí está la instrucción if/else de Java que refleja los ejemplos de las secciones anteriores:</p><pre><code class="language-java">int x = 10;

if ( x &gt; 5 ) {
    System.out.println("X es MAYOR que 5!");
} else {
    System.out.println("X NO es MAYOR 5!");
}</code></pre><p>Este ejemplo básico de declaración &nbsp;<code>if</code> &nbsp; es casi idéntico a la versión de JavaScript. &nbsp;Las únicas diferencias son que declaramos que el tipo de datos de x es int y usamos <code>System.out.println()</code> &nbsp;en lugar de <code>console.log()</code> &nbsp;para imprimir nuestro mensaje.</p><p>A continuación, pasaremos a los bucles en Java. Dado que la sintaxis de Java y JavaScript son bastante similares, el ciclo &nbsp;<code>while</code> en Java es esencialmente el mismo que vimos en JavaScript:</p><pre><code class="language-java">int x = 1;

while ( x &lt;= 100 ) {

    System.out.println("Este mensaje es muy importante!");
    
    x = x + 1;
    
}</code></pre><p>Este ciclo <code>while</code> imprimirá el mensaje 100 veces.</p><p>Esto concluye nuestras secciones sobre lenguajes de programación específicos. Puede haber sido un poco repetitivo ya que cubrimos el mismo conjunto de conceptos en 3 idiomas, pero esperamos que esto haya ayudado a consolidar estas ideas básicas pero fundamentales.</p><p>Ahora completaremos este artículo con algunos temas intermedios que, de otro modo, no podría comenzar a aprender de inmediato.</p><p>Hablaremos de una herramienta de colaboración esencial llamada Git. Luego aprenderemos a almacenar y acceder a datos en una base de datos. A continuación, abordaremos brevemente los marcos de trabajo de desarrollo web y, por último, arrojaremos algo de luz sobre los administradores de paquetes.</p><!--kg-card-begin: html--><h2 id="#rastrea-codigo-con-git">11) Rastrea tu Código usando Git</h2><!--kg-card-end: html--><p>Git es el sistema de control de versiones (VCS) más popular en uso hoy en día. Permite que varios desarrolladores colaboren juntos en el software. En esta sección, aprenderemos qué es Git, como funciona y como usar sus comandos básicos.</p><p>Antes de saltar directamente a Git, desarrollemos algunos conceptos comunes a la mayoría de los proyectos de programación.</p><p>El conjunto completo de directorios y archivos que componen un proyecto de software se denomina <strong><strong>codebase</strong></strong>. El <strong><strong>project root </strong></strong>es la carpeta de más alto nivel en el árbol de directorios del proyecto. Los archivos de código se pueden incluir directamente en la raíz del proyecto o se pueden organizar en varios niveles de carpetas.</p><p>Cuando el código base esté listo para la prueba o la implementación, se puede <strong>compilar</strong> en el programa que se ejecutará en su computadora. El <strong>proceso de compilación</strong> puede incluir uno o más pasos que convierten el código escrito por humanos en un ejecutable que se puede ejecutar en los chips de procesamiento de su computadora. </p><p>Una vez que se crea el código, el programa está listo para ejecutarse en tú sistema operativo específico, como Linux, Mac OS o Windows.</p><p>Con el tiempo, los desarrolladores actualizan el código del proyecto para agregar nuevas funciones, corregir errores, implementar actualizaciones de seguridad y más. En general, hay tres formas en que los desarrolladores pueden realizar estos cambios en un proyecto de software:</p><ol><li>Agregar nuevos archivos y carpetas al proyecto</li><li>Edite el código en archivos y carpetas existentes</li><li>Eliminar archivos y carpetas existentes</li></ol><p>A medida que crecen los proyectos y se agregan nuevas características, aumenta la cantidad de archivos y carpetas (así como la cantidad de código dentro de ellos). Los proyectos grandes pueden crecer hasta cientos de miles de archivos que contienen millones de líneas de código.</p><p>Para respaldar este crecimiento, la cantidad de desarrolladores en equipos de proyectos grandes generalmente aumenta. Los grandes proyectos de software pueden tener cientos o incluso miles de desarrolladores trabajando en conjunto.</p><p>Esto plantea la pregunta:<em> "¿Cómo es posible que todos estos desarrolladores, que pueden estar dispersos geográficamente por todo el mundo realizan un seguimiento del código de su proyecto de software de tal manera que puedan trabajar juntos en un solo proyecto?"</em></p><p>Los equipos de desarrollo necesitan una forma de realizar un seguimiento exacto de los cambios que se realizaron en el código, qué archivos o carpetas se vieron afectados y quién realizó cada cambio. Cada desarrollador también debe poder obtener actualizaciones de todos los demás desarrolladores.</p><p>Este proceso se denomina<strong> </strong><u><em><strong>versionado</strong> o</em></u> <strong>control de versiones.</strong> Los desarrolladores usan herramientas especiales llamadas <strong>Sistemas de control de versiones (VCS)</strong> para rastrear, administrar y compartir las versiones de los proyectos de software. Aquí hay algunos sistemas de control de versiones populares que se utilizan activamente en estos días:</p><ul><li>Git</li><li>Subversion (SVN)</li><li>Mercurial (Hg)</li></ul><p>Sin embargo, Git ha ganado la corona como el VCS de referencia del día. Es, con diferencia, el VCS más popular que utilizan las comunidades gubernamentales, comerciales y de código abierto de todo el mundo.</p><p>Git forma el núcleo de las populares plataformas VCS basadas en la web como GitHub y Bitbucket. Git es una herramienta esencial para cualquier desarrollador completo para agregar a su conjunto de habilidades.</p><h3 id="comandos-b-sicos-de-git"><strong> Comandos básicos de Git</strong></h3><p>Git crea y almacena información sobre nuestros proyectos de software en algo llamado <strong>repositorio de Git.</strong> Un repositorio de Git es solo una carpeta oculta en su computadora que Git usa para almacenar datos sobre los archivos de código en un proyecto de software.</p><p>Cada proyecto de software en el que trabajamos normalmente tiene su propio repositorio Git para almacenar información relacionada con ese proyecto. De esta manera, el código relacionado con diferentes proyectos en una sola computadora se puede rastrear por separado.</p><p>Hay dos formas principales de crear un repositorio Git en su computadora. El primero es crear un repositorio Git completamente nuevo en una carpeta existente en su sistema de archivos.</p><p>Para hacer esto, simplemente abra la línea de comando, cree una nueva carpeta en algún lugar conveniente como en su escritorio y navegue hasta ella:</p><pre><code class="language-sh">cd ~/Desktop

mkdir testgit
 
cd testgit/</code></pre><p>Ahora que creamos una nueva carpeta y navegamos en ella, podemos inicializar un nuevo repositorio de Git usando el comando:</p><pre><code class="language-sh">git init</code></pre><p>Deberías ver un resultado similar al siguiente:</p><pre><code class="language-sh">Initialized empty Git repository in /Users/me/Desktop/testgit/.git/</code></pre><p>Todos los comandos de Git que ejecutaremos comienzan con la palabra <code>git</code> seguida de un espacio y luego el comando específico de Git que nos gustaría ejecutar. A veces también agregaremos banderas y argumentos después de los comandos de Git.</p><p>El comando <code>git init</code> crea un folder escondido que se llama <code>.git</code> ien el directorio actual. &nbsp;Esta carpeta es el repositorio de Git que mencionamos anteriormente. Puedes ver esto ejecutando el comando &nbsp;<code>ls -al</code>.</p><p>La segunda forma de obtener un repositorio de Git en su computadora es descargar uno de otro lugar, como Bitbucket o GitHub.</p><p>Bitbucket y Github son sitios web que permiten a las personas alojar proyectos de código abierto que se pueden descargar a su computadora.</p><p>Si buscas un proyecto que te parezca interesante en Bitbucket o GitHub, verás un botón llamado Clone. Este botón te proporcionará un comando y una URL que puedes copiar y pegar en la terminal de línea de comandos. Se verá algo como esto:</p><pre><code class="language-sh">git clone https://jacobstopak@bitbucket.org/jacobstopak/baby-git.git</code></pre><p>El comando <code>git clone</code> &nbsp;descarga el repositorio desde la URL especificada a una nueva carpeta en tu computadora. La URL puede ser una URL web como en el ejemplo anterior o una URL SSH de la siguiente manera:</p><pre><code class="language-sh">git clone git@bitbucket.org:jacobstopak/baby-git.git</code></pre><p>Después de ejecutar el comando git clone, deberías ver una nueva carpeta creada. Si navegas en el, verás todos los archivos y subcarpetas que componen el proyecto que descargaste.</p><p>El siguiente comando que mencionaremos es <code>git add &lt;filename.ext&gt;</code>. El comando <code>git add</code> se usa para decirle a Git qué archivos queremos que rastree y para agregar cambios en los archivos ya rastreados a Git. <code>staging area</code>.</p><p>Una vez que los archivos nuevos o modificados se han preparado, se pueden confirmar en el repositorio mediante el comando <code>git commit -m "Commit message"</code>. Esto almacenará los cambios en todos los archivos preparados en el repositorio de Git.</p><p>Los comandos <code>git status</code> &nbsp;y <code>git log</code> son útiles para revisar el estado actual del directorio de trabajo y el historial de confirmación de su proyecto.</p><p>Apenas arañamos la superficie aquí. <a href="https://initialcommit.com/blog/Git-Cheat-Sheet-Beginner">Git tiene muchos más comandos </a>esenciales con los que definitivamente vale la pena familiarizarse.</p><!--kg-card-begin: html--><h2 id="#guardar-datos-base-de-datos">12) Almacenar datos usando Bases de Datos y SQL </h2><!--kg-card-end: html--><p>Una base de datos es un programa diseñado específicamente para almacenar, actualizar, recuperar y eliminar de manera eficiente grandes cantidades de datos. En pocas palabras, podemos pensar en una base de datos como un contenedor para un conjunto de tablas.</p><p>Probablemente hayas trabajado con tablas en Microsoft Excel. Una tabla es solo un conjunto de columnas y filas que contienen datos. Podemos configurar tablas en una base de datos para almacenar la información que nuestros programas necesitan para funcionar correctamente.</p><p>Ya sea que estemos escribiendo programas en JavaScript, Python, Java o algún otro lenguaje, podemos decirles a nuestros programas que interactúen con las bases de datos según sea necesario.</p><p>Podemos recuperar datos de la base de datos para mostrarlos a nuestros usuarios en una página web. Podemos aceptar un formulario de registro web de un usuario y almacenar la información de ese usuario en una base de datos para su uso posterior.</p><p>Nuestros programas pueden interactuar con bases de datos en tiempo real a medida que ocurren eventos en nuestra aplicación. Para ello, la mayoría de las bases de datos hablan un lenguaje llamado <strong>SQL,</strong> abreviatura de <strong>Structured Query Language.</strong></p><p>SQL es un lenguaje de programación creado específicamente para bases de datos. Nos permite decirle a las bases de datos qué hacer.</p><p>Un fragmento de código SQL se denomina <strong>query</strong>. Podemos escribir consultas SQL para obtener los datos que necesitamos en un momento determinado o para insertar nuevos datos en una tabla específica. En términos generales, hay dos tipos principales de consultas SQL: r<strong>ead-SQL </strong>y <strong>write-SQL.</strong></p><p>Una consulta de lectura SQL es aquella que simplemente obtiene datos de la base de datos para que los veamos o los usemos. No cambia los datos en la base de datos en absoluto.</p><p>Por otro lado, una consulta de escritura SQL inserta datos nuevos en una tabla, actualiza datos existentes o elimina datos existentes. Aprenderemos cómo escribir algunas consultas básicas de lectura SQL en esta sección.</p><p>Antes de escribir una consulta, ¡es útil saber qué estamos consultando! Las bases de datos tradicionales contienen<strong> tablas</strong> formadas por columnas y filas. Cuando escribimos una consulta de lectura SQL, nuestro objetivo suele ser recuperar un subconjunto de esas filas y columnas.</p><p>Por ejemplo, digamos que tenemos una tabla llamada <code>PERSON</code> con 4 columnas, <code>FIRST_NAME</code> y <code>LAST_NAME</code>. Podemos usar la siguiente consulta para seleccionar todos los datos de la columna <code>FIRST_NAME</code> :</p><pre><code class="language-sql">SELECT FIRST_NAME FROM PERSON;</code></pre><p>La palabra clave SELECT le dice a la base de datos que queremos recuperar datos. Le sigue el nombre de la columna, FIRST_NAME, que queremos obtener.</p><p>Luego usamos la palabra clave FROM para decirle a la base de datos de qué tabla queremos obtener los datos, en este caso, la tabla PERSONA. Además, tenga en cuenta que todos los comandos SQL terminan con un punto y coma.</p><p>Uno de los requisitos más comunes que tenemos con los datos es filtrarlos. Filtrar significa restringir el conjunto de resultados en función de una condición específica.</p><p>Por ejemplo, es posible que solo queramos seleccionar filas de la tabla &nbsp;<code>PERSON</code> para personas que se llamen "PHIL". Podemos aplicar filtros en consultas SQL usando la palabra clave <code>WHERE</code> &nbsp;:</p><pre><code class="language-sql">SELECT * FROM PERSON WHERE FIRST_NAME = 'PHIL';</code></pre><p>Esta consulta devolvería todas las columnas en la tabla <code>PERSON</code>&nbsp; ya que usamos un asterisco en &nbsp;<code>*</code> &nbsp;en la cláusula &nbsp;<code>SELECT</code> en lugar de enumerar nombres de columna específicos. &nbsp;Solo se recuperarán las filas de la tabla &nbsp; <code>PERSON</code> &nbsp;en las que &nbsp;<code>FIRST_NAME</code> &nbsp;esté establecido en "PHIL".</p><p>Por último, hablaremos sobre la clasificación. Hay muchas ocasiones en las que nos gustaría ver los resultados de nuestra consulta ordenados en un orden particular. Podemos usar la cláusula &nbsp;<code>ORDER BY</code> para esto:</p><pre><code class="language-sql">SELECT *
FROM PERSON
ORDER BY LAST_NAME;</code></pre><p>Esto devolverá todas las columnas de la tabla &nbsp;<code>PERSON</code> ordenadas alfabéticamente por apellido.</p><p>Esto devolverá todas las columnas de la tabla ordenadas alfabéticamente por apellido.</p><p>De forma predeterminada, los resultados se ordenarán en orden ascendente, de la A a la Z. Podemos agregar la palabra clave opcional ASC o DESC, para especificar si ordenar en orden ascendente o descendente:</p><pre><code class="language-sql">SELECT *
FROM PERSON
ORDER BY LAST_NAME DESC;</code></pre><!--kg-card-begin: html--><h2 id="##leer-sobre-frameworks-mvc">13) Leer sobre Frameworks y MVC </h2><!--kg-card-end: html--><p>A menudo, nos encontraremos escribiendo código para tipos de aplicaciones muy comunes. Las aplicaciones web (o <strong>web apps</strong>) son aplicaciones que dependen de Internet para funcionar. Las aplicaciones web son algunos de los tipos de aplicaciones de software creados con mayor frecuencia.</p><p>Una aplicación web es esencialmente una versión más funcional y robusta de un sitio web. La mayoría de las aplicaciones web implementan algún código de backend que reside en un servidor web y ejecuta la lógica en segundo plano para respaldar la funcionalidad de la aplicación.</p><p>Los lenguajes de programación comunes que se usan para el código de backend de una aplicación web incluyen Python, Java y JavaScript, entre otros.</p><p>Algunas funcionalidades comunes a la mayoría de las aplicaciones web incluyen:</p><ul><li>Proporcionar una forma conveniente de modificar dinámicamente el contenido de las páginas web</li><li>Realización de una autenticación de usuario segura a través de una página de inicio de sesión</li><li>Proporcionar características de seguridad de aplicaciones robustas</li><li>Lectura y escritura de datos en una base de datos.</li></ul><p>Un framework es un conjunto de bibliotecas de código que contienen las funcionalidades comunes que todas las aplicaciones web usan de manera inmediata. Los frameworks web brindan un sistema para que los desarrolladores construyan sus aplicaciones sin tener que preocuparse por escribir el código para muchas de las tareas detrás de escena comunes a todas las aplicaciones web.</p><p>Solo necesitamos utilizar las partes del marco que satisfagan las necesidades de nuestra aplicación web.</p><p>Por ejemplo, si no necesitamos conectarnos a una base de datos en una aplicación web en particular, podemos ignorar las funciones de la base de datos y usar las otras funciones que necesitamos.</p><p>Todavía tenemos la capacidad total de personalizar las páginas web que componen nuestra aplicación, el flujo de usuarios y la lógica comercial. Puede pensar en un framework como un conjunto de herramientas de programación que podemos usar para crear aplicaciones web.</p><p>Cada lenguaje de programación que cubrimos en este artículo tiene uno o más frameworks populares actualmente en uso. Esto es excelente porque brinda a los equipos de desarrollo la flexibilidad de usar el marco del lenguaje en el que son más competentes.</p><p>Java tiene <strong><strong>Spring Framework</strong></strong> que se hace especialmente conveniente a través de <strong><strong>Spring Boot</strong></strong>. Python tiene <strong><strong>Django Framework</strong></strong>. JavaScript tiene <strong><strong>Node.js</strong> <strong> </strong>un </strong>entorno de tiempo de ejecución con las múltiples opciones de frameworks que incluyen <strong><strong>Express.js </strong></strong>y <strong><strong>Meteor.js</strong></strong>. Estos frameworks son todos gratuitos y de código abierto (open source).</p><!--kg-card-begin: html--><h2 id="#administradores-de-paquetes">14) Jugando con Administrador de Paquetes </h2><!--kg-card-end: html--><p>El tema final que cubriremos en esta guía es el <strong>administrador de paquetes.</strong> Según el contexto, un <strong>paquete</strong> puede representar un programa independiente que está listo para instalar en una computadora o una biblioteca de código externa que queremos aprovechar en uno de nuestros proyectos de software.</p><p>Dado que nuestras aplicaciones a menudo dependen de estas bibliotecas de códigos externas, también nos referimos a ellas como <strong>dependencias.</strong></p><p>Un administrador de paquetes es un programa que nos ayuda a mantener las dependencias de un sistema o proyecto de software. Por "mantener" nos referimos a instalar, actualizar, enumerar y desinstalar las dependencias según sea necesario.</p><p>Dependiendo del contexto, los administradores de paquetes que discutiremos pueden usarse para mantener los programas que hemos instalado en nuestros sistemas operativos o para mantener las dependencias de un proyecto de software.</p><p><strong>Mac OS X: Homebrew</strong></p><p><strong><strong>Homebrew</strong></strong> es el administrador de paquetes más popular para el sistema operativo Mac OS X. Ofrece una forma conveniente de instalar, actualizar, rastrear, enumerar y desinstalar paquetes y aplicaciones en su Mac.</p><p>Muchas aplicaciones que se pueden instalar a través de archivos .dmg descargados también se pueden descargar e instalar usando Homebrew.</p><p>Aquí hay un ejemplo de instalación del paquete <code>wget</code> &nbsp;via Homebrew:</p><pre><code class="language-sh">brew install wget</code></pre><h3 id="linux-apt-y-yum"><strong>Linux: Apt y Yum</strong></h3><p>Dado que Linux se creó en torno a la línea de comandos, no sorprende que los administradores de paquetes sean la forma predeterminada de instalar programas.</p><p>La mayoría de las versiones principales de Linux vienen con un administrador de paquetes integrado.<strong> Advanced Package Tool (APT) </strong>es el administrador de paquetes nativo para las distribuciones de Linux basadas en Debian y Ubuntu. <strong>Yellowdog Updater, Modified (YUM) </strong>es el administrador de paquetes nativo para la distribución RedHat Linux.</p><p>Aquí hay un ejemplo de instalación de Vim usando APT:</p><pre><code class="language-sh">sudo apt-get install vim</code></pre><p>Y usando Yum:</p><pre><code class="language-sh">sudo yum install vim</code></pre><h3 id="javascript-node-package-manager-npm-"><strong>JavaScript: Node Package Manager (NPM)</strong></h3><p>Ahora que hemos visto cómo funcionan algunos administradores de paquetes a nivel del sistema operativo, echemos un vistazo a algunos administradores de paquetes específicos del lenguaje de programación. Estos pueden ayudarnos a administrar las bibliotecas de software de las que dependen muchos de nuestros proyectos de codificación. <strong>Node Package Manager (NPM) </strong>se instala de forma predeterminada con Node.js.</p><p>Una diferencia entre NPM y los administradores de paquetes anteriores que hemos visto es que NPM se puede ejecutar en modo <strong>local </strong>o <strong>global</strong>. El modo local se usa para instalar un paquete solo dentro de un proyecto/directorio en particular en el que estamos trabajando, mientras que el modo global se usa para instalar el paquete en el sistema.</p><p>De manera predeterminada, los paquetes se instalan localmente, pero puede usar el indicador -g para instalar un paquete globalmente:</p><pre><code class="language-sh">npm install request -g</code></pre><h3 id="python-pip"><strong>Python: Pip</strong></h3><p>Python también tiene un administrador de paquetes llamado <strong>Pip</strong>. Es posible que Pip ya esté instalado en su sistema, ya que viene preempaquetado con versiones recientes de Python. Pip nos permite instalar fácilmente paquetes desde <strong>Python Package Index </strong>usando el comando &nbsp; <code>pip install &lt;package-name&gt;</code>:</p><pre><code class="language-sh">pip install requests</code></pre><h3 id="java-apache-maven"><strong>Java: Apache Maven</strong></h3><p><strong>Apache Maven </strong>(generalmente denominado simplemente <strong>Maven</strong>) es un conjunto de herramientas gratuito y de código abierto que incluye administración de dependencias.</p><p>Maven se usa principalmente para proyectos Java, aunque también es compatible con otros lenguajes. El uso de Maven es un poco más complicado y puede hacer muchas cosas, por lo que no entraremos en detalles aquí.</p><h2 id="resumen">Resumen</h2><p>En este artículo, presenté un conjunto de conceptos y herramientas de codificación esenciales con la intención de presentar una vista panorámica del desarrollo de software que desearía haber tenido cuando comencé a aprender a programar.</p><p>Cubrí temas que incluyen Internet, varios lenguajes de programación, sistemas de control de versiones y bases de datos con el objetivo de describir cómo encajan estas piezas del rompecabezas.</p><h2 id="pr-ximos-pasos"><strong>Próximos Pasos</strong></h2><p>Si disfrutaste de este artículo, escribí un libro llamado <a href="https://initialcommit.com/store/coding-essentials-guidebook-for-developers">Coding Essentials Guide for Developers </a>(Guía Básica de Programación para Desarrolladores) que tiene 14 capítulos, cada uno de los cuales cubre uno de los temas discutidos en esta publicación.</p><p>En el libro profundizo aún más en estos 14 temas, por lo que podría ser un buen recurso para que podrías revisar si obtuviste valor de este artículo.</p><p>Después de leer esto, es posible que sientas atracción &nbsp;por un lenguaje, una herramienta o un concepto en particular. Si este es el caso, te animo a profundizar en esa área para avanzar en su aprendizaje.</p><p>Si tienes alguna pregunta, sugerencia o inquietud sobre este libro, me encantaría saber de tí en <a>jacob@initialcommit.io</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como construir tu propio portafolio web de desarrollador con HTML, CSS y JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ En estos días todos necesitan tener un sitio web y aplicaciones web. Así que si trabajas como desarrollador web hay muchas oportunidades para ti . Pero si quieres conseguir trabajo como desarrollador web, necesitarás un buen sitio web como portafolio para poder mostrar tus habilidades y experiencia. En este tutorial, ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-construir-tu-propio-portafolio-web-desarrollador/</link>
                <guid isPermaLink="false">61e33df617a453092f695722</guid>
                
                    <category>
                        <![CDATA[ Portafolio ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jorge Torres Torres ]]>
                </dc:creator>
                <pubDate>Wed, 14 Sep 2022 02:37:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/01/responsive-web-design.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-build-a-developer-portfolio-website/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Build Your Own Developer Portfolio Website with HTML, CSS, and JavaScript</a>
      </p><p>En estos días todos necesitan tener un sitio web y aplicaciones web. Así que si trabajas como desarrollador web hay muchas oportunidades para ti .</p><p>Pero si quieres conseguir trabajo como desarrollador web, necesitarás un buen sitio web como portafolio para poder mostrar tus habilidades y experiencia.</p><p>En este tutorial, discutiré algunas de las razones por los que debes construir tu propio portafolio web. Luego, te guiaré en el proceso de construcción de tu portafolio web responsivo con HTML, CSS y JavaScript.</p><h2 id="tabla-de-contenidos"><strong>Tabla de contenidos</strong></h2><ul><li>¿<a href="#portafolio-web-desarrollador">Qué es un portafolio sitio web de desarrollador?</a></li><li><a href="#porquetener-portafolio-web-desarrollador">¿Por qué deberías tener un Portafolio website?</a></li><li><a href="#como-construir-portafolio-enlinea-desarrollador">Proyecto de Portafolio – ¿Cómo construir tu propio Portafolio en línea de Desarrollador?</a></li><li><a href="#estructura-carpetas-proyecto">La estructura de carpetas del Proyecto</a></li><li><a href="#elcodigo-basico-html"> El Código Básico de HTML</a></li><li><a href="#seccion-barranavegacion"> La Sección de Barra de Navegación</a></li><li><a href="#estilos-barranavegacion">Como dar Estilos a la Barra de Navegación</a></li><li><a href="##construir-seccionhero">Como construir la sección de Hero</a></li><li><a href="#estilos-seccionhero">Como dar estilo a la Sección de Hero</a></li><li><a href="#construir-seccionSobreMi">Como construir la Sección de Más sobre mí</a></li><li><a href="#construir-seccionHabilidades">Como construir la Sección de Habilidades</a></li><li>C<a href="#estilos-seccionHabilidades">omo dar estilo a la Sección de Habilidades</a></li><li><a href="##construir-seccion-proyectos">Como construir la sección de Proyectos</a></li><li><a href="#estilos-seccion-proyectos">Como dar estilos a la Sección de Proyectos</a></li><li><a href="#construir-seccion-contacto">Como construir la Sección de Contacto</a></li><li><a href="https://www.freecodecamp.org/news/how-to-build-a-developer-portfolio-website/#howtostylethecontactsection">Como dar estilo a la sección de Contacto</a></li><li><a href="#estilos-iconos-redessociales">Como dar estilo a los iconos de Redes Sociales</a></li><li><a href="#boton-desplazar-haciaarriba">Como agregar el botón desplazarse Hacia Arriba</a></li><li><a href="#html-boton-desplazarse-haciaarriba">El HTML para el botón desplazarse Hacia Arriba </a></li><li><a href="#estilos-boton-desplazarse-haciaarriba">Como dar estilos al icono de Desplazarse hacia arriba</a></li><li><a href="#portafolio-webresponsivo">Como hacer que tu &nbsp;Portafolio web sea responsivo</a></li><li><a href="#consultademedios-tabletsymoviles">Como crear la Consulta de Medios para Tablets y teléfonos celulares (max-width 720px)</a></li><li><a href="#construir-menuhamburguesa">Como construir el Menú de Hamburguesa</a></li><li><a href="#javascript-menuhamburguesa">El JavaScript para el Menú de Hamburguesa</a></li><li><a href="#seccionhero-responsiva">Como hacer responsiva la Sección de Hero</a></li><li><a href="#secionsobremi-responsiva">Como hacer responsiva la Sección de Más sobre mí </a></li><li>C<a href="#seccionhabilidades-responsiva">omo hacer responsiva la sección de Habilidades</a></li><li>C<a href="#seccion-proyectosresponsiva">omo hacer responsiva la Sección de Proyectos </a></li><li><a href="#formulariocontacto-responsivo">Como hacer responsivo el formulario de Contacto</a></li><li><a href="#sitiowebresponsivo-telefonosmoviles">Como hacer responsivo el sitio web para teléfonos celulares pequeños</a></li><li><a href="#conclusion">Conclusión</a></li></ul><!--kg-card-begin: html--><h2 id="portafolio-web-desarrollador">¿Qué es un portafolio web de desarrollador? </h2><!--kg-card-end: html--><p>Un &nbsp;portafolio web de un desarrollador provee de información relevante sobre tus habilidades, experiencia y proyectos en los que hayas trabajado para empleadores potenciales.</p><p>Puedes considerar a tu &nbsp;portafolio web como tu currículum en línea.</p><!--kg-card-begin: html--><h2 id="porquetener-portafolio-web-desarrollador">¿Porqué deberías tener un Portafolio web de Desarrollador?</h2><!--kg-card-end: html--><h3 id="1-un-portafolio-web-incrementa-tu-presencia-en-l-nea"><strong>1. Un Portafolio web incrementa tu presencia en línea</strong></h3><p>Como desarrollador, necesitas tener presencia en línea. Puedes hacer crecer tu presencia en línea utilizando plataformas de redes sociales tales como Twitter, Facebook, e Instagram. Pero esas plataformas no son completamente tuyas, ya que los moderadores de esas plataformas tienen casi control total sobre tu cuenta. </p><p>En cambio, tu portafolio web, está montado en tu propio dominio en línea. &nbsp;Y la gente puede fácilmente encontrarte cuando hace una búsqueda de tu nombre en algún buscador como Google, &nbsp;siempre que pongas las cosas correctas y en su lugar haciendo uso &nbsp;de SEO (Search Engine Evaluation). </p><h3 id="2-un-portafolio-web-es-tu-curr-culum-en-l-nea"><strong>2. Un portafolio web es tu currículum en línea </strong></h3><p>Tu portafolio web es como tu currículum en línea. Clientes potenciales y Reclutadores de Recursos Humanos pueden encontrarte fácilmente en línea y revisar tus proyectos pasados y tus habilidades. </p><p>Esto también significa que cuando alguien te quiera dar una oportunidad para trabajar para ellos, y te pregunten por tus proyectos pasados, solamente les das el link a tu sitio web (tu portafolio). Que no solamente tiene tus proyectos, si no también tu conjunto de habilidades e información sobre tu experiencia pasada.</p><h3 id="3-un-portafolio-es-evidencia-de-tu-experiencia-en-tu-rea"><strong>3. Un portafolio es evidencia de tu experiencia en tu área </strong></h3><p>Tener (y mucho menos construir tu propio) portafolio web como envía un claro mensaje como desarrollador de que estás poniendo tus habilidades en práctica y que realmente sabes lo que estás haciendo. </p><p>Un portafolio puede también ayudarte a construir confianza con clientes porque tienen evidencia de la calidad de tu trabajo.</p><!--kg-card-begin: html--><h2 id="como-construir-portafolio-enlinea-desarrollador">Proyecto portafolio - Como construir tu propio portafolio en línea de desarrollador</h2><!--kg-card-end: html--><p>Puedes crear tu propio &nbsp;portafolio web con HTML, CSS y JavaScript, Y eso es lo que haremos aquí.</p><p>Ya hice esto hace algunos meses y lo puse a disposición de todos como un producto gratuito en Gumroad, así que decidí crear un tutorial sobre cómo lo hice. </p><p>Esta es la <a href="https://eager-williams-af0d00.netlify.app/?">demostración </a> de lo que construiremos.</p><p>Para seguir el proceso conmigo, puedes obtener los archivos de inicio de <a href="https://github.com/Ksound22/developer-portfolio/tree/starter">Github</a>.</p><!--kg-card-begin: html--><h2 id="estructura-carpetas-proyecto">La estructura de carpetas del proyecto</h2><!--kg-card-end: html--><p>Para evitar confusión, ordenaré el HTML, CSS, JavaScript, iconos e imágenes del proyecto en sus respectivas carpetas.</p><p>El archivo de HTML va en la carpeta root, y los archivos de imagen, icono, CSS, y JavaScript &nbsp;estarán separados en sus respectivas subcarpetas &nbsp;en una carpeta de assets. Esta es una práctica común.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss1.png" class="kg-image" alt="ss1" width="600" height="400" loading="lazy"></figure><p>También hay un archivo readme que contiene todas las herramientas que utilicé en el proyecto con sus respectivos enlaces. También está disponible en los archivos de inicio. </p><!--kg-card-begin: html--><h2 id="elcodigo-basico-html">El código básico de HTML</h2><!--kg-card-end: html--><p>Todos tienen sus preferencias al escribir código de un proyecto completo con HTML, CSS y JavaScript. A algunos les gusta definir todo el código HTML repetitivo primero y luego el CSS, pero a mí me gusta hacerlo todo sección por sección. </p><p>Entonces empezaré con la sección de la barra de navegación. Pero es bueno mostrar primero cómo se ve el código HTML básico: </p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;

    &lt;!--Estilos CSS --&gt;
    &lt;link rel="stylesheet" href="assets/css/styles.css" /&gt;

    &lt;!-- Favicons --&gt;
    &lt;link
      rel="apple-touch-icon"
      sizes="180x180"
      href="assets/icons/apple-touch-icon.png"
    /&gt;
    &lt;link
      rel="icon"
      type="image/png"
      sizes="32x32"
      href="assets/icons/favicon-32x32.png"
    /&gt;

    &lt;!-- Animaciones CSS CDN --&gt;
    &lt;link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"
    /&gt;
    &lt;title&gt;Jane Doe | Desarrolladora Web&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;!-- Barra de Navegación --&gt;

    &lt;!-- Sección Hero  --&gt;

    &lt;!-- Sobre Mí --&gt;

    &lt;!-- Sección Habilidades --&gt;

    &lt;!-- Sección Proyectos --&gt;

    &lt;!-- Sección Contacto--&gt;

    &lt;!-- Sección de redes sociales - Fijado a la derecha --&gt;

    &lt;!-- Vuelve al comienzo  --&gt;

    &lt;!-- Sección Footer  --&gt;

    &lt;!-- Website scripts --&gt;
    &lt;script src="assets/js/app.js"&gt;&lt;/script&gt;

    &lt;!-- Ion icons scripts --&gt;
    &lt;script
      type="module"
      src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"
    &gt;&lt;/script&gt;
    &lt;script
      nomodule
      src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"
    &gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Tengo todas las secciones comentadas en el HTML para que puedas seguirlas mejor. En la plantilla también hay Content Delivery Network (Red de Distribución de Contenido), también hay CDN para animaciones de CSS (Una Biblioteca de animación CSS), iconos de Ionic, &nbsp;la librería de iconos que elegí para este proyecto.</p><p>Tengo un favicon hecho a través de Favicon IO &nbsp;y lo vinculé en la sección head. Favicon es la pequeña imagen que se muestra en una pestaña del navegador.</p><!--kg-card-begin: html--><h2 id="seccion-barranavegacion">La Sección de la barra de navegación </h2><!--kg-card-end: html--><p>La barra de navegación contiene el logotipo simple del texto h1 y el menú de navegación:</p><pre><code class="language-html"> &lt;nav&gt;
      &lt;h1&gt;JANE DOE&lt;/h1&gt;
      &lt;ul class="navegacion"&gt;
        &lt;li&gt;&lt;a href="#sobremi" class="nav-link"&gt;Acerca de Mí&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#habilidaes" class="nav-link"&gt;Habilidades&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#proyectos" class="nav-link"&gt;Proyectos&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#contacto" class="nav-link"&gt;Contacto&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      &lt;button class="menu-hamburguesa" id="menu-hamburguesa"&gt;
        &lt;ion-icon class="barras" name="menu-outline"&gt;&lt;/ion-icon&gt;
      &lt;/button&gt;
&lt;/nav&gt;
</code></pre><p>Si te estás preguntando que representa el elemento botón, &nbsp;son las barras para alternar el menú &nbsp;de navegación en dispositivo móvil (menu de hamburguesa). Este estará escondido en nuestra versión de escritorio pero se mostrará en dispositivo móvil.</p><p>También vincularé las secciones individuales del sitio web a estos elementos de navegación, por lo tanto, cuando el usuario hace click en cualquiera de los elementos de navegación, se le lleva a la sección que corresponde al elemento de navegación en el que hace click. </p><p>Es por eso que tengo los atributos de referencia &nbsp;(<code>href</code>) establecidos en <code>#sobremi</code>, <code>#habilidades</code>, <code>#proyectos</code>, and <code>#contacto</code>, respectivamente. La sección individual del sitio web tendrá estos atributos como ids.</p><p>La barra de navegación ahora luce así:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss2.png" class="kg-image" alt="ss2" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="estilos-barranavegacion">Como dar estilos a la barra de navegación </h2><!--kg-card-end: html--><p>La barra de navegación necesita &nbsp;definitivamente &nbsp;algo de estilo para que se vea un poco mejor.</p><p>Antes de darle estilos a la barra de navegación, declararé algunas variables de CSS para facilitar las cosas más adelante. &nbsp;Esto se debe a que, con las variables CSS, es más fácil evitar la redundancia y la repetición en tu archivo de CSS. </p><p>La sintaxis para declarar variables de CSS luce así:</p><pre><code class="language-css">:root {
  --variable-name: value;
}
</code></pre><p>Para usar la variable, debes hacer esto: </p><pre><code class="language-css">selector {
  propiedad: var(--nombre-variable);
}
</code></pre><p>También importaré la fuente Roboto de Google, y declararé algunos resets de CSS para remover algunas funciones predeterminadas, como el margin y padding para elementos, <code>text-decoration</code> para etiquetas anchor y <code>list-style-type</code> para listas.</p><pre><code class="language-css">@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,900;1,700&amp;display=swap");

/* Variables */
:root {
  --font-family: "Roboto", sans-serf;
  --normal-font: 400;
  --bold-font: 700;
  --bolder-font: 900;
  --bg-color: #fcfcfc;
  --primary-color: #4756df;
  --secondary-color: #ff7235;
  --primary-shadow: #8b8eaf;
  --secondary-shadow: #a17a69;
  --bottom-margin: 0.5rem;
  --bottom-margin-2: 1rem;
  --line-height: 1.7rem;
  --transition: 0.3s;
}
/* Variables fin */

html {
  scroll-behavior: smooth;
}

/* CSS Resets */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

ul {
  list-style-type: none;
}

a {
  text-decoration: none;
  color: var(--primary-color);
}

a:hover {
  color: var(--secondary-color);
}

body {
  font-family: var(--font-family);
}
</code></pre><p>Si lo notas, configuré un hover state para todos los enlaces del sitio web desde la línea 39 a la 41. Cuando el usuario se desplaza sobre cualquier enlace, cambia al color secundario que establecí en las variables de CSS.</p><p>Aquí hay una buena regla general para declarar variables CSS: si te encuentras usando la misma propiedad y el mismo valor a menudo en el mismo archivo CSS, puedes declarar una variable de css para evitar repetición.</p><p>También debes hacer que los nombres de tus variables sean lo más descriptivos posible, como hice yo, para ayudar a otros que podrían trabajar con tu código.</p><p>Con los resets, hay algunos cambios en la barra de navegación del navegador: <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss3.png" class="kg-image" alt="ss3" width="600" height="400" loading="lazy"></figure><p>Para dar estilos a la barra de navegación y alinear su contenido, usaremos CSS Flexbox:</p><pre><code class="language-css">nav {
  position: sticky;
  top: 0;
  left: 0;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.5rem 3.5rem;
  background-color: var(--bg-color);
  box-shadow: 0 3px 5px rgba(0, 0, 0, 0.1);
}
</code></pre><p>¿<strong>Qué está haciendo el Código de CSS?</strong></p><p>Le di a la barra de navegación el valor de sticky en la propiedad de position para que permanezca en la parte superior sin importar qué.</p><p>La propiedad de &nbsp;<code>z-index</code> con el valor de 1 &nbsp;se asegura de que la barra de navegación se muestre sobre cualquier otro elemento de la página web. Así es como se hace sticky una barra de navegación.</p><p>Además, también apliqué una sombra en la parte inferior de la barra de navegación con la propiedad &nbsp; <code>box-shadow</code> .</p><p>La barra de navegación tiene un nuevo aspecto: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss4.png" class="kg-image" alt="ss4" width="600" height="400" loading="lazy"></figure><p>Pero aún no hemos terminado. Los elementos del menú de navegación debe estar uno al lado del otro, no uno encima del otro. También lo haremos con Flexbox. </p><p>También terminaré el resto del estilo de &nbsp;la barra de navegación haciendo que h1, los elementos de navegación y el botón de menú de hamburguesas se vean mejor. Haremos esto con algunas variables CSS declaradas inicialmente.</p><pre><code class="language-css">nav h1 {
  color: var(--color-primario);
}

nav a {
  color: var(--color-primario);
  transition: var(--transicion);
}
nav a:hover {
  color: var(--valor-secundario);
  border-bottom: 2px solid var(--valor-secundario);
}

nav ul {
  display: flex;
  gap: 1.9rem;
}

nav ul li {
  font-weight: var(--negrita);
}
</code></pre><p>El menú hamburguesa también necesita estar escondido. Tiene una clase de &nbsp;<code>.menu-hamburguesa</code>, podemos aplicarle un atributo de display con valor de none y así haremos que el botón luzca mejor.</p><pre><code class="language-css">.menu-hamburguesa {
  color: var(--primary-color);
  font-size: 2rem;
  border: 0;
  background-color: transparent;
  cursor: pointer;
  display: none;
}
</code></pre><p>Nuestra barra de navegación luce más se ve mucho mejor ahora:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss5.png" class="kg-image" alt="ss5" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccionhero">Como construir la sección Hero </h2><!--kg-card-end: html--><p>La siguiente sección en la que trabajaremos. Esto no requerirá tanto trabajo como la barra de navegación.</p><p>La plantilla de HTML para la sección principal se encuentra en el fragmento de código a continuación:</p><pre><code class="language-html">&lt;section class="hero" id="about"&gt;
      &lt;img
        src="assets/images/wfh_1.svg"
        alt="jane-doe"
        loading="lazy"
        class="hero-img"
      /&gt;
      &lt;div class="bio animate__animated animate__shakeX"&gt;
        &lt;h2 class="bio-titulo"&gt;Sobre Mí&lt;/h2&gt;
        &lt;p class="bio-texto"&gt;
          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia sed
          dolorem fugit sapiente porro veniam pariatur dolore nostrum delectus
          inventore tempore minus nemo, iste ullam illo laboriosam maiores
          repudiandae quos!
        &lt;/p&gt;
      &lt;/div&gt;
&lt;/section&gt;
</code></pre><p>La única cosa que es un poco extraña son las clases de &nbsp;<code>animate__animated animate__shakeX</code> aplicadas al div que contiene el texto de <code>Sobre Mí</code> . &nbsp;Los nombres de clase son de CSS animado y son útiles para dar animación al container de texto Sobre Mí.</p><p>Con esto, el sitio web tiene un nuevo aspecto:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss6.png" class="kg-image" alt="ss6" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="estilos-seccionhero">Como dar Estilo a la Sección Hero</h2><!--kg-card-end: html--><p>Flexbox vendrá al rescate una vez más! Esta sección tiene dos conjuntos principales de contenido – una imagen y un texto en un div. &nbsp;Podemos usar flexbox para mostrarlos uno al lado del otro. A continuación puedes ver como funciona en el fragmento de código de CSS :</p><pre><code class="language-css">.hero {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 2.5rem;
  max-width: 68.75rem;
  margin: auto;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss7.png" class="kg-image" alt="ss7" width="600" height="400" loading="lazy"></figure><p>Nuestra imagen de Jane Doe es muy grande, así que necesitamos reducir su anchura y altura. También necesitamos darle estilo al texto de bio (Sobre Mí texto) para legibilidad. Las variables de CSS que declaramos inicialmente serán muy útiles aquí.<br></p><pre><code class="language-css">.hero img {
  height: 37.5rem;
  width: 37.5rem;
}

.bio {
  width: 25rem;
  padding: 0.625rem;
  border-radius: 6px;
  box-shadow: 0px 2px 15px 2px var(--primary-shadow);
}

.bio h1 {
  margin-bottom: var(--bottom-margin);
}

.bio p {
  line-height: var(--line-height);
  padding: 0.3rem 0;
}
</code></pre><p>La sección hero ahora luce genial: <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss8.png" class="kg-image" alt="ss8" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccionSobreMi">Como construir la sección Más Sobre Mí </h2><!--kg-card-end: html--><p>Incluí esta sección para incluir más información sobre Jane Doe con un texto placeholder.</p><p>Puedes aprovechar esto para incluir información que no tuviste posibilidad de incluir en la sección Sobre Mí.</p><p>La Plantilla HTML para esta sección es sencilla y simple:</p><pre><code class="language-html">    &lt;section class="mas-sobre"&gt;
      &lt;h2&gt;Más sobre mí&lt;/h2&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis
        nesciunt excepturi quos obcaecati incidunt voluptatem ipsam sunt ipsum,
        autem deleniti cupiditate molestias quis unde quae totam porro dicta
        iure animi inventore, veniam hic! Omnis nulla, delectus a voluptatibus
      &lt;/p&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit amet consectetur, adipisicing elit. Consequuntur
        nostrum dolor minus, libero delectus praesentium perferendis
      &lt;/p&gt;
      &lt;p&gt;
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Vero,
        consequuntur labore? Ea totam voluptas amet!
      &lt;/p&gt;
    &lt;/section&gt;
</code></pre><p>El CSS también es sencillo. Todo lo que haremos es configurar un &nbsp;<code>background-color</code> con <code>--bg-color</code> &nbsp;como variable de CSS, hacer que la sección sea legible configurando el padding, el margin y la line-height, y alinear el texto h2 al centro:</p><pre><code class="language-css">.mas-sobre {
  background-color: var(--bg-color);
  padding: 1rem 6rem;
}

.mas-sobre h2 {
  margin-bottom: var(--bottom-margin);
  text-align: center;
}

.mas-sobre p {
  line-height: var(--line-height);
  padding: 0.4rem;
}
</code></pre><p>En el navegador, la sección Más Sobre More luce así:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss9.png" class="kg-image" alt="ss9" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccionHabilidades">Como construir la sección de Habilidades</h2><!--kg-card-end: html--><p>Desde la demostración en vivo, &nbsp;verás que la sección de habilidades contiene habilidades relevantes como &nbsp;HTML, CSS, JavaScript, etc. Pude conseguir los iconos de esos lenguajes en formato SVG en la página de Icons8 I.</p><p>La Plantilla de HTML para esta sección se encuentra en el fragmento de código a continuación:</p><pre><code class="language-html"> &lt;section class="habilidades" id="habilidades"&gt;
      &lt;h2 class="header-habilidadr"&gt;Mis mejores habilidades&lt;/h2&gt;

      &lt;div class="contenedor-habilidades"&gt;
        &lt;div class="first-set animate__animated animate__pulse"&gt;
          &lt;img
            src="assets/icons/icons8-html-5.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-css3.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-javascript.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
        &lt;/div&gt;

        &lt;div class="second-set animate__animated animate__pulse"&gt;
          &lt;img
            src="assets/icons/icons8-bootstrap.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-react-native.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
          &lt;img
            src="assets/icons/icons8-git.svg"
            alt=""
            loading="lazy"
            class="icon icon-card"
          /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
</code></pre><p>Hay seis iconos en total. Y en lugar de tener que alinearlos con Flexbox, los agruparemos en dos lugares (3 cada uno), &nbsp;con las clases de primer y segundo conjunto, para que se mantengan uno encima del otro. Esto significa que los estilos que aplicaremos serán más legibles. ¡Fácil!</p><p>Tengamos en cuenta que hemos adjuntado el atributo de carga a los íconos e imágenes individuales y configurándolo en lazy. Esto asegurará que las imágenes se carguen solo cuando el usuario se desplace a las secciones que las contienen. </p><!--kg-card-begin: html--><h2 id="estilos-seccionHabilidades">Como aplicar estilos a la sección de Habilidades</h2><!--kg-card-end: html--><p>Sin aplicar estilos, la sección de estilos luce así:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss10edited.jpg" class="kg-image" alt="ss10edited" width="600" height="400" loading="lazy"></figure><p>Debemos dar un poco de estilos a la sección por que aun no se ve lo suficientemente bien::</p><pre><code class="language-css">.habilidades {
  max-width: 68.75rem;
  margin: auto;
  text-align: center;
  margin-top: 2.5rem;
}

.encabezado-habilidad {
  margin-bottom: 1rem;
}

.contenedor-habilidad img {
  padding: 1.25rem;
}

.icono {
  width: 11.875rem;
  height: 11.25rem;
}
</code></pre><p>En el CSS de arriba, establecimos un ancho máximo para toda la sección para posicionar los elementos al centro del navegador para una mejor experiencia de usuario.</p><p>Otros estilos que aplicamos están relacionados a claridad y la legibilidad. Por ejemplo, Incrementamos el tamaño de los iconos para hacerlos más visibles con sus propiedades de alto y ancho. También aplicamos un padding de 1rem (16pixeles) a todos los iconos para dar un poco de espacio entre ellos . </p><p>La sección de habilidades ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss11.png" class="kg-image" alt="ss11" width="600" height="400" loading="lazy"></figure><p>Y aún así, creo que la sección puede lucir mejor, así que he decidido hacer algunos ajustes más con la propiedad box-shadow: </p><p>Recordemos que en el HTML hay un atributo de clase llamado &nbsp;<code>.tarjeta-icono</code> adjunto a todos los iconos. I will be using the class name to put all the icons in a card:</p><pre><code class="language-css">.tarjeta-icono {
  background-color: #fff;
  border-radius: 11px;
  box-shadow: 0 3px 10px var(--secondary-shadow);
  padding: 20px;
  margin: 10px;
}
</code></pre><p>La sección de habilidades ahora debe lucir mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss12.png" class="kg-image" alt="ss12" width="600" height="400" loading="lazy"></figure><p>¡Mira eso!</p><!--kg-card-begin: html--><h2 id="construir-seccion-proyectos">Como construir la sección de Proyectos</h2><!--kg-card-end: html--><p>Uno de los propósitos principales de un sitio web portafolio es mostrar tus proyectos. Por lo tanto, tendremos que crear una sección para mostrar los proyectos en los que has trabajado en el pasado. </p><p>Esta sección es probablemente la más tediosa en aplicar estilos, pero Flexbox (Modelo de Caja) no dejará de ser nuestro amigo.</p><p>La estructura de HTML para esta sección se encuentra en el fragmento de código más abajo:</p><pre><code class="language-html">&lt;section class="proyectos" id="proyectos"&gt;
      &lt;h2 class="titulo-de-proyectos"&gt;Algunos de mis proyectos recientes&lt;/h2&gt;
      &lt;div class="contenedor-de-proyectos"&gt;
        &lt;div class="contenedor-de-proyectos tarjeta-de-proyectos"&gt;
          &lt;img
            src="assets/images/expenseTracker.png"
            alt="rastreador-de-gastos"
            loading="lazy"
            class="project-pic"
          /&gt;
          &lt;h3 class="titulo-de-proyectos"&gt;Rastreador de Gastos&lt;/h3&gt;
          &lt;p class="detalle-de-proyectos"&gt;
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quas
            ratione vel inventore labore commodi modi quos culpa aut saepe!
            Alias!
          &lt;/p&gt;
          &lt;a href="#" target="_blank" class="enlace-de-proyecto"&gt;Check it Out&lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="contenedor-de-proyectos tarjeta-de-proyectos "&gt;
          &lt;img
            src="assets/images/netflixClone.png"
            alt="netflic-clone"
            loading="lazy"
            class="project-pic"
          /&gt;
          &lt;h3 class="titulo-proyecto"&gt;Netflix Clone&lt;/h3&gt;
          &lt;p class="detalles-proyecto"&gt;
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quas
            ratione vel inventore labore commodi modi quos culpa aut saepe!
            Alias!
          &lt;/p&gt;
          &lt;a href="#" target="_blank" class="project-link"&gt;Check it Out&lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="contenedor-de-proyecto tarjeta-de-proyecto"&gt;
          &lt;img
            src="assets/images/greenyEarth.png"
            alt="greeny-earth"
            loading="lazy"
            class="project-pic"
          /&gt;
          &lt;h3 class="titulo-de-proyecto"&gt;Greeny Earth&lt;/h3&gt;
          &lt;p class="detalles-de-proyecto"&gt;
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quas
            ratione vel inventore labore commodi modi quos culpa aut saepe!
            Alias!
          &lt;/p&gt;
          &lt;a href="#" target="_blank" class="enlace-de-proyecto"&gt;Echale un vistazo!&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
</code></pre><p>Revisando el HTML, hay tres proyectos en total, en sus elementos divs individuales con el nombre de clase contenedor-de-proyecto y tarjeta-de-proyecto. Estas clases serán muy relevantes en aplicar estilos consistentemente al proyecto. </p><p>El elemento de sección contenedor en sí mismo tiene una clse de proyectos y un atributo de identificación de proyectos también. El nombre de la clase es para diseñar los estilos y la identificación es para vincularla al enlace Proyectos en la barra de navegación. </p><p>Los proyectos tienen sus imágenes individuales con el nombre de clase &nbsp;of <code>foto-proyecto</code>, &nbsp;sus títulos con una clase &nbsp;<code>titulo-de-proyecto</code>, detalles con el nombre de clase <code>detalles-de-proyecto</code>, y en laces con la clase de &nbsp;<code>enlaces-de-proyecto</code>.</p><p>El único propósito de darle a todos los elementos clases únicas es para aplicarles estilos.</p><p>Estos son algunos de los proyectos en los que trabajé cuando empecé como desarrollador.</p><p>La sección de proyectos luce así en el navegador:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/projects-unstyled.gif" class="kg-image" alt="projects-unstyled" width="600" height="400" loading="lazy"></figure><p>Sin embargo, la sección no se ve tan bien, incluso hay una molesta barra de desplazamiento horizontal causada por las imágenes. Así que tenemos mucho trabajo por hacer en CSS. </p><!--kg-card-begin: html--><h2 id="estilos-seccion-proyectos">Como dar estilos a la sección de Proyectos</h2><!--kg-card-end: html--><p>En primer lugar, daré a toda la sección un color de fondo configurando el color grisáceo (--bg-color) que declaramos en las variables CSS como valor.</p><p>También reduciré el ancho y el alto de las imágenes del proyecto usando la clase &nbsp;<code>foto-de-proyecto</code> . &nbsp;Luego usaré Flexbox para poner los proyectos uno al lado del otro.</p><pre><code class="language-css">.proyectos {
  background-color: var(--bg-color);
  padding: 32px 0;
  margin-top: 2rem;
}

.foto-de-proyecto {
  width: 65%;
  height: 60%;
}

.contenedor-de-proyectos {
  display: flex;
  align-items: center;
  justify-content: center;
}
</code></pre><p>La sección ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss13Edited.jpg" class="kg-image" alt="ss13Edited" width="600" height="400" loading="lazy"></figure><p>Las imágenes ahora lucen mejor, pero el título del proyecto, detalles de proyecto, y enlaces de proyectos necesitan alinearse muy bien dentro de sus contenedores individuales. &nbsp;</p><p>Toda la sección del proyecto también debe ser empujada hacia el centro. Sin embargo, no necesita Flexbox para hacer esto &nbsp;se puede hacer configurando la propiedad de text-align con el valor de center:</p><pre><code class="language-css">.titulo-de-proyectos {
  text-align: center;
  margin-bottom: 1rem;
}

.contenedor-de-proyectos {
  text-align: center;
  width: 21.875rem;
  padding: 1rem;
}
</code></pre><p>Debemos tener en cuenta que también estable un ancho de <code>21.875rem (350 pixeles)</code> &nbsp;para los contenedores de proyectos individuales. Esto los separará de los lados para una mejor experiencia de usuario. En este caso, el usuario no necesitaría mirar completamente para ver todo.</p><p>La sección ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss14.png" class="kg-image" alt="ss14" width="600" height="400" loading="lazy"></figure><p>Aún podemos hacer que esta sección se vea mejor. Los títulos de proyectos, detalles de proyectos y los enlaces de proyectos &nbsp;se ven agrupados, por lo que debemos agregar algo de padding y margin.</p><p>Los contenedores de proyectos individuales también deben verse más distintos. La propiedad &nbsp;<code>box-shadow</code> va ser fundamental aquí, así que las pondremos en sus tarjetas individuales.</p><pre><code class="language-css">.contenedor-de-proyecto p {
  padding: 0.4rem;
}

.titulo-de-proyecto {
  margin-bottom: var(--bottom-margin);
}

.detalles-de-proyecto {
  margin-bottom: var(--bottom-margin);
}

.tarjeta-de-proyecto {
  background-color: #fff;
  border-radius: 11px;
  box-shadow: 0 3px 10px var(--primary-shadow);
  padding: 20px;
  margin: 10px;
}
</code></pre><p>La sección de proyectos ahora luce mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss15.png" class="kg-image" alt="ss15" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="construir-seccion-contacto">Como construir la sección Contacto
</h2><!--kg-card-end: html--><p>Si un potencial empleador o cliente encuentra tu portafolio website atractivo, podrían querer contactarte. Así que te recomendamos tener un formulario de contacto en esta sección, junto con enlaces para tus cuentas de redes sociales.</p><p>El HTML para esta sección se vería así:</p><pre><code class="language-html">&lt;section class="contacto" id="contacto"&gt;
      &lt;h2&gt;Contactame&lt;/h2&gt;
      &lt;div class="formulario-contacto-contenedor"&gt;
        &lt;div class="formulario-contacto"&gt;
          &lt;form action="https://formspree.io/f/xyylngw" method="POST"&gt;
            &lt;div class="control-formulario"&gt;
              &lt;label for="name"&gt;Nombre&lt;/label&gt;
              &lt;input
                type="text"
                id="name"
                name="sender-name"
                placeholder="Escribe tu nombre"
                class="input-field"
                required
              /&gt;
            &lt;/div&gt;
            &lt;div class="control-formulario"&gt;
              &lt;label for="email"&gt;Correo Electrónico&lt;/label&gt;
              &lt;input
                type="email"
                id="email"
                name="sender-email"
                placeholder="Ingreso tu correo electrónico"
                class="input-field"
                required
              /&gt;
            &lt;/div&gt;
            &lt;div class="control-formulario"&gt;
              &lt;label for="mensaje"&gt;Mensaje&lt;/label&gt;
              &lt;textarea
                id="mensaje"
                cols="60"
                rows="10"
                placeholder="Escribe tu mensaje"
                name="mensaje"
                class="input-field"
                required
              &gt;&lt;/textarea&gt;
            &lt;/div&gt;
            &lt;input
              type="submit"
              value="Enviar"
              id="submit-btn"
              class="submit-btn"
            /&gt;
          &lt;/form&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
</code></pre><p>Aquí construimos el formulario de contacto con campos de entrada para nombre y correo electrónico, una etiqueta <code>textarea</code> para que la gente escriba el mensaje que quieran enviar, y el botón enviar para enviar el mensaje para que puedas verlo.</p><p>Si echas un vistazo al elemento form, verás que tenemos un atributo de acción establecido en una URL de &nbsp;Formspree. Este es el que hemos elegido para el envío de formulario. Con Formspree, puedes recibir el mensaje directamente a la bandeja de entrada de tu correo electrónico sin necesidad de configurar un servidor con PHP o JavaScript complejos.</p><p>Ten en cuenta que no podrás usar mi URL -no funcionará para ti. Puedes fácilmente configurar el tuyo en el sitio web de Formspreee de forma gratuita. &nbsp;También adjunté un recurso sobre cómo configurar Formspree en el archvio de readme del proyecto.</p><p>Establecí algunos atributos &nbsp;<code>id</code> y <code>class</code> &nbsp;para los inputs individuales para darle estilos. También hay un atributo &nbsp;<code>name</code> para todos los campos de input. Esto es requerido por el servicio de envió de formularios de Formspree. </p><p>Para obtener una validación básica, adjunté un atributo &nbsp;<code>required</code> , de esa forma, &nbsp;el formulario se niega a enviar la información si el usuario deja algún campo vacío.</p><!--kg-card-begin: html--><h2 id="estilo-seccion-contacto">Como dar estilo a la sección Contacto</h2><!--kg-card-end: html--><p>Sin estilo, la sección de contacto no se ve nada bien:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss16Edited.jpg" class="kg-image" alt="ss16Edited" width="600" height="400" loading="lazy"></figure><p>Todo lo que haremos en CSS &nbsp;es alinear todo el contenido al centro y hacer que los campos de input se vean mejor.</p><p>Con las propiedades de text align y margin, puedes alinear la etiqueta h2 y el contenedor para el formulario del contacto al centro .</p><p>También pondremos todo el formulario en una tarjeta con la propiedad de <code>box-shadow</code> .</p><pre><code class="language-css">.contacto {
  margin-top: 2rem;
}

.contacto h2 {
  text-align: center;
  margin-bottom: var(--bottom-margin-2);
}

.contenedor-formulario-contacto {
  max-width: 40.75rem;
  margin: 0 auto;
  padding: 0.938rem;
  border-radius: 5px;
  box-shadow: 0 3px 10px var(--secondary-shadow);
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss17.png" class="kg-image" alt="ss17" width="600" height="400" loading="lazy"></figure><p>Los inputs, textarea, labels y los placeholders necesitan definitivamente también algo de estilo para ayudar con la alineación y la claridad:</p><pre><code class="language-css">.contenedor-formulario-contacto label {
  line-height: 2.7em;
  font-weight: var(--bold-font);
  color: var(--primary-color);
}

.contenedor-formulario-contacto textarea {
  min-height: 6.25rem;
  font-size: 14px;
}

.contenedor-formulario-contacto .input-field {
  width: 100%;
  padding-top: 10px;
  padding-bottom: 10px;
  border-radius: 5px;
  border: none;
  border: 2px outset var(--primary-color);
  font-size: 0.875rem;
  outline: none;
}
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss18.png" class="kg-image" alt="ss18" width="600" height="400" loading="lazy"><figcaption>El formulario luce mejor</figcaption></figure><p>Pero los placeholders no son consistentes con las etiquetas. Así que necesitamos darle algo de color y padding. Le daremos el conjunto de color primario que asignamos en la lista de Variables de CSS. </p><p>Para seleccionar los placeholders y darle estilos, podemos usar la pseudo-class placeholder :</p><pre><code class="language-css">.input-field::placeholder {
  padding: 0.5rem;
  color: var(--primary-color);
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss19.png" class="kg-image" alt="ss19" width="600" height="400" loading="lazy"></figure><p>En el formulario de contacto, lo único que falta es dar estilo al elemento button. Los botones son bastante fáciles de estilizar:</p><pre><code class="language-css">.submit-btn {
  width: 100%;
  padding: 10px;
  margin: 10px 0;
  background-color: #fff;
  border: 2px solid var(--primary-color);
  border-radius: 5px;
  font-size: 1rem;
  font-weight: var(--bold-font);
  transition: var(--transition);
}
</code></pre><p>En el fragmento de código de CSS anterior, hice que el botón pasara por todo el contenedor del formulario dándole un ancho del 100%. También lo hice más visible dando padding, margin, un borde &nbsp;y más &nbsp;font-weight.</p><p>La propiedad de <code>border-radius</code> con un valor de 5px &nbsp;remueve las bordes afilados y la transición sirven para &nbsp;ralentizar un poco las cosas cuando el botón está en estado de desplazamiento.</p><p>El estado de hover &nbsp;se define en el fragmento de código CSS a continuación:</p><pre><code class="language-css">.submit-btn:hover {
  background-color: var(--primary-color);
  border: 2px solid var(--primary-color);
  cursor: pointer;
}
</code></pre><p>El formulario luce mucho mejor ahora:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/contact-form-hover-effect.gif" class="kg-image" alt="contact-form-hover-effect" width="600" height="400" loading="lazy"></figure><p>Recuerda &nbsp;que tener tus enlaces de redes sociales en tu sitio web portafolio es de gran ventaja para que cualquier persona interesada en contactarte lo haga. &nbsp;Este es el siguiente paso que realizaremos, y lo haremos de una forma única.</p><p>El &nbsp;código de HTML para los botones de redes sociales está en el fragmento &nbsp;abajo: </p><pre><code class="language-html">    &lt;div class="sociales"&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img
          src="assets/icons/icons8-twitter-circled.gif"
          alt="Twitter"
          loading="lazy"
          class="socicon"
      /&gt;&lt;/a&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img
          src="assets/icons/icons8-instagram.gif"
          alt="Instagram"
          loading="lazy"
          class="socicon"
      /&gt;&lt;/a&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img
          src="assets/icons/icons8-linkedin-circled.gif"
          alt="Linkedin"
          loading="lazy"
          class="socicon"
      /&gt;&lt;/a&gt;
      &lt;a href="#" target="_blank"
        &gt;&lt;img src="assets/icons/icons8-github.gif" alt="Github" class="socicon"
      /&gt;&lt;/a&gt;
</code></pre><p>Los iconos de redes sociales que elegiremos son gifs animados de la plataforma icons8. Colocaremos a todos en el mismo contenedor con la clase de <code>sociales</code>, y les daremos una clase individual de <code>socicon</code> para dar estilos más fácilmente.</p><p>Debajo puedes ver unos iconos &nbsp;de redes sociales animados que parpadearan en nuestro sitio web:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/animated-social-icons.gif" class="kg-image" alt="animated-social-icons" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="estilos-iconos-redessociales">Como dar estilos a los iconos de redes sociales</h2><!--kg-card-end: html--><pre><code class="language-css">.sociales {
  display: flex;
  flex-direction: column;
  position: fixed;
  right: 1%;
  bottom: 50%;
}

.socicon {
  width: 2rem;
  height: 2rem;
}
</code></pre><p>Con el CSS de arriba, los iconos de redes sociales estarán fijos al lado derecho del sitio web, así que todos los que visiten el sitio web podrán visualizar siempre los iconos aún cuando el usuario se desplace hacia abajo por la página. </p><p>También reduciremos el tamaño de los iconos asignándoles a todos sus valores de &nbsp;propiedad de &nbsp;<code>width</code> y <code>height</code> .</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/good-icons.gif" class="kg-image" alt="good-icons" width="600" height="400" loading="lazy"></figure><p>Mira el resultado!</p><p>Lo único que nos falta es el footer. &nbsp;No hay nada complejo en el HTML y CSS de footer, aparte de la entidad de caracteres reservados para el símbolo de derechos de autor y el corazón:</p><pre><code class="language-html">&lt;footer&gt;
      &lt;p class="copy"&gt;&amp;copy; Copyright 2021&lt;/p&gt;
      &lt;p class="copy"&gt;
        Built with &amp;#x2661; by
        &lt;a href="https://twitter.com/koladechris" target="_blank"
          &gt;Kolade Chris (Ksound)&lt;/a
        &gt;
      &lt;/p&gt;
&lt;/footer&gt;
</code></pre><pre><code class="language-css">footer {
  background-color: var(--bg-color);
  padding: 1.25rem;
  text-align: center;
  margin: 2rem 0 0;
}
</code></pre><p>Ahora tenemos un sitio web portafolio completo!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/full-fledged-portfolio.gif" class="kg-image" alt="full-fledged-portfolio" width="600" height="400" loading="lazy"></figure><p>Pero necesitamos hacerlo responsivo, porque en su estado actual no se vería bien en dispositivo más chicos:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/unresponsive-portfolio.gif" class="kg-image" alt="unresponsive-portfolio" width="600" height="400" loading="lazy"></figure><p>Necesitamos hacer que todo el contenido de las secciones individuales se muestre en una sección encima de la otra ( en un diseño de columna) . Podemos hacer esto muy fácilmente con media queries y Flexbox.</p><p>Antes de agregar las media queries para la responsividad de nuestra página, vamos a implementar un botón de desplazarse-hacia-arriba con HTML, CSS, y JavaScript.</p><!--kg-card-begin: html--><h2 id="boton-desplazar-haciaarriba">Como Agregar un Botón de Desplazarse hacia Arriba </h2><!--kg-card-end: html--><!--kg-card-begin: html--><h2 id="html-boton-desplazarse-haciaarriba">El HTML para el botón Desplazarse hacia Arriba </h2><!--kg-card-end: html--><p>Para el HTML, tenemos un icono animado de Icons8 y al que asignaremos en una etiqueta de i.</p><p>La etiqueta de i tiene una clase de <code>desplazarse-hacia-arriba</code> &nbsp;para dar estilos y un id de <code>desplazarse-hacia-arriba</code> &nbsp; para seleccionarlo con &nbsp;JavaScript. Esto se debe a que para nuestros proyectos, recomiendo usar clases &nbsp;para dar estilos y ids para las funcionalidades que agregaremos con JavaScript.</p><pre><code class="language-html">  &lt;i class="desplazarse-hacia-arriba" id="desplazarse-hacia-arriba"
      &gt;&lt;img
        src="assets/icons/icons8-upward-arrow.gif"
        class="socicon up-arrow"
        alt="desplazarse-hacia-arriba"
    /&gt;&lt;/i&gt;
</code></pre><!--kg-card-begin: html--><h2 id="estilos-boton-desplazarse-haciaarriba">Como dar estilos al icono de Desplazarse-hacia-Arriba</h2><!--kg-card-end: html--><p>Haremos que el icono de desplazarse-hacia-arriba tenga una propiedad de fixed para que se quedé estático como los iconos de redes sociales. También le daremos una propiedad de pointer al cursor, para que este cambie cuando posicionamos el cursor encima del icono.</p><p>Con la clase de flecha-arriba al icono de desplazarse-hacia-arriba, incrementaremos el tamaño del icono para visibilidad: </p><pre><code class="language-css">.desplazarse-hacia-arriba {
  position: fixed;
  right: 0.5%;
  bottom: 3%;
  cursor: pointer;
}

.flecha-arriba {
  width: 3rem;
  height: 3rem;
}
</code></pre><p>El icono se ve muy bien:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/scroll-up-first.gif" class="kg-image" alt="scroll-up-first" width="600" height="400" loading="lazy"></figure><p>Pero aún no hace nada. Así que necesitamos hacerlo funcional con algunas lineas de JavaScript:</p><pre><code class="language-js">// funcionalidad de desplazar hacia arriba
const desplazarArriba = document.querySelector("#desplazarse-hacia-arriba");

desplazarArriba.addEventListener("click", () =&gt; {
  window.scrollTo({
    top: 0,
    left: 0,
    behavior: "smooth",
  });
});
</code></pre><p></p><p><strong>¿Qué está haciendo el código de arriba?</strong></p><p>La primera línea selecciona el botón de desplazar-hacia-arriba con el atributo id adjunto a el en el HTML. Usamos el método <code>querySelector()</code> aquí. También podríamos utilizar el método <code>getElementById()</code> .</p><p>En las líneas restantes, usamos el &nbsp;<code>eventListener</code> del click para obtener la acción click del usuario &nbsp;y hacer que reaccione la parte &nbsp;de <code>scrollTo</code> del objeto de Windows para que el botón funcione. </p><p>Con esta funcionalidad, cuando el usuario hace click en el botón desplazar-hacia-arriba, la página se desplaza hacia arriba y al lado izquierdo del sitio web suavemente. &nbsp;Hicimos esto configurando las propiedades top a <code>0</code>, left a <code>0</code>, y &nbsp; behavior a <code>smooth</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/scroll-up.gif" class="kg-image" alt="scroll-up" width="600" height="400" loading="lazy"></figure><p>Puedes aprender más sobre el objeto windows abriendo la consola de herramientas de desarrollo del navegador. Escribe en la ventana y da enter, luego verás todo lo disponible en el objeto de Windows, como lo hacemos a continuación: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/window-object.gif" class="kg-image" alt="window-object" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="portafolio-webresponsivo">Como hacer Responsivo tu Portafolio web</h2><!--kg-card-end: html--><p>Para hacer responsivo tu sitio web, usaremos media queries de CSS y Flexbox.</p><p>Primero, necesitaremos hacer que las imágenes y el texto se vean más pequeños, y luego haremos que el contenido de cada sección se muestre en un diseño vertical configurando la propiedad <code>flex-direction</code> a column.</p><p>En la consulta de medios, estaremos usando 2 breakpoints &nbsp;– <code>720px</code> y <code>420px</code>.</p><p>El breakpoint de 720px &nbsp;es para tabletas y teléfonos móviles, y el de 420px es para teléfonos pequeños como un &nbsp;iPhone 6, &nbsp;y teléfonos Android pequeños.</p><p>Los breakpoints de la consulta de medios son los puntos en el que queremos que el contenido del sitio web responda de acuerdo al ancho del dispositivo. Así que, cualquier código que pongamos debajo del breakpoint de 720px se refleje en dispositivos con una pantalla menor o mayor de 720px, dependiendo de como especifiques el ancho máximo o ancho mínimo.</p><p>En el caso de &nbsp;utilizar un max-width of <code>720px</code>, &nbsp;la sintaxis de la consulta de medios luce así:</p><pre><code class="language-css">@media screen and (max-width: 720px) {
  /* los cambios se reflejan en una pantalla con un ancho de 720px ye inferior */
}
</code></pre><!--kg-card-begin: html--><h2 id="consultademedios-tabletsymoviles">Como crear la Consulta de Medios para Tabletas y Teléfonos móviles (max-width 720px)</h2><!--kg-card-end: html--><p>Empezaremos por hacer el sitio responsiv0 &nbsp;desde la barra de navegación, porque &nbsp;comúnmente la barra de navegación no se ve bien en dispositivos más pequeños.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss21.png" class="kg-image" alt="ss21" width="600" height="400" loading="lazy"></figure><p>Primero, vamos a reducir el padding de la barra de navegación para que el logo de &nbsp; <code>h1</code> l y los elementos del menú de navegación encajen bien:</p><pre><code class="language-css">nav {
    padding: 1.5rem 1rem;
  }
</code></pre><p>Las cosas ahora se ven un poco mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss22.png" class="kg-image" alt="ss22" width="600" height="400" loading="lazy"></figure><p>En dispositivos más pequeños, los elementos del menú de navegación deben estar uno encima del otro y deben estar ocultos. Entonces, es hora de actualizar el código para que el menú de hamburguesas esté inicialmente oculto.</p><!--kg-card-begin: html--><h2 id="construir-menuhamburguesa">Como construir el menú de hamburguesas</h2><!--kg-card-end: html--><p>Para hacer el menú de hamburguesas, debemos sacar los elementos del menú de navegación del viewport. &nbsp;Luego, debemos establecer una clase de <code>presentacion</code> &nbsp;en los elementos de la lista de navegación que se alternarán con unas pocas líneas de JavaScrip (recordemos que los elementos de navegación están en una lista desordenada).</p><pre><code class="language-css"> nav ul {
    position: fixed;
    background-color: var(--bg-color);
    flex-direction: column;
    top: 86px;
    left: 10%;
    width: 80%;
    text-align: center;
    transform: translateX(120%);
    transition: transform 0.5s ease-in;
  }

   nav ul li {
    margin: 8px;
  }
</code></pre><p>En el fragmento &nbsp;anterior de código CSS, establecimos una posición de fixed en la lista desordenada (<code>ul</code>) para que flote en la pantalla. También lo empuje 86px hacia abajo desde la parte superior con <code>top: 86px</code> y 10% a la izquierda.</p><p>Le dimos un ancho de 80% en relación a su elemento padre (el elemento de navegación del HTML), lo empujó hacia el centro con<code>text-align: center</code>, &nbsp;y finalmente lo oculto con la propiedad de transformación establecida en <code>translateX(120%)</code>. Esto lo empujará hacia la derecha y lo sacará del viewport.</p><p>Y ahora, cuando el usuario de click para mostrar los elementos de la barra de navegación, todos se deslizan desde la derecha. Impresionante.</p><p>Si quieres que los elementos de la barra de navegación se deslicen desde la izquierda, cambia el valor de la propiedad &nbsp;<code>transform</code> a <code>transform: translateX(-120%)</code> (esto es el opuesto directo de <code>transform: translateX(120%)</code>). Es tan fácil como eso, dependiendo de tu preferencia.</p><p>También asigné un margen de 8px a los elementos de navegación para darles más espacio.</p><p>La barra de navegación ahora luce así: <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss22-1.png" class="kg-image" alt="ss22-1" width="600" height="400" loading="lazy"></figure><p>El menú de hamburguesas permanece oculto. &nbsp;Por lo tanto, necesitamos mostrarlo dandole un display: block, asignándole una clase de show para en la propiedad transform dar el valor de 0 en el eje-X translateX(0) para mostrarlo, y después interactuar con el usando &nbsp;JavaScript .</p><pre><code class="language-css"> .menu-hamburguesa {
    display: block;
  }

  nav ul.show {
    transform: translateX(0);
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss24.png" class="kg-image" alt="ss24" width="600" height="400" loading="lazy"></figure><p>Nuestro menú de hamburguesa puede mostrarse, pero los elementos de la barra de navegación están ocultos. Para mostrarlos, necesitamos activar y desactivar la clase show con JavaScript.</p><!--kg-card-begin: html--><h2 id="javascript-menuhamburguesa">Escribiendo JavaScript para hacer el Menú de Hamburguesa </h2><!--kg-card-end: html--><p>Para activar y desactivar con JavaScript los elementos del menú de la barra de navegación, necesitamos primero seleccionar todos los elementos relevantes de la barra de navegación y guardarlos en algunas variables: </p><pre><code class="language-js">// Selecciones para Barra de navegación hamburguesa

const burger = document.querySelector("#burger-menu");
const ul = document.querySelector("nav ul");
const nav = document.querySelector("nav");
</code></pre><ul><li>La variable &nbsp;<code>burger</code> seleccionan la barra de menú de hamburguesa.</li><li>La variable <code>ul</code> &nbsp;selecciona los elementos de la lista (los enlaces de navegación en conjunto ).</li><li>La variable <code>nav</code> selecciona el propio contenedor (el elemento de navegación).</li></ul><p>Lo siguiente que necesitamos hacer es activar la clase de &nbsp;<code>nav ul.show</code> &nbsp;cuando el &nbsp;usuario hace click en el menú &nbsp;de hamburguesa de la barra de navegación. Haremos esto agregando un &nbsp;<code>eventListener</code> &nbsp;click al menú de hamburguesa del barra de menú, y después usar el método para activar &nbsp;to the hamburger menu bar, y luego usando el método de alternar para eliminar y agregar la clase de show. <code>show</code>.</p><p>Recordemos que lo seleccionamos y lo guardamos en una variable llamada &nbsp;<code>burger</code>.</p><pre><code class="language-js">burger.addEventListener("click", () =&gt; {
  ul.classList.toggle("show");
});
</code></pre><p>Nuestros elementos de navegación ahora se pueden activar y desactivar:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/nav-toggling-quirk.gif" class="kg-image" alt="nav-toggling-quirk" width="600" height="400" loading="lazy"></figure><p>Pero hay un problema – la barra de navegación en móvil no se oculta cada vez que se hace click en cualquiera de los enlaces de los elementos de navegación. Por lo tanto, debemos eliminar la clase de <code>nav ul.show</code> cuando se hace click en cualquiera de los enlaces del elemento de navegación.</p><p>Podemos hacer esto con solo algunas líneas de JavaScript también:</p><pre><code class="language-js">// Cerrar el menú de hambuguesa cuando se hace click en un enlace  

// Seleccionar enlaces de navegación
const navLink = document.querySelectorAll(".nav-link");

navLink.forEach((link) =&gt;
  link.addEventListener("click", () =&gt; {
    ul.classList.remove("show");
  })
);
</code></pre><p>Recuerda que los enlaces de navegación tienen una clase de enlace de navegación del HTML. Así que los seleccioné todos con esa clase y los puse en una variable llamada &nbsp;<code>nav-link</code>. &nbsp;Hicimos esto con el método &nbsp;<code>querySelectorAll(</code>) .</p><p>Luego recorrí todos los enlaces con el método <code>forEach</code> de arreglos y puse un event listener &nbsp;de click en todos ellos. Después usé el método <code>remove()</code> proporcionado por el DOM para eliminar la clase de <code>show</code> cada vez que se hace click en cualquiera de los elementos del menú de navegación. Esto sacará &nbsp;del viewport todos los elementos de la lista.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/nav-toggling-quirk-fixed.gif" class="kg-image" alt="nav-toggling-quirk-fixed" width="600" height="400" loading="lazy"></figure><p>Mira eso !</p><p>Esto es un gran avance. Con lo que hemos cubierto ya puedes hacer un menú de hamburguesa para cualquier sitio web.</p><!--kg-card-begin: html--><h2 id="seccionhero-responsiva">Como hacer responsiva la sección Hero</h2><!--kg-card-end: html--><p>La sección Hero no se ve muy bien actualmente: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss25.png" class="kg-image" alt="ss25" width="600" height="400" loading="lazy"></figure><p>Todo lo que tenemos que hacer es usar la propiedad flex-direction con un atributo de column en la consulta de medios, reducir el ancho y altura de la imagen de Jane Doe, y hacer que el texto de Sobre Mí (bio texto) &nbsp;sea legible.</p><pre><code class="language-css">.hero {
    margin-top: -4rem;
    flex-direction: column;
    gap: 0;
  }

  .hero img {
        height: 37.5rem;
        width: 30rem;
    }

  .bio {
    margin-top: -7rem;
    width: 20.5rem;
  }
</code></pre><p>La sección hero luce mejor ahora :</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss26.png" class="kg-image" alt="ss26" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="secionsobremi-responsiva">Como hacer responsiva la sección de Más Sobre mí </h2><!--kg-card-end: html--><p>La sección de Más sobre mí no se ve tan mal, pero claramente podemos hacer algo por mejorarla: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss27.png" class="kg-image" alt="ss27" width="600" height="400" loading="lazy"></figure><p>Tenemos el siguiente código de CSS para hacerlo más legible y presentable:</p><pre><code class="language-css"> .mas-sobre {
    margin-top: 2rem;
    padding: 1rem 3.5rem;
  }

  .mas-sobre h2 {
    text-align: center;
  }

  .mas-sobre p {
    text-align: justify;
  }
</code></pre><p>Movimos toda la sección un poco hacia abajo y le incrementamos el padding en todos sus lados, alineamos el &nbsp;<code>h2</code> al centro, y justificamos el texto.<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss28.png" class="kg-image" alt="ss28" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="seccionhabilidades-responsiva">Como hacer responsiva la sección de Habilidades</h2><!--kg-card-end: html--><p>Los iconos de habilidades lucen muy grandes:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss29.png" class="kg-image" alt="ss29" width="600" height="400" loading="lazy"></figure><p>Todo lo que tenemos que hacer en la consulta de medios es reducir el tamaño de todos los iconos con las propiedades de width y height: :</p><pre><code class="language-css">.icono {
    width: 5.875rem;
    height: 5.25rem;
  }
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss30.png" class="kg-image" alt="ss30" width="600" height="400" loading="lazy"></figure><!--kg-card-begin: html--><h2 id="seccion-proyectosresponsiva">Como hacer responsiva la sección de Proyectos</h2><!--kg-card-end: html--><p>En esta sección de proyectos, necesitamos hacer que los tres proyectos se apilen uno encima del otro configurando la propiedad de flex-direction a column. También reduciremos un poco &nbsp;el ancho de los contenedores individuales. </p><pre><code class="language-css"> .contenedor-proyectos {
    flex-direction: column;
  }

  .contenedor-proyecto {
    width: 20.875rem;
  }
</code></pre><!--kg-card-begin: html--><h2 id="formulariocontacto-responsivo">Como hacer responsivo el formulario de Contacto </h2><!--kg-card-end: html--><p>Necesitamos reducir el ancho del formulario de contacto para alejarlo de los lados y asegurarse de que los iconos fijos de las redes sociales no estén encima. </p><p>Todo lo que necesitamos es establecer un ancho máximo:</p><pre><code class="language-css"> .contenedor-formulario-de-contacto {
    max-width: 23.75rem;
  }
</code></pre><p>El formulario de contacto ahora se ve mejor:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/ss32.png" class="kg-image" alt="ss32" width="600" height="400" loading="lazy"></figure><h3></h3><!--kg-card-begin: html--><h2 id="sitiowebresponsivo-telefonosmoviles">Como hacer responsivo el sitio web para teléfonos pequeños</h2><!--kg-card-end: html--><p>En teléfonos pequeños como el iPhone 6, 7, y 8 plus, los iconos de redes sociales y el icono de desplazamiento-hacia-arriba no se muestran. También hay una barra de desplazamiento horizontal. <br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/smaller-phones-responive-quirks.gif" class="kg-image" alt="smaller-phones-responive-quirks" width="600" height="400" loading="lazy"></figure><p>Para corregir estas peculiaridades, agregaremos consulta de medios en un breakpoint de 420px:</p><pre><code class="language-css">@media screen and (max-width: 420px) {
  .hero img {
    height: 37.5rem;
    width: 23rem;
  }

  .bio {
    width: 18.3rem;
  }

  .contenedor-proyecto {
    width: 17.875rem;
  }

  .contenedor-formulario-de-contacto{
    max-width: 17.75rem;
  }
} 
</code></pre><p>Reduje el tamaño de nuestra imagen de Jane Doe y también reduje el ancho del texto de la biografía (Texto Acerca de Mí), el contenedor del proyecto, y el formulario de contacto. </p><p>Todos estos cambios harán que se muestren los iconos fijos en el lado derecho del sitio web: las redes sociales y los iconos de desplazamiento-hacia-arriba.<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/smaller-phones-responsiveness-quirk-fixed.gif" class="kg-image" alt="smaller-phones-responsiveness-quirk-fixed" width="600" height="400" loading="lazy"></figure><p>Ahora todo se ve bien:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/fully-responsive.gif" class="kg-image" alt="fully-responsive" width="600" height="400" loading="lazy"></figure><p>Ese es el final de todo. Tenemos un portafolio de nuestro sitio web totalmente responsivo. </p><p>Puedes descargar la versión final en el archivo formato zip desde este repositorio de <a href="https://github.com/Ksound22/developer-portfolio">GitHub repo</a>.</p><p>También puedes consultar la &nbsp;<a href="https://eager-williams-af0d00.netlify.app/?">live demo</a> &nbsp;del sitio web del portafolio. Tiene un archivo readme que contiene información sobre las herramientas que utilicé y como puedes personalizar el sitio web. </p><!--kg-card-begin: html--><h2 id="conclusion">Conclusión</h2><!--kg-card-end: html--><p>En este tutorial, aprendiste que es un portafolio de un desarrollador web y las razones por las que deberías tener uno. </p><p>También aprendiste como hacer un sitio web portafolio completamente responsivo usando HTML, CSS, y &nbsp;JavaScript.</p><p>Las partes diferentes de este tutorial son cada uno de de los proyectos, que combinados, se convierten en un sitio web más grande. Por ejemplo, puedes hacer el diseño de una tarjeta, una barra de menú responsiva, un formulario de contacto funcional, y un botón de desplazamiento-hacia-arriba, ya que el tutorial los cubre todos.</p><p>Siéntete libre de personalizar el sitio web a tu gusto .</p><p>Si encuentras útil este tutorial, puedes compartirlo con tus amigos y familiares. Realmente lo apreciaría.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué es el DOM? El significado del Modelo de Objeto de Documento en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Jessica Wilkins [https://www.freecodecamp.org/news/author/jessica-wilkins/] Artículo original: What is the DOM? Document Object Model Meaning in JavaScript [https://www.freecodecamp.org/news/what-is-the-dom-document-object-model-meaning-in-javascript/] Traducido y adaptado por: Jorge Torres [https://twitter.com/jorgettor] Si has empezado a estudiar JavaScript, seguramente has escuchado del DOM. ¿Pero qué es exactamente? En este artículo, explicaré que es el DOM ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-es-el-dom-el-significado-del-modelo-de-objeto-de-documento-en-javascript/</link>
                <guid isPermaLink="false">6182e617459445092186e49e</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jorge Torres Torres ]]>
                </dc:creator>
                <pubDate>Thu, 06 Jan 2022 08:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/11/dom.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong>:</strong></strong> </strong></strong><a href="https://www.freecodecamp.org/news/author/jessica-wilkins/">Jessica Wilkins </a><br><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original</strong></strong></strong></strong>:</strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/what-is-the-dom-document-object-model-meaning-in-javascript/"><strong><strong><strong><strong> </strong></strong></strong></strong>What is the DOM? Document Object Model Meaning in JavaScript</a><br><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por</strong></strong></strong></strong>:</strong></strong> </strong></strong><a href="https://twitter.com/jorgettor">Jorge Torres</a></p><p>Si has empezado a estudiar JavaScript, seguramente has escuchado del DOM. ¿Pero qué es exactamente?</p><p>En este artículo, explicaré que es el DOM y daré algunos ejemplos usando código de JavaScript. </p><p>Revisaremos como seleccionar elementos de un documento HTML, como crear elementos, como cambiar estilos en línea de CSS, y como escuchar los elementos.</p><h2 id="-qu-es-el-dom">¿Qué es el DOM? </h2><p>DOM significa Document Object Model, en español sería Modelo de Objetos del Documento. Es una interfaz de programación que nos permite crear, cambiar, o remover elementos del documento. También podemos agregar eventos a esos elementos para hacer más dinámica nuestra página. </p><p>El DOM visualiza el documento de HTML como un árbol de tres nodos. Un nodo representa un documento de HTML.</p><p>Echemos un vistazo a este código de HTML para entender mejor la estructura de árbol del DOM.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;title&gt;Estructura de árbol del DOM&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;Estructura de árbol del DOM&lt;/h1&gt;
	&lt;h2&gt;Aprende sobre el DOM&lt;/h2&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Nuestro documento se llama nodo raíz y contiene un nodo hijo el cual es el elemento <code>&lt;html&gt;</code>. El elemento <code>&lt;html&gt;</code> contiene dos hijos los cuales son los elementos <code>&lt;head&gt;</code> y <code>&lt;body&gt;</code>.</p><p>Ambos elementos <code>&lt;head&gt;</code> y <code>&lt;body&gt;</code> tienen hijos propios.</p><p>Aquí hay otra forma de visualizar este árbol de nodos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Document.jpg" class="kg-image" alt="Document" width="600" height="400" loading="lazy"></figure><p>Podemos acceder a estos elementos en el documento y hacer cambios a ellos usando JavaScript.</p><p>Veamos algunos &nbsp;ejemplos de como podemos trabajar con el DOM usando JavaScript.</p><h2 id="como-seleccionar-elementos-en-el-documento"><strong>Como seleccionar Elementos en el Documento</strong></h2><p>Hay diferentes &nbsp;métodos para seleccionar un elemento en el documento de HTML.</p><p>En este artículo, nos enfocaremos en tres de esos métodos:</p><ul><li><code>getElementById()</code></li><li><code>querySelector()</code></li><li><code>querySelectorAll()</code></li></ul><h3 id="getelementbyid-"><strong><strong><code>getElementById()</code></strong></strong></h3><p>En HTML, los <code>id</code>s se utilizan como identificadores únicos para los elementos HTML. Esto significa que no podemos tener el mismo nombre de <code>id</code> para dos elementos diferentes.</p><p>Esto sería incorrecto:</p><pre><code class="language-html">&lt;p id="para"&gt;Este es mi primer parágrafo.&lt;/p&gt;
&lt;p id="para"&gt;Este es mi segundo parágrafo.&lt;/p&gt;</code></pre><p>Tendrías que asegurarte de que esos <code>id</code> sean únicos como los siguientes:</p><pre><code class="language-html">&lt;p id="para1"&gt;Este es mi primer parágrafo.&lt;/p&gt;
&lt;p id="para2"&gt;Este es mi segundo parágrafo.&lt;/p&gt;</code></pre><p>En JavaScript, podemos tomar una etiqueta de HTML haciendo referencia al nombre del &nbsp;<code>id</code>.</p><pre><code class="language-js">document.getElementById("nombre de id va aquí")</code></pre><p>Este código le dice a la computadora que obtenga el elemento &nbsp;<code>&lt;p&gt;</code> &nbsp;que tiene el &nbsp;<code>id</code> &nbsp;de <code>para1</code> y que imprima el elemento en la consola.</p><pre><code class="language-js">const paragraph1 = document.getElementById("para1");
console.log(paragraph1);</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-2.25.49-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-2.25.49-PM" width="600" height="400" loading="lazy"></figure><p>Si deseamos leer solamente el contenido del párrafo, entonces podemos usar la propiedad &nbsp;<code>textContent</code> &nbsp;dentro del <code>console.log()</code>.</p><pre><code class="language-js">const paragraph1 = document.getElementById("para1");
console.log(paragraph1.textContent);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-2.35.31-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-2.35.31-PM" width="600" height="400" loading="lazy"></figure><h3 id="queryselector-"><strong><strong><code>querySelector()</code></strong></strong></h3><p>Puedes usar este método para encontrar elementos con uno o más selectores de CSS.</p><p>He creado este ejemplo de HTML con información de mis shows favoritos de tv:</p><pre><code class="language-html">&lt;h1&gt;Favorite TV shows&lt;/h1&gt;
&lt;ul class="list"&gt;
  &lt;li&gt;Golden Girls&lt;/li&gt;
  &lt;li&gt;Archer&lt;/li&gt;
  &lt;li&gt;Rick and Morty&lt;/li&gt;
  &lt;li&gt;The Crown&lt;/li&gt;
&lt;/ul&gt;</code></pre><p>Si deseamos encontrar en la consola e imprimir el elemento <code>h1</code> , entonces podemos usar ese nombre de etiqueta dentro del <code>querySelector()</code>.</p><pre><code class="language-js">const h1Element = document.querySelector("h1");
console.log(h1Element);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-3.15.59-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-3.15.59-PM" width="600" height="400" loading="lazy"></figure><p>Si quisiera apuntar a &nbsp;<code>class="list"</code> &nbsp;para imprimir la lista no ordenada en la consola, entonces usaría &nbsp;<code>.list</code> dentro del &nbsp;<code>querySelector()</code>.</p><p>El <code>.</code> antes de <code>list</code> &nbsp;le dice a la computadora que &nbsp;apunte &nbsp;al nombre de la Clase. Si deseas apuntar a &nbsp;un <code>id</code> entonces te recomiendo usar el símbolo <code>#</code> antes del nombre.</p><pre><code class="language-js">const list = document.querySelector(".list");
console.log(list);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-3.22.45-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-3.22.45-PM" width="600" height="400" loading="lazy"></figure><h3 id="queryselectorall-"><strong><strong><code>querySelectorAll()</code></strong></strong></h3><p>Este método encuentra todos los elementos que coinciden con el selector de CSS y devuelve una lista de todos esos nodos.</p><p>Si quisiera encontrar todos los elementos &nbsp;<code>&lt;li&gt;</code> en nuestro ejemplo, podría utilizar el combinador de hijos <code>&gt;</code> para encontrar a todos los elementos hijos de <code>&lt;ul&gt;</code>.</p><pre><code class="language-js">const listItems = document.querySelectorAll("ul &gt; li");
console.log(listItems); </code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-3.30.46-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-3.30.46-PM" width="600" height="400" loading="lazy"></figure><p>Si quisiéramos imprimir los elementos reales &nbsp;<code>&lt;li&gt;</code> con los shows de tv, podemos usar el ciclo &nbsp;<code>forEach()</code> para iterar sobre la NodeList e imprimir cada uno de los elementos.</p><pre><code class="language-js">const listaDeElementos = document.querySelectorAll("ul &gt; li");

listaDeElementos.forEach((item) =&gt; {
  console.log(item);
});</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-3.42.13-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-3.42.13-PM" width="600" height="400" loading="lazy"></figure><h2 id="como-agregar-nuevos-elementos-al-documento"><strong>Como agregar nuevos elementos al Documento</strong></h2><p>Podemos utilizar &nbsp;<code>document.createElement()</code> &nbsp;para agregar nuevos elementos al árbol del DOM.</p><p>Veamos este ejemplo:</p><pre><code class="language-html">&lt;h1&gt;Reasons why I Love freeCodeCamp:&lt;/h1&gt;</code></pre><p>Ahora, &nbsp;solo tengo una etiqueta <code>&lt;h1&gt;</code> en la página. Pero quiero agregar debajo de esa etiqueta <code>&lt;h1&gt;</code> &nbsp;una lista de razones por las cuales amo freeCodeCamp usando JavaScript.</p><p>Primero podemos crear un elemento &nbsp;<code>&lt;ul&gt;</code> usando <code>document.createElement()</code>. Asignaremos eso a una variable llamada <code>listaSinOrden</code>.</p><pre><code class="language-js">let listaSinOrden = document.createElement("ul");
</code></pre><p>Después necesitaremos agregar ese elemento <code>&lt;ul&gt;</code> al documento usando el método <code>appendChild()</code> .</p><pre><code class="language-js">document.body.appendChild(listaSinOrden);</code></pre><p>El siguiente paso es agregar un par de elementos &nbsp;<code>&lt;li&gt;</code> dentro del elemento<code>&lt;ul&gt;</code> usando el método <code>createElement()</code> .</p><pre><code class="language-js">let elemento1Lista = document.createElement("li");

let elemento2Lista = document.createElement("li");</code></pre><p>Después podemos usar la propiedad <code>textContent</code> para agregar texto para nuestros 4 elementos de la lista.</p><pre><code class="language-js">let elemento1Lista = document.createElement("li");
elemento1Lista.textContent = "It's Free";

let elemento2Lista = document.createElement("li");
elemento2Lista.textContent = "It's Awesome";
</code></pre><p>El último paso es usar el método <code>appendChild()</code> para que los elementos de la lista sean agregados a la lista sin orden.</p><pre><code class="language-js">let elemento1Lista = document.createElement("li");
elemento1Lista.textContent = "It's Free";
listaSinOrden.appendChild(elemento1Lista);

let elemento2Lista = document.createElement("li");
elemento2Lista.textContent = "It's Awesome";
listaSinOrden.appendChild(elemento2Lista);</code></pre><p>Así es como luce ya todo el código en conjunto.</p><pre><code class="language-js">let listSinOrden = document.createElement("ul");
document.body.appendChild(listaSinOrden);

let elemento1Lista = document.createElement("li");
elemento1Lista.textContent = "It's Free";
listaSinOrden.appendChild(elemento1Lista);

let elemento2Lista = document.createElement("li");
elemento2Lista.textContent = "It's Awesome";
listaSinOrden.appendChild(elemento2Lista);</code></pre><p>Así es como luce el resultado en la página:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-4.21.55-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-4.21.55-PM" width="600" height="400" loading="lazy"></figure><h2 id="como-usar-la-propiedad-style-para-cambiar-estilos-en-l-nea-de-css"><strong>Como usar la propiedad Style para cambiar estilos en línea de CSS </strong></h2><p>La propiedad <code>style</code> te da la habilidad de cambiar el CSS en tu documento de HTML.</p><p>En este ejemplo, vamos a cambiar el color del texto <code>h1</code> de negro a azul usando la propiedad &nbsp;<code>style</code> .</p><p>Aquí nuestro HTML.</p><pre><code class="language-html">&lt;h1&gt;I was changed to blue using JavaScript&lt;/h1&gt;
</code></pre><p>Primero necesitamos tomar la etiqueta &nbsp;<code>h1</code> &nbsp;usando el método <code>querySelector()</code>.</p><pre><code class="language-js">const h1 = document.querySelector("h1");</code></pre><p>Después usamos <code>h1.style.color</code> &nbsp;para cambiar el texto &nbsp;<code>h1</code> de negro a azul.</p><pre><code class="language-js">const h1 = document.querySelector("h1");
h1.style.color = "blue";</code></pre><p>Así se ve el resultado en el navegador:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-26-at-4.33.44-PM.png" class="kg-image" alt="Screen-Shot-2021-09-26-at-4.33.44-PM" width="600" height="400" loading="lazy"></figure><p>Puedes usar esta propiedad <code>style</code> para cambiar un número de &nbsp;inline styles de CSS incluyendo <code>background-color</code>, <code>border-style</code>, <code>font-size</code> y más.</p><h2 id="como-usar-el-addeventlistener-para-escuchar-eventos-en-la-p-gina"><strong>Como usar el <strong> addEventListener()</strong> para escuchar eventos en la página<strong> </strong></strong></h2><p>Este método te permite agregar un evento a un elemento de HTML como un botón.</p><p>En este ejemplo, cuando haces clic en un botón, aparecerá un mensaje de alerta.</p><p>En nuestro HTML, tenemos un elemento botón con el &nbsp;<code>id</code> de <code>btn</code>.</p><pre><code class="language-html">  &lt;button id="btn"&gt;Mostrar Alerta&lt;/button&gt;
</code></pre><p>Podemos apuntar a ese elemento en nuestro &nbsp;JavaScript usando el método <code>getElementById()</code> y asignando eso a una variable llamada <code>button</code>.</p><pre><code class="language-js">const button = document.getElementById("btn");
</code></pre><p>El <code>addEventListener()</code> toma un tipo de evento y una función. &nbsp;El tipo de evento será un evento <code>click</code> &nbsp;y la función activará el mensaje de alerta.</p><p>Este es el código para agregar el event listener a la variable &nbsp;<code>button</code> .</p><pre><code class="language-js">button.addEventListener("click", () =&gt; {
  alert("Gracias por dar Click");
});</code></pre><p>Este el código completo donde puedes dar clic en el botón y el mensaje de alerta &nbsp;aparecerá:</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_abwQwPb" src="https://codepen.io/jessica-wilkins/embed/preview/abwQwPb?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=abwQwPb" title="Using addEventListener" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; margin: 0px; padding: 0px; vertical-align: middle; width: 740px; overflow: hidden;" loading="lazy"></iframe></figure><h2 id="como-usar-el-dom-en-proyectos-del-mundo-real"><strong>Como usar el DOM en proyectos del mundo real</strong></h2><p>Esa fue una breve introducción a &nbsp;algunos de los métodos de DOM que podemos utilizar. Hay muchos más ejemplos que no cubrimos en este artículo.</p><p>Si quieres empezar a construir proyectos de JavaScript de nivel principiante y trabajar con el DOM, te sugiero revisar mi artículo <a href="https://www.freecodecamp.org/news/javascript-projects-for-beginners/">40 proyectos de JavaScript para principiantes</a>.</p><h2 id="conclusi-n"><strong><strong>Conclusión</strong></strong></h2><p>DOM son las siglas de Document Object Model y es una interfaz de programación que nos permite crear, cambiar o remover elementos del documento. También podemos agregar eventos a esos elementos para hacer nuestra página más dinámica.</p><p>Puedes seleccionar elementos en JavaScript usando métodos como &nbsp;<code>getElementById(), querySelector()</code>, y <code>querySelectorAll()</code>.</p><p>Si quieres agregar nuevos elementos al documento puedes hacerlo con &nbsp;<code>document.createElement()</code>.</p><p>También puedes cambiar los estilos en línea de CSS &nbsp; de los elementos usando la propiedad &nbsp;<code>style</code>.</p><p>Si deseas agregar eventos a elementos como botones, puedes usar el <code>addEventListener()</code>.</p><p>Espero hayas disfrutado este artículo y te deseo las mejores de las suertes en tu viaje de aprendizaje de JavaScript.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprende validación de formularios JavaScript: Cree un proyecto JS para principiantes ✨ ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Joy Shaheb [https://www.freecodecamp.org/news/author/joy/] Artículo original: Learn JavaScript Form Validation - Build a JS Project for Beginners [https://www.freecodecamp.org/news/learn-javascript-form-validation-by-making-a-form/ ] Traducido y adaptado por: Jorge Torres [https://twitter.com/jorgettor] Hoy aprenderemos como hacer una validación de formulario en JavaScript. También agregaremos imágenes y media queries para construir todo el proyecto ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/aprende-validacion-de-formularios-javascript-cree-un-proyecto-js-para-principiantes/</link>
                <guid isPermaLink="false">615b2c50818d3e09126987e0</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jorge Torres Torres ]]>
                </dc:creator>
                <pubDate>Fri, 12 Nov 2021 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/10/JavaScript-Form-Validation.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong>Artículo original escrito por</strong></strong>:</strong> </strong> <a href="https://www.freecodecamp.org/news/author/joy/">Joy Shaheb</a><br><strong><strong><strong><strong>Artículo original</strong></strong>: </strong></strong><a href="https://www.freecodecamp.org/news/learn-javascript-form-validation-by-making-a-form/ ">Learn JavaScript Form Validation - Build a JS Project for Beginners</a><br><strong><strong><strong><strong>Traducido y adaptado por</strong></strong>:</strong> </strong><a href="https://twitter.com/jorgettor">Jorge Torres</a></p><p>Hoy aprenderemos como hacer una <strong>validación de formulario</strong> en JavaScript. También agregaremos imágenes y media queries para construir todo el proyecto e incluso puedes guardarlo como parte de tu <strong>portafolio</strong>. </p><p>Esta es la demostración del proyecto que vamos a construir?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-30--1-.png" class="kg-image" alt="Frame-30--1-" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Desktop design</strong></figcaption></figure><p>Esta es una pequeña muestra de como funcionaría el formulario?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/dvdfvdf-1.gif" class="kg-image" alt="ejemplo de projecto" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">project sample</strong></figcaption></figure><h2 id="si-lo-deseas-puedes-ver-tambi-n-este-tutorial-de-youtube-"><strong>Si lo deseas, &nbsp;puedes ver también este tutorial de YouTube<strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></h2><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.178243243243244%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/VufN46OyFng?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0" style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; margin: 0px; padding: 0px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 740px; height: 415.719px;"></iframe>
          </div>
        </div>
      </figure><h2 id="c-digo-fuente"><strong>Código fuente</strong></h2><p>Puedes obtener el código fuente, incluyendo las imágenes, en los siguientes enlaces:</p><ul><li><a href="https://codepen.io/joyshaheb/pen/XWgdOyY">CodePen</a></li><li><a href="https://github.com/JoyShaheb/Project-image-repo/tree/main/Form-Validation">GitHub</a></li></ul><h1 id="como-configurar-el-proyecto"><strong>Como configurar el proyecto</strong></h1><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-1--1-.png" class="kg-image" alt="Frame-1--1-" width="600" height="400" loading="lazy"></figure><p>Sigue estos pasos para configurar nuestro proyecto: ?</p><ul><li>Crea una nueva carpeta con el nombre "Proyecto" y abre VS Code</li><li>Crea los archivos índice.html, estilos.css y main.js</li><li>Enlaza los archivos dentro del HTML</li><li>Descarga las <a href="https://github.com/JoyShaheb/Project-image-repo/tree/main/Form-Validation">imágenes de mi repositorio de GitHub</a>.</li><li>Pega este enlace de font-awesome dentro de la etiqueta head en el HTML. Así &nbsp;podremos tener acceso a iconos de Font Awesome &nbsp;??</li></ul><pre><code class="language-html">&lt;link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"
      crossorigin="anonymous"
    /&gt;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-2--1-.png" class="kg-image" alt="Frame-2--1-" width="600" height="400" loading="lazy"></figure><h1 id="esto-es-lo-que-cubriremos"><strong>Esto es lo que cubriremos</strong></h1><ul><li>Escribiendo el HTML</li><li>Agregando CSS</li><li>Escribiendo JavaScript</li><li>Agregar un botón de redes sociales</li><li>Agregando imágenes</li><li>Media queries para la versión móvil (Diseño responsivo)</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-20--2-.png" class="kg-image" alt="Frame-20--2-" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Table of contents</strong></figcaption></figure><h1 id="como-escribir-el-html"><strong>Como escribir el HTML</strong></h1><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-3.png" class="kg-image" alt="Frame-3" width="600" height="400" loading="lazy"></figure><p>Crea una clase llamada &nbsp;<code>.container</code> &nbsp;dentro de la etiqueta body la cual va a alojar la etiqueta del formulario (form) y que al mismo tiempo tendrá el identificador de <code>form</code>.?</p><pre><code class="language-html">&lt;div class="container"&gt;

	&lt;form id="formulario"&gt;&lt;/form&gt;
    
&lt;/div&gt;</code></pre><p>Y dentro de la etiqueta <code>form</code>, crea 4 <code>div</code>s, como este ejemplo ?</p><pre><code class="language-html">&lt;form id="formulario"&gt;

    &lt;div class="titulo"&gt;Empezar&lt;/div&gt;
    
    &lt;div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;/div&gt;
    
&lt;/form&gt;</code></pre><p>Dentro de esas 3 etiquetas div vacías, vamos a crear 3 entradas [nombreDeUsuario, correoElectronico y contraseña] junto con los iconos y etiquetas.</p><p><strong><strong>Not</strong>a</strong>:<strong><strong> </strong></strong>vamos a crear una clase con nombre <code>.error</code>. Aquí usaremos JavaScript para &nbsp;insertar el mensaje de error.</p><h4 id="entrada-de-nombredeusuario">Entrada de nombreDeUsuario</h4><pre><code class="language-html">&lt;!-- Entrada para nombre de Usuario --&gt;
        
&lt;div&gt;
	&lt;label for="nombreDeUsuario"&gt;Nombre de Usuario&lt;/label&gt;
    &lt;i class="fas fa-user"&gt;&lt;/i&gt;
    
    &lt;input
        type="text"
        name="username"
        id="Nombre-de-Usuario"
        placeholder="Joy Shaheb"
     /&gt;
    
    &lt;i class="fas fa-exclamation-circle failure-icon"&gt;&lt;/i&gt;
    &lt;i class="far fa-check-circle success-icon"&gt;&lt;/i&gt;
    
    &lt;div class="error"&gt;&lt;/div&gt;
    
&lt;/div&gt;</code></pre><h4 id="entrada-de-correo-electr-nico"><strong>Entrada de correo electrónico</strong></h4><pre><code class="language-html">&lt;!-- Entrada de Correo Electrónico --&gt;
        
&lt;div&gt;
	&lt;label for="correoElectronico"&gt;Correo Electrónico&lt;/label&gt;
    &lt;i class="far fa-envelope"&gt;&lt;/i&gt;
    
    &lt;input
        type="email"
        name="email"
        id="correo-electrónico"
        placeholder="abc@gmail.com"
     /&gt;
    
    &lt;i class="fas fa-exclamation-circle failure-icon"&gt;&lt;/i&gt;
    &lt;i class="far fa-check-circle success-icon"&gt;&lt;/i&gt;
    
    &lt;div class="error"&gt;&lt;/div&gt;
    
&lt;/div&gt;</code></pre><h4 id="entrada-contrase-a"><strong>Entrada Contraseña</strong></h4><pre><code class="language-html">&lt;!--   Entrada de contraseña --&gt;
        
&lt;div&gt;
	&lt;label for="password"&gt;Contraseña&lt;/label&gt;
    &lt;i class="fas fa-lock"&gt;&lt;/i&gt;
    
    &lt;input
        type="password"
        name="password"
        id="contrasena"
        placeholder="Ingresar contraseña"
     /&gt;
    
    &lt;i class="fas fa-exclamation-circle failure-icon"&gt;&lt;/i&gt;
    &lt;i class="far fa-check-circle success-icon"&gt;&lt;/i&gt;
    
    &lt;div class="error"&gt;&lt;/div&gt;
    
&lt;/div&gt;</code></pre><h4 id="como-hacer-un-bot-n"><strong>Como hacer un botón</strong></h4><p>Finalmente, agrega el botón antes del cierre de la etiqueta del formulario de la siguiente manera: </p><pre><code class="language-html">&lt;form&gt;
    &lt;!-- otro código aquí --&gt;
    
    &lt;button id="btn" type="submit"&gt;Enviar&lt;/button&gt;
    
&lt;/form&gt;</code></pre><p>Aquí el resultado hasta ahora: ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/fdgdfgdfdffcvb.png" class="kg-image" alt="fdgdfgdfdffcvb" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result So far</strong></figcaption></figure><p>Felicidades por completar la parte del HTML! ???</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-7.png" class="kg-image" alt="Frame-7" width="600" height="400" loading="lazy"></figure><h1 id="como-agregar-el-css"><strong>Como agregar el<strong> CSS</strong></strong></h1><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-4.png" class="kg-image" alt="Frame-4" width="600" height="400" loading="lazy"></figure><p>Vamos a agregar estilos con CSS a nuestro Formulario. Primero, eliminemos los estilos predeterminados de nuestro navegador incluyendo la fuente?</p><pre><code class="language-css">/**
* ! cambiando estilos predeterminados del navegador
**/

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: sans-serif;
}</code></pre><p>Ahora, aplicaremos esos estilos a la etiqueta del formulario: </p><pre><code class="language-css">/**
* ! reglas de estilo para la sección del formulario
**/

formulario {
  display: flex;
  flex-direction: column;
  justify-content: center;
  max-width: 400px;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
  padding: 50px;
}</code></pre><p>Posteriormente, &nbsp;haremos los siguientes cambios para el título del texto: ??</p><pre><code class="language-css">.titulo {
  font-size: 25px;
  font-weight: bold;
  margin-bottom: 20px;
}</code></pre><p>Tu resultado hasta ahora??</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/fsdfsdsfxvxcvxd.png" class="kg-image" alt="fsdfsdsfxvxcvxd" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><p>Ahora, agrega un margen al botón del texto de nuestra etiqueta <code>label</code> así:</p><pre><code class="language-css">label {
  display: block;
  margin-bottom: 5px;
}</code></pre><p>Y agrega estos estilos para cambiar el aspecto de nuestras etiquetas input??</p><pre><code class="language-css">formulario div input {
  width: 100%;
  height: 40px;
  border-radius: 8px;
  outline: none;
  border: 2px solid #c4c4c4;
  padding: 0 30px;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
}
</code></pre><p>Agrega este código para dar más espacio y efectos de cambio de color:</p><pre><code class="language-css">formulario div {
  position: relative;
  margin-bottom: 15px;
}

input:focus {
  border: 2px solid #f2796e;
}</code></pre><p>El resultado hasta ahora ??</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/fdfdfdfdfvdfv.png" class="kg-image" alt="fdfdfdfdfvdfv" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><h2 id="como-dar-estilo-a-los-iconos"><strong>Como dar Estilo a los iconos</strong></h2><p>Ahora le daremos estilo a los iconos que importamos de font-awesome. Sigue el código conmigo :✨✨</p><pre><code class="language-css">/**
* ! reglas de estilo para los iconos del formulario
**/

formulario div i {
  position: absolute;
  padding: 10px;
}
</code></pre><p>Aquí tenemos el resultado de agregar esas dos líneas??</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/fddfvdfvdfvgfbh.png" class="kg-image" alt="fddfvdfvdfvgfbh" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><p>Ahora, agrega estos estilos para dar estilo a la clase error, &nbsp;junto con el icono de <code>success</code> y <code>failure</code> ??</p><pre><code class="language-css">.failure-icon,
.error {
  color: red;
}

.success-icon {
  color: green;
}

.error {
  font-size: 14.5px;
  margin-top: 5px;
}</code></pre><p>Aquí el resultado hasta ahora??</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/ddsfsddsdscsfvv.png" class="kg-image" alt="ddsfsddsdscsfvv" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><p>Mira, los iconos <code>success</code> y <code>failure</code> se superponen entre sí. No te preocupes, manipularemos eso con JavaScript. Por ahora, puedes esconderlos así??</p><pre><code class="language-css">.success-icon,
.failure-icon {
  right: 0;
  opacity: 0;
}
</code></pre><p>Ahora, vamos a dar estilo a nuestro botón de enviar, de esta manera ?</p><pre><code class="language-css">/* Reglas de estilo para botón enviar */

button {
  margin-top: 15px;
  width: 100%;
  height: 45px;
  background-color: #f2796e;
  border: 2px solid #f2796e;
  border-radius: 8px;
  color: #fff;
  font-size: 20px;
  cursor: pointer;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
  transition: all 0.1s ease;
}</code></pre><p>Si quieres agregar un efecto hover, entonces, agrega estos estilos ??</p><pre><code class="language-css">button:hover {
  opacity: 0.8;
}</code></pre><h1 id="-toma-un-descanso-"><strong>¡Toma un descanso<strong>!</strong></strong></h1><p>Hasta ahora todo muy bien. Toma un descanso – lo mereces.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-33.png" class="kg-image" alt="Frame-33" width="600" height="400" loading="lazy"></figure><h1 id="como-agregar-javascript"><strong>Como agregar JavaScript</strong></h1><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-6.png" class="kg-image" alt="Frame-6" width="600" height="400" loading="lazy"></figure><p>Primero, necesitamos apuntar a todas nuestras clases y &nbsp;al id del HTML dentro del JavaScript. Para hacer esta tarea eficientemente, haz estas dos funciones ??</p><pre><code class="language-css">let id = (id) =&gt; document.getElementById(id);

let classes = (classes) =&gt; document.getElementsByClassName(classes);</code></pre><p>Después, &nbsp;guarda las clases y el id dentro de estas variables?</p><p><strong><strong>Not</strong>a<strong>: </strong></strong>Trata de no cometer errores de ortografía. De lo contrario, tu JavaScript no funcionará.</p><pre><code class="language-javascript">let nombreDeUsuario = id("nombreDeUsuario"),
  email = id("email"),
  contrasena = id("contrasena"),
  formulario = id("formulario"),
  
  msjError = classes("error"),
  iconoExito = classes("success-icon"),
  failureIcon = classes("failure-icon");</code></pre><p>Ahora, vamos a apuntar a nuestro formulario y agregar el event listener a <strong>enviar</strong> ?</p><pre><code class="language-css">
form.addEventListener("enviar", (e) =&gt; {
  e.preventDefault();
});
</code></pre><p>Ahora, crearemos una función llamada motor &nbsp;que hará todo el trabajo &nbsp;de &nbsp;validación de formularios para nosotros. Tendrá tres argumentos – sigue aquí: ?</p><pre><code class="language-js">let motor = (id, serial, mensaje) =&gt; {}</code></pre><p>Los argumentos representan lo siguiente:</p><ul><li><code>id</code> va a apuntar a nuestro identificador</li><li><code>serial</code> va a apuntar a todas nuestras clases[error class, success and failure icons]</li><li><code>mensaje</code> &nbsp;va a imprimir en mensaje dentro de nuestra clase .error</li></ul><p>Ahora crea una sentencia &nbsp;<code>if, else</code> así ?</p><pre><code class="language-js">let motor = (id, serial, mensaje) =&gt; {

  if (id.value.trim() === "") {
  } 
  
  else {
  }
}</code></pre><p><strong><strong>Not</strong>a<strong>: </strong></strong> <strong><strong><code>id.value.trim()</code> </strong> </strong> va a remover todos los espacios extra del valor que el usuario ingresa. Puedes darte una idea de como funciona analizando está ilustración ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-19-1.png" class="kg-image" alt="Frame-19-1" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">trim() used to remove extra spaces</strong></figcaption></figure><p>Ahora, mira nuestros siguientes objetivos ?</p><ul><li>Queremos que JavaScript imprima un mensaje dentro de la clase <strong>error </strong>cada que el usuario <strong>envié un formulario en blanco. </strong>Y al mismo tiempo, queremos que los iconos de <code>failure</code><strong> </strong>resalten también.</li><li>Pero, si el usuario <strong>rellena todas las entradas</strong> y las envía, queremos que el botón de <code>success</code> se haga visible.</li></ul><p>Para lograr esto, escribe esta lógica? para imprimir el mensaje:</p><pre><code class="language-js">let motor = (id, serial, mensaje) =&gt; {

  if (id.value.trim() === "") {
    msjError[serial].innerHTML = mensaje;
  } 
  
  else {
    msjError[serial].innerHTML = "";
  }
}</code></pre><p>Para que los iconos funcionen correctamente, agrega este código: ??</p><pre><code class="language-js">let motor = (id, serial, mensaje) =&gt; {

  if (id.value.trim() === "") {
    msjError[serial].innerHTML = mensaje;
    id.style.border = "2px solid red";
    
    // iconos
    failureIcon[serial].style.opacity = "1";
    successIcon[serial].style.opacity = "0";
  } 
  
  else {
    msjError[serial].innerHTML = "";
    id.style.border = "2px solid green";
    
    // iconos
    failureIcon[serial].style.opacity = "0";
    successIcon[serial].style.opacity = "1";
  }
}</code></pre><p>Es tiempo de implementar nuestra función recién creada. Escribe el siguiente código en el lugar donde agregamos el event listener de enviar &nbsp;?</p><pre><code class="language-js">form.addEventListener("enviar", (e) =&gt; {
  e.preventDefault();

  motor(nombreDeUsuario, 0, "El nombre de usuario no puede estar en blanco");
  motor(correoElectronico, 1, "El correo electrónico no puede estar en blanco");
  motor(contrasena, 2, "La contraseña no puede estar en blanco");
});</code></pre><p>Aquí, pasamos los nombres de los id, las series de los nombres de nuestras clases de nombre y pasamos el mensaje que se debe imprimir cuando encontramos un error cuando el usuario envíe el formulario.</p><p>Aquí los resultados hasta ahora ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/dvdfvdf.gif" class="kg-image" alt="El Resultado hasta ahora" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">The Result so far</strong></figcaption></figure><h2 id="como-agregar-los-botones-de-redes-sociales"><strong>Como agregar los botones de redes sociales</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-10.png" class="kg-image" alt="Frame-10" width="600" height="400" loading="lazy"></figure><p>Todo bien hasta ahora, agreguemos las opciones de registro con redes sociales. Sigue los pasos aquí. ?</p><p>Dentro de la etiqueta del formulario, crea un nuevo <code>div</code> con el nombre de clase <code>social</code>:</p><pre><code class="language-html">&lt;form id="formulario"&gt;

    &lt;div class="social"&gt;
    
      &lt;div class="titulo"&gt;Empieza ya&lt;/div&gt;
      
      &lt;div class="pregunta"&gt;
        Ya estás registrado? &lt;br /&gt;
        &lt;span&gt;Registrate&lt;/span&gt;
      &lt;/div&gt;

      &lt;div class="btn"&gt;&lt;/div&gt;

      &lt;div class="or"&gt;O&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;!-- otro código aquí--&gt;
&lt;/form&gt;</code></pre><p>Dentro de la clase <code>.btn</code>, creamos dos divs más con los nombres de clase &nbsp;<code>.btn-1</code> y <code>.btn-2</code> &nbsp;con las imágenes y el texto también.</p><pre><code class="language-html">&lt;div class="btn"&gt;
  &lt;div class="btn-1"&gt;
     &lt;img src="https://img.icons8.com/color/30/000000/google-logo.png" /&gt;
     Registrate
  &lt;/div&gt;
  
  &lt;div class="btn-2"&gt;
    &lt;img src="https://img.icons8.com/ios-filled/30/ffffff/facebook-new.png" /&gt;
     Registrate
   &lt;/div&gt;
&lt;/div&gt;</code></pre><p>Así van nuestro resultado hasta ahora??</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/dfvgdfdsfdsf.png" class="kg-image" alt="dfvgdfdsfdsf" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">The Result so far</strong></figcaption></figure><p>Ahora, primero vamos a darle estilo a <code>.btn-1</code> y <code>.btn-2</code> . &nbsp;Cambiaremos la alineación &nbsp;de los botones a fila de columna?</p><pre><code class="language-css">/**
* ! reglas de estilo para la sección de redes sociales
**/

.btn {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  gap: 15px;
}</code></pre><p>Así es como se vería ahora:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/dfdfdfdbgf.png" class="kg-image" alt="dfdfdfdbgf" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">The Result so far</strong></figcaption></figure><p>Ahora, agrega estilos para el botón así: ?</p><pre><code class="language-css">.btn-1,
.btn-2 {
  padding: 10px 5px;
  width: 100%;
  display: flex;
  gap: 15px;
  justify-content: center;
  align-items: center;
  border: 2px solid #c4c4c4;
  border-radius: 8px;
  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
  cursor: pointer;
}</code></pre><p>Cambia &nbsp;el color del icono y el color del texto del &nbsp;<code>.btn-2</code> así: ?</p><pre><code class="language-css">.btn-2 {
  background-color: #4f70b5;
  color: white;
}</code></pre><p>Después agrega estos pequeños cambios para que el componente se vea mejor:</p><pre><code class="language-css">.or {
  text-align: center;
}

.pregunta {
  font-size: 15px;
}

span {
  color: #f2796e;
  cursor: pointer;
}</code></pre><p>El resultado hasta ahora luce así:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/fdfhgnmhg.png" class="kg-image" alt="fdfhgnmhg" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><h2 id="como-agregar-im-genes"><strong>Como agregar imágenes </strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-9.png" class="kg-image" alt="Frame-9" width="600" height="400" loading="lazy"></figure><p>Ahora, agregaremos imágenes a nuestro proyecto. Primero, escribiremos el HTML ?</p><pre><code class="language-html">&lt;div class="container"&gt;

      &lt;div class="contenido"&gt;
        &lt;div class="logo"&gt;
          &lt;img src="https://svgshare.com/i/_go.svg" alt="" /&gt;
        &lt;/div&gt;
        
        &lt;div class="imagen"&gt;&lt;/div&gt;
        
        &lt;div class="texto"&gt;
          Empieza gratis &amp; obten &lt;br /&gt;
          atractivas ofertas hoy !
        &lt;/div&gt;  
      &lt;/div&gt;
      
   &lt;form id="formulario"&gt;
   &lt;!--otro código aquí --&gt;
   &lt;/form&gt;
   
&lt;/div&gt;</code></pre><p>El resultado hasta ahora?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/dfghgjgjgytfh.png" class="kg-image" alt="dfghgjgjgytfh" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><p>Ahora necesitamos cambiar la orientación de nuestro contenido de columna a fila. Sigue los pasos a continuación ?</p><pre><code class="language-css">.container {
  display: flex;
  flex-direction: row;
}</code></pre><p>Agrega estas reglas de estilo para la sección de contenido:</p><pre><code class="language-css">/**
* ! reglas de estilo  para la sección de contenido
**/

.contenido {
  display: flex;
  flex-direction: column;
  justify-content: space-around;
  background-color: #f2796e;
  width: 55%;
  min-height: 100vh;
  padding: 10px 20px;
}

formulario {
   width: 45%;
   max-width: none;
}</code></pre><p>El resultado hasta ahora ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/dsffgythjy.png" class="kg-image" alt="dsffgythjy" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><p>Agrega la ilustración principal con CSS:</p><pre><code class="language-css">.imagen {
  background-image: url("https://svgshare.com/i/_gZ.svg");
  background-repeat: no-repeat;
  background-size: contain;
  background-position: center;
  /* border: 2px solid black; */
  height: 65%;
}
</code></pre><p>Y agrega estos estilos para la clase &nbsp;<code>.texto</code>:</p><pre><code class="language-css">.texto {
  text-align: center;
  color: white;
  font-size: 18px;
}

formulario {
   width: 45%;
   max-width: none;
}</code></pre><p>El Resultado hasta ahora ?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/wewrwerew.png" class="kg-image" alt="wewrwerew" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Result so far</strong></figcaption></figure><h2 id="como-agregar-media-queries-para-la-versi-n-mobile"><strong>Como agregar Media Queries para la Versión Mobile</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-8.png" class="kg-image" alt="Frame-8" width="600" height="400" loading="lazy"></figure><p>Queremos que nuestro formulario tenga un diseño responsivo. Así que agregaremos media queries para que nos ayuden a lograrlo. </p><p>Para pantallas con un ancho de 900 px, &nbsp;vamos a agregar estos estilos. Sigue los pasos ??</p><pre><code class="language-css">@media (max-width: 900px) {
  .container {
    flex-direction: column;
  }

  formulario,
  .contenido {
    width: 100%;
  }

  .btn {
    flex-direction: column;
  }
  .imagen {
    height: 70vh;
  }
}</code></pre><p>Para pantallas con un ancho de 425px, haremos estos cambios mínimos ?</p><pre><code class="language-css">@media (max-width: 425px) {
  formulario {
    padding: 20px;
  }
}
</code></pre><p>Este es el resultado final??</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/fgbgfnghnghnhgmjhgnmhgnhgnggfbgfgfb.gif" class="kg-image" alt="fgbgfnghnghnhgmjhgnmhgnhgnggfbgfgfb" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">The final result</strong></figcaption></figure><h1 id="conclusi-n"><strong><strong>Conclusión</strong></strong></h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/09/Frame-5.png" class="kg-image" alt="Frame-5" width="600" height="400" loading="lazy"><figcaption><strong style="box-sizing: inherit; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; margin: 0px; padding: 0px; vertical-align: baseline; color: var(--gray85);">Congratulations !</strong></figcaption></figure><p>Felicidades por completar tu lectura de este tutorial. Ahora puedes fácil y eficientemente usar JavaScript para manejar validación de formularios. ¡Pero no solo eso, <strong>también tienes ya un proyecto listo para mostrar a tu reclutador local<strong>!</strong></strong></p><p>Aquí tienes tu medalla por leer hasta el final ❤️</p><h3 id="sugerencias-y-retroalimentaci-n-ser-n-muy-apreciadas-"><strong><strong>Sug</strong>erencias<strong> </strong>y retroalimentación serán muy apreciadas<strong> ❤️</strong></strong></h3><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/i/usxsz1lstuwry3jlly4d.png" class="kg-image" alt="Alt Text" width="1000" height="245" loading="lazy"></figure><ul><li><a href="https://www.linkedin.com/in/joyshaheb/"><strong><strong>LinkedIn/ JoyShaheb</strong></strong></a></li><li><strong><strong><a href="https://www.youtube.com/c/joyshaheb">YouTube / JoyShaheb</a></strong></strong></li><li><strong><strong><a href="https://twitter.com/JoyShaheb">Twitter / JoyShaheb</a></strong></strong></li><li><strong><strong><a href="https://www.instagram.com/joyshaheb/">Instagram/ JoyShaheb</a></strong></strong></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de JavaScript array.forEach():  Como iterar a través de elementos en un arreglo ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Kingsley Ubah [https://www.freecodecamp.org/news/author/ubahthebuilder/]  Artículo original: JavaScript Array.forEach() Tutorial - How to Iterate Through Elements in an Array [/espanol/news/p/b04df365-2443-4746-86b3-d6a9aa3a44b0/javascript-array-foreach-tutorial-how-to-iterate-through-elements-in-an-array] Traducido y adaptado por: Jorge Torres [https://twitter.com/jorgettor] En JavaScript, con frecuencia te verás en necesidad de iterar a través de una colección d ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-de-javascript-arrayforeach-como-iterar-a-traves-de-elementos-en-un-arreglo/</link>
                <guid isPermaLink="false">6142123bfbc6fd08e90590d2</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Jorge Torres Torres ]]>
                </dc:creator>
                <pubDate>Wed, 06 Oct 2021 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/09/forEachtwo-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong>Artículo original escrito por</strong>: </strong><a href="https://www.freecodecamp.org/news/author/ubahthebuilder/">Kingsley Ubah</a> <br><strong><strong>Artículo original</strong>: </strong><a href="https://www.freecodecamp.org/espanol/news/p/b04df365-2443-4746-86b3-d6a9aa3a44b0/javascript-array-foreach-tutorial-how-to-iterate-through-elements-in-an-array">JavaScript Array.forEach() Tutorial - How to Iterate Through Elements in an Array</a><br><strong><strong>Traducido y adaptado por</strong>:</strong> <a href="https://twitter.com/jorgettor">Jorge Torres</a></p><p>En JavaScript, con frecuencia te verás en necesidad de iterar a través de una colección de arreglos y ejecutar un método callback por cada una de las iteraciones. Y para realizarlo hay un método muy útil que los desarrolladores de JavaScript típicamente utilizan: el método <code>forEach()</code>.</p><p>El método <code>forEach()</code> llama a una &nbsp;función callback específica una vez por cada elemento sobre el que itera dentro de un arreglo. Al igual que otros iteradores de arreglos tales como <code>map</code> y <code>filter</code>, la función callback puede recibir tres parámetros.</p><ul><li>El elemento actual: Este es el elemento del arreglo por el cual se está haciendo la iteración.</li><li>Su índice: Este es el índice de la posición que tiene el elemento dentro del arreglo.</li><li>El arreglo objetivo: Este es el arreglo por el cual se está haciendo la iteración.</li></ul><p>El método <code>forEach</code> no regresa un nuevo arreglo al igual que lo hacen otros iteradores tal como &nbsp;<code>filter</code>, <code>map</code> y <code>sort</code>. En cambio, el método devuelve el valor &nbsp;<code>undefined</code> por sí solo. Por lo tanto no se puede encadenar como los otros métodos.</p><p>Otra cosa acerca de <code>forEach</code> es que no puedes terminar el bucle (con la instrucción break) o hacerlo saltarse una iteración (con la sentencia continue). En otras palabras, no lo puedes controlar.</p><p>La única manera de finalizar un bucle <code>forEach</code> es incluyendo una excepción dentro de la función callback. No te preocupes, pronto veremos todo esto en la práctica.</p><h2 id="como-usar-el-m-todo-foreach-en-javascript"><strong>Como usar el método </strong><code><strong>forEach()</strong></code><strong> en JavaScript</strong></h2><p>Imagina que un grupo de estudiantes hacen una fila para el pase de lista de rutina. El coordinador de la clase se mueve a través de la fila y dice el nombre de cada uno de los estudiantes mientras marca si están presentes o ausentes.</p><p>Es importante hacer mención que el coordinador no cambia el orden de los estudiantes en la fila. También los mantiene en la misma fila después de terminar el pase de lista. Todo lo que realiza es una acción (su inspección) en cada uno de ellos.</p><p>En los siguientes ejemplos, teniendo en mente este escenario, veremos como puedes utilizar el método <code>forEach</code> para resolver problemas de la vida real con JavaScript.</p><h2 id="ejemplos-del-m-todo-foreach-en-javascript"><strong>Ejemplos del método </strong><code><strong>forEach()</strong></code><strong> en JavaScript</strong></h2><h3 id="como-remover-el-primer-n-mero-impar-en-un-arreglo-con-foreach-"><strong>Como remover el primer número impar en un arreglo con &nbsp;</strong><code><strong>forEach()</strong></code></h3><p>En este ejemplo, tenemos un arreglo que contiene un número impar en la primera posición y varios números pares después. Pero solo queremos números pares en este arreglo. Así que vamos a remover el número impar del arreglo usando el bucle <code>forEach()</code>:</p><pre><code class="language-js">let numeros = [3, 6, 8, 10, 12]
let impar = 3;

numeros.forEach(function(numero) {
    if (numero === impar) {
        numeros.shift() // 3 será borrado del arreglo
    }
})

console.log(numeros);

[6, 8, 10, 12] // Todos son pares!</code></pre><h3 id="como-acceder-a-la-propiedad-del-ndice-con-foreach-"><strong>Como acceder a la propiedad del índice con </strong><code><strong>forEach()</strong></code></h3><p>En este ejemplo, vamos a ejecutar la función &nbsp;<code>pasarLista</code> por cada &nbsp;uno de los estudiantes por los que se recorrió el bucle dentro del arreglo. La función <code>pasarLista</code> solamente registra en la consola una cadena perteneciente a cada uno de los estudiantes.</p><pre><code class="language-js">nombres = ["anna", "beth", "chris", "daniel", "ethan"]

function pasarLista(nombre, indice) {
    console.log(`Está el numero de estudiante ${indice + 1}  -${nombre} - presente? Sí!`)
    ;}

numeros.forEach((nombre, indice) =&gt; pasarLista(nombre, indice));


/*
"Está el número de estudiante 1  - anna presente? Sí!"
"Está el número de estudiante 2  - beth presente? Sí!"
"Está el número de estudiante 3  - chris presente? Sí!"
"Está el número de estudiante 4  - daniel presente? Sí!"
"Está el número de estudiante 5  - ethan presente? Sí!"
*/</code></pre><p>En este ejemplo, el nombre era la única información que teníamos sobre cada estudiante. Sin embargo, también queremos saber cuáles pronombres usa cada estudiante. En otras palabras, queremos definir una propiedad pronombre para cada estudiante. </p><p>Entonces vamos a definir a cada estudiante como un objeto con dos propiedades, nombre y pronombre:</p><pre><code class="language-js">nombres = [
    {nombre:"anna",pronombre: "ella"},
    {nombre: "beth",pronombre: "elle"},
    {nombre:"chris",pronombre: "él"},
    {nombre: "daniel",pronombre: "él"},
    {nombre: "ethan",pronombre: "él"}
]

function pasarLista(estudiante, indice) {
    console.log(`El número de estudiante  ${indice + 1} ${estudiante.nombre}. Está ${estudiante.pronombre} presente? Sí!`);
}

numeros.forEach((nombre, indice) =&gt; pasarLista(nombre, indice));

/*
"El número de estudiante 1 es anna. Está ella presente? Sí!"
"El número de estudiante 2 es beth. Está elle presente? Sí!"
"El número de estudiante 3 es chris. Está él presente? Sí!"
"El número de estudiante 4 es daniel. Está él presente? Sí!"
"El número de estudiante 5 es ethan. Está él presente? Sí!"
*/</code></pre><p>Estamos registrando &nbsp;en la consola el pase de lista de cada estudiante, luego realizamos una verificación para ver qué pronombre usa cada estudiante, y finalmente pasamos dinámicamente el pronombre correcto como parte de la cadena.</p><h3 id="como-copiar-un-arreglo-en-un-nuevo-arreglo-con-foreach-en-javascript"><strong>Como copiar un arreglo en un nuevo arreglo con <code>forEach()</code> en JavaScript</strong></h3><p>Después de tres años de estudio, es tiempo de que cada estudiante se gradúe. En nuestro JavaScript, vamos a definir dos arreglos: <code>aunEstudiante</code> y <code>yaGraduado</code>. Como probablemente adivinaste, <code>aunEstudiante</code> guarda el dato de los estudiantes antes de su graduación.</p><p>Posteriormente, el bucle <code>forEach</code> toma el dato de cada uno de los estudiantes y llama a la función &nbsp;<code>estudianteGraduado</code> en el.</p><p>En esta función construimos un objeto con dos propiedades: el nombre de estudiante y la posición en la que se graduó. Luego pasamos el nuevo objeto al arreglo <code>yaGraduado</code>. A este punto, el estudiante ya se ha graduado.</p><p>Este ejemplo también demuestra como puede usar el método <code>forEach()</code> para copiar un arreglo dentro de un nuevo arreglo.</p><pre><code class="language-js">let aunEstudiante = ["anna", "beth", "chris", "daniel", "ethan"]
let yaGraduado = []

function estudianteGraduado(estudiante, indice) {
    let objeto = { nombre: estudiante, posicion: indice + 1}
    yaGraduado[indice] = objeto
}

aunEstudiante.forEach((nombre, indice) =&gt; estudianteGraduado(nombre, indice));

console.log(yaGraduado);

/*
[
    { nombre: "anna", posición: 1}, 
    { nombre: "beth", posición: 2}, 
    { nombre: "chris", posición: 3}, 
    { nombre: "daniel", posición: 4}, 
    { nombre: "ethan", posicion: 5}]
]
*/</code></pre><h3 id="como-revisar-el-elemento-siguiente-en-un-arreglo-con-el-par-metro-arreglo"><strong>Como revisar el elemento siguiente en un arreglo con el parámetro &nbsp;arreglo </strong></h3><p>En algún momento, el profesor deberá verificar si la lista tiene a continuación un elemento en particular en la lista. En tal caso, el profesor deberá tener una visión amplia de toda la lista. De esa manera, puede saber si hay un próximo estudiante al cual llamar.</p><p>En nuestro JavaScript, podemos replicar esto porque la función callback también puede acceder al parámetro (el tercero) del <code>arreglo</code>. Este parámetro representa el arreglo objetivo, que es <code>nombre</code>.</p><p>Verificamos si hay un siguiente elemento (estudiante) en el arreglo. Si lo hay, pasamos la cadena <code>positivo</code> a la variable <code>siguienteElemento</code>. Si no hay ninguno, pasamos la cadena <code>negativo</code> a la variable. Luego para cada iteración, revisamos si <strong>ese</strong> estudiante es realmente el último.</p><pre><code class="language-js">nombres = ["anna", "beth", "chris", "daniel", "ethan"]

function pasarLista(nombre, indice, arreglo) {
    let siguienteElemento = indice + 1 &lt; arreglo.length ? "positivo" : "negativo"
    console.log(`Está el número de estudiante ${indice + 1}  - ${name} presente? Sí!. Hay un próximo estudiante? ${siguienteElemento}!`);
}

nombres.forEach((nombre, indice, arreglo) =&gt; pasarLista(nombre, indice, arreglo))

/*
"Está el número de estudiante 1 - anna presente? Sí!. Hay un próximo estudiante? positivo!"
"Está el número de estudiante 2 - beth presente? Sí!. Hay un próximo estudiante? positivo!"
"Está el número  de estudiante 3 - chris presente? Sí!. Hay un próximo estudiante? positivo!"
"Está el número  de estudiante 4 - daniel presente? Sí!. Hay un próximo estudiante? positivo!"
"Está el número  de estudiante 5 - ethan presente? Sí!. Hay un próximo estudiante? negativo!"
*/
</code></pre><h2 id="no-puedes-salir-del-bucle-foreach-en-su-lugar-utiliza-every-"><strong>No puedes salir del bucle <code>forEach</code>, en su lugar utiliza <code>every()</code> </strong></h2><p>¿Recuerdas cuando mencioné que, por su naturaleza, no puedes salir de un bucle <code>forEach</code>? Una vez iniciado, va a correr hasta que alcanza el último elemento del arreglo. Así que si insertas una declaración de <code>break</code>, te va a regresar un error de sintaxis, <code>SyntaxError</code>:</p><pre><code class="language-js">let numeros = [2, 4, 5, 8, 12]
let impar = 5;

numeros.forEach(function(numero) {
    if (numero === impar) {
        break; // oops, esto no va a funcionar!
    }
})

</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/08/illegal.png" class="kg-image" alt="illegal" width="600" height="400" loading="lazy"></figure><p>Normalmente preferirías salir del bucle una vez que consigues que tu código realice su objetivo antes de alcanzar el último elemento. En nuestro ejemplo de arriba, ya encontramos el número impar (5), así no que no había necesidad de seguir iterando sobre los siguientes elementos (8 y 12).</p><p>Si te deseas salir de un bucle en alguna condición, entonces te recomiendo utilizar cualquiera de los siguientes métodos.</p><ul><li>bucle <code>for</code> </li><li>bucle <a href="https://futurestud.io/tutorials/node-js-for-of-vs-for-in-loops"><code>for…of</code> o <code>for…in</code> </a></li><li><code>Array.some()</code></li><li><code>Array.every()</code></li><li><code>Array.find()</code></li></ul><p>Así es como puedes salirte de un bucle con <code>Array.every()</code>:</p><pre><code class="language-js">let numeros = [2, 4, 5, 8, 12]
let impar = 5;

numeros.every(numero =&gt; {
  if (numero == impar) {
    return false;
  }

  console.log(numero);
  
  return true;
});

// 2 4</code></pre><h2 id="cierre"><strong>Cierre</strong></h2><p>En este tutorial, te he presentado el método <code>forEach</code>, &nbsp;ilustré su funcionamiento con una simple analogía, y también te di algunos ejemplos prácticos de su uso en código de JavaScript. </p><p>Espero este artículo haya sido de tu utilidad.</p><p><strong>Si quieres aprender más sobre Desarrollo Web, no dudes en visitar mi<strong><strong><strong> </strong></strong></strong></strong><a href="https://ubahthebuilder.tech/"><strong><strong>Blog</strong></strong></a><strong><strong><strong><strong>.</strong></strong></strong></strong></p><p>Gracias por leer y espero verte pronto.</p><blockquote><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>P/S</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong>: Si estás aprendiendo JavaScript, he escrito un eBook que enseña 50 temas de JavaScript con notas digitales escritas a mano. &nbsp;<a href="https://ubahthebuilder.gumroad.com/l/js-50">Echale un vistazo aquí</a>.</blockquote> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
