<?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" version="2.0"><channel><title><![CDATA[gartnerleandro - Blog]]></title><description><![CDATA[Blog personal de un programador dispuesto a compartir su conocimiento y sus ideas con otros programadores.]]></description><link>https://blog.gartnerleandro.es</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1711401668726/Zpx_eIlEv.png</url><title>gartnerleandro - Blog</title><link>https://blog.gartnerleandro.es</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 23:55:05 GMT</lastBuildDate><atom:link href="https://blog.gartnerleandro.es/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Planifica tu Desarrollo para no fracasar]]></title><description><![CDATA[Estoy seguro de que alguna vez te ha pasado: tienes una idea que te parece la idea perfecta, y lo primero que haces es ir a GitHub, crear un repositorio y ponerte a programar. Lo sé porque a mí me pasa continuamente.
El problema es que, a medida que ...]]></description><link>https://blog.gartnerleandro.es/planifica-tu-desarrollo-para-no-fracasar</link><guid isPermaLink="true">https://blog.gartnerleandro.es/planifica-tu-desarrollo-para-no-fracasar</guid><category><![CDATA[planificación]]></category><category><![CDATA[planifica tus ideas]]></category><category><![CDATA[Programación]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Fri, 08 Aug 2025 13:39:16 GMT</pubDate><content:encoded><![CDATA[<p>Estoy seguro de que alguna vez te ha pasado: tienes una idea que te parece <em>la idea perfecta</em>, y lo primero que haces es ir a GitHub, crear un repositorio y ponerte a programar. Lo sé porque a mí me pasa continuamente.</p>
<p>El problema es que, a medida que pasan los días, empiezas a ver que la idea quizá no era tan buena. La dopamina inicial desaparece, la motivación se enfría y… al cabo de una semana tienes otro proyecto más abandonado en tu repositorio.</p>
<p>Es completamente normal que, en esa fase de “enamoramiento” de la idea, quieras ponerte a trabajar sin parar. Pero antes de llegar a ese punto, hay dos cosas clave que deberías tener en cuenta.</p>
<h2 id="heading-1-no-empieces-a-programar-el-mismo-dia">1. No empieces a programar el mismo día</h2>
<p>Muchas veces no pensamos más allá de la idea. No nos paramos a preguntarnos cuál será el público objetivo, cuánto tiempo nos llevará, cómo vamos a monetizar… porque todo eso nos parece aburrido. Lo que queremos es ponernos a programar y lanzar nuestra maravillosa idea.</p>
<p>El problema es que, si no la dejas madurar, corres el riesgo de dejarla tirada a mitad de camino.</p>
<hr />
<h2 id="heading-2-deja-que-la-idea-madure">2. Deja que la idea madure</h2>
<p>En mi caso, ahora uso <strong>Notion</strong> para madurar mis ideas (antes lo hacía en un simple Google Doc). Lo que hago es muy sencillo:</p>
<ol>
<li><p><strong>Apuntarla en cuanto se me ocurre.</strong> Aunque suene obvio, a veces no estamos en casa, no la anotamos en el móvil y al final… se nos olvida.</p>
</li>
<li><p><strong>Rellenar un pequeño cuestionario</strong> con preguntas clave:</p>
<ul>
<li><p>¿Qué problema resuelve?</p>
</li>
<li><p>¿Cómo lo resuelve?</p>
</li>
<li><p>¿Quiénes son los principales competidores?</p>
</li>
<li><p>¿Qué funcionalidades debe tener el primer MVP para validar la idea?</p>
</li>
<li><p>¿Qué tecnologías voy a utilizar?</p>
</li>
<li><p>¿Cuánto tiempo me llevará lanzar el MVP?</p>
</li>
</ul>
</li>
</ol>
<p>No tienes que responderlo todo el mismo día. Algunas respuestas, como la de competidores, requieren investigación. La idea es “bajar a tierra” el proyecto, para que cuando decidas seguir adelante lo hagas con un plan claro y una estimación realista.</p>
<p>💡 <strong>Ejemplo personal:</strong><br />Hace tiempo empecé un proyecto llamado <em>Ekko</em>, un gestor de gastos e ingresos. Me lancé a programar enseguida, pero pronto me topé con problemas que no había previsto. Además, descubrí que había una gran cantidad de competidores que ya ofrecían exactamente lo mismo. Con un análisis previo, me habría ahorrado mucho tiempo.</p>
<hr />
<h2 id="heading-3-valida-antes-de-programar">3. Valida antes de programar</h2>
<p>Antes de escribir una sola línea de código, reviso las stores (App Store y Google Play) para ver qué aplicaciones similares existen, cuántas descargas tienen y qué dicen las reseñas. Muchas veces, también le pido a Chat GPT que me ayude a buscar competidores por si se me escapa alguno.</p>
<p>Esto no solo sirve para evitar ideas saturadas, sino para encontrar huecos o problemas que otras apps no han resuelto bien.</p>
<hr />
<h2 id="heading-4-no-todo-es-programar">4. No todo es programar</h2>
<p>Aunque nos encante programar, una gran parte de un proyecto (sobre todo si trabajas solo) es <strong>analizar, planificar y gestionar</strong>. A mí, personalmente, esta parte me gusta mucho menos, pero es clave para que el proyecto salga adelante.</p>
<p>Nuestro tiempo es limitado, y es fácil desmotivarse si no vemos resultados claros. En mi caso, lo que más me agota es la burocracia de publicar en las stores: formularios eternos, enlaces a políticas de privacidad, términos y condiciones…</p>
<p>Todos estos factores hay que tenerlos en cuenta antes de invertir meses en una idea que quizá no compense.</p>
<hr />
<h2 id="heading-5-usa-herramientas-que-te-ayuden-a-avanzar">5. Usa herramientas que te ayuden a avanzar</h2>
<p>En mi flujo uso:</p>
<ul>
<li><p><strong>Notion</strong> → para anotar y madurar ideas.</p>
</li>
<li><p><strong>Trello</strong> → para organizar el proyecto cuando ya está definido y así avanzar de forma ordenada.</p>
</li>
</ul>
<p>Si quieres usar la misma plantilla que yo para aterrizar tus ideas, aquí te la dejo: <a target="_blank" href="https://messy-wood-cec.notion.site/Aterriza-tu-idea-2493e2ddab158087b202c860185a09fd">Clona mi plantilla en Notion</a></p>
<hr />
<h2 id="heading-6-centrate-en-ideas-que-merezcan-tu-tiempo">6. Céntrate en ideas que merezcan tu tiempo</h2>
<p>Con todo esto no pretendo desanimarte, al contrario. Quiero que enfoques tu energía en ideas que realmente valgan la pena.</p>
<p>La próxima vez que se te ocurra algo increíble, no te lances de cabeza al código. Dale un tiempo para madurar, investiga, analiza y crea un pequeño plan. Si pasado ese proceso todavía te entusiasma… entonces lánzate con todo.</p>
<p>💬 Y ahora te pregunto:<br />¿Tienes alguna idea que estés a punto de empezar?<br />Ponla a prueba con estas preguntas y cuéntame en los comentarios si ha pasado el filtro.</p>
]]></content:encoded></item><item><title><![CDATA[Cómo gestionar usuarios en Supabase]]></title><description><![CDATA[Supabase nos facilita la autenticación de usuarios mediante su tabla auth.users. Sin embargo, para almacenar información adicional del usuario (como nombre, avatar, etc.), es recomendable crear una tabla personalizada, por ejemplo, public.profiles, y...]]></description><link>https://blog.gartnerleandro.es/como-gestionar-usuarios-en-supabase</link><guid isPermaLink="true">https://blog.gartnerleandro.es/como-gestionar-usuarios-en-supabase</guid><category><![CDATA[supabase auth]]></category><category><![CDATA[supabase users]]></category><category><![CDATA[user management supabase]]></category><category><![CDATA[supabase]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Wed, 07 May 2025 07:09:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1746601653888/36dcd560-3bde-4ebf-8c18-85cc53aa4cf5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Supabase nos facilita la autenticación de usuarios mediante su tabla <code>auth.users</code>. Sin embargo, para almacenar información adicional del usuario (como nombre, avatar, etc.), es recomendable crear una tabla personalizada, por ejemplo, <code>public.profiles</code>, y vincularla con <code>auth.users</code>. Esto nos permite mantener una estructura clara y acceder fácilmente a los datos desde el cliente.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text">Los siguientes pasos se pueden hacer desde la interfaz visual de Supabase pero te lo estaré mostrando con código porque es más sencillo de explicarlo de esta forma en el post.</div>
</div>

<h2 id="heading-creando-la-tabla-publicprofiles">Creando la tabla <code>public.profiles</code></h2>
<p>Primero, definimos la tabla <code>profiles</code> en el esquema <code>public</code>, estableciendo una relación con <code>auth.users</code> mediante una clave foránea:</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">La creación de la siguiente tabla es solo un ejemplo práctico para el post, esta tabla puede tener todas las columnas que quieras o necesites, lo importante es que el <code>id</code> esté conectado con el <code>auth.users</code>.</div>
</div>

<pre><code class="lang-sql"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> public.profiles (
  <span class="hljs-keyword">id</span> <span class="hljs-keyword">uuid</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">null</span> <span class="hljs-keyword">references</span> auth.users <span class="hljs-keyword">on</span> <span class="hljs-keyword">delete</span> <span class="hljs-keyword">cascade</span>,
  username <span class="hljs-built_in">text</span>,
  full_name <span class="hljs-built_in">text</span>,
  avatar_url <span class="hljs-built_in">text</span>,
  primary <span class="hljs-keyword">key</span> (<span class="hljs-keyword">id</span>)
);

<span class="hljs-keyword">alter</span> <span class="hljs-keyword">table</span> public.profiles <span class="hljs-keyword">enable</span> <span class="hljs-keyword">row</span> <span class="hljs-keyword">level</span> <span class="hljs-keyword">security</span>;
</code></pre>
<p>Aquí, <code>id</code> es la clave primaria y referencia al <code>id</code> de <code>auth.users</code>. El uso de <code>on delete cascade</code> asegura que, si un usuario se elimina de <code>auth.users</code>, su perfil asociado también se elimine automáticamente.</p>
<h2 id="heading-configurando-las-politicas-de-seguridad-rls">Configurando las políticas de seguridad (RLS)</h2>
<p>Para proteger los datos y controlar el acceso, activamos las políticas de seguridad a nivel de fila (Row Level Security) y definimos las siguientes políticas:</p>
<pre><code class="lang-sql"><span class="hljs-comment">-- Permitir que cualquier usuario autenticado inserte su propio perfil</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">policy</span> <span class="hljs-string">"Users can insert their own profile."</span>
  <span class="hljs-keyword">on</span> <span class="hljs-keyword">profiles</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">insert</span>
  <span class="hljs-keyword">with</span> <span class="hljs-keyword">check</span> (auth.uid() = <span class="hljs-keyword">id</span>);

<span class="hljs-comment">-- Permitir que los usuarios actualicen su propio perfil</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">policy</span> <span class="hljs-string">"Users can update own profile."</span>
  <span class="hljs-keyword">on</span> <span class="hljs-keyword">profiles</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">update</span>
  <span class="hljs-keyword">using</span> (auth.uid() = <span class="hljs-keyword">id</span>);

<span class="hljs-comment">-- Permitir que los usuarios vean su propio perfil</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">policy</span> <span class="hljs-string">"Users can view their own profile."</span>
  <span class="hljs-keyword">on</span> <span class="hljs-keyword">profiles</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">select</span>
  <span class="hljs-keyword">using</span> (auth.uid() = <span class="hljs-keyword">id</span>);
</code></pre>
<p>Estas políticas garantizan que cada usuario solo pueda acceder y modificar su propio perfil. El contenido que está entre comillas (<code>““</code>) es una descripción de la política, puedes poner lo que quieras ahí para poder identificarla mejor en el futuro.</p>
<h2 id="heading-automatizando-la-creacion-de-perfiles-con-triggers">Automatizando la creación de perfiles con <code>triggers</code></h2>
<p>Para que cada vez que un usuario se registre se cree automáticamente su perfil en <code>public.profiles</code>, utilizamos una función y un trigger:</p>
<pre><code class="lang-sql"><span class="hljs-comment">-- Función que inserta un nuevo perfil al registrarse un usuario</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">or</span> <span class="hljs-keyword">replace</span> <span class="hljs-keyword">function</span> public.handle_new_user()
<span class="hljs-keyword">returns</span> <span class="hljs-keyword">trigger</span>
<span class="hljs-keyword">language</span> plpgsql
<span class="hljs-keyword">security</span> definer
<span class="hljs-keyword">set</span> search_path = <span class="hljs-keyword">public</span>
<span class="hljs-keyword">as</span> $$
<span class="hljs-keyword">begin</span>
  <span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> public.profiles (<span class="hljs-keyword">id</span>, username, full_name, avatar_url) <span class="hljs-comment">-- Aquí puedes agregar o quitar todos los campos que tengas en tu tabla</span>
  <span class="hljs-keyword">values</span> (
    new.id,
    new.raw_user_meta_data -&gt;&gt; <span class="hljs-string">'username'</span>,
    new.raw_user_meta_data -&gt;&gt; <span class="hljs-string">'full_name'</span>,
    new.raw_user_meta_data -&gt;&gt; <span class="hljs-string">'avatar_url'</span>
  ); <span class="hljs-comment">-- El orden de estos campos es importante, porque el valor se insertará en la tabla correspondiente al orden definido en el insert de arriba</span>
  return new;
<span class="hljs-keyword">end</span>;
$$;

<span class="hljs-comment">-- Trigger que ejecuta la función después de insertar un nuevo usuario</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">trigger</span> on_auth_user_created
<span class="hljs-keyword">after</span> <span class="hljs-keyword">insert</span> <span class="hljs-keyword">on</span> auth.users
<span class="hljs-keyword">for</span> <span class="hljs-keyword">each</span> <span class="hljs-keyword">row</span> <span class="hljs-keyword">execute</span> <span class="hljs-keyword">procedure</span> public.handle_new_user();
</code></pre>
<p>Con esto, cada vez que un nuevo usuario se registre, se creará automáticamente una entrada en <code>public.profiles</code> con los datos proporcionados.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Puedes ver los <code>triggers</code> y <code>funciones</code> creados en el editor visual de Supabase si accedes desde el menú lateral a <code>database &gt; functions</code> o <code>database &gt; triggers</code>.</div>
</div>

<h2 id="heading-registrando-usuarios-con-metadata-adicional">Registrando usuarios con <code>metadata</code> adicional</h2>
<p>Al registrar un usuario, podemos incluir información adicional en el campo <code>data</code>, que luego se almacenará en <code>raw_user_meta_data</code> de <code>auth.users</code> y se utilizará en la función del trigger:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> { data, error } = <span class="hljs-keyword">await</span> supabase.auth.signUp({
  <span class="hljs-attr">email</span>: <span class="hljs-string">'usuario@example.com'</span>,
  <span class="hljs-attr">password</span>: <span class="hljs-string">'contraseña_segura'</span>,
  <span class="hljs-attr">options</span>: {
    <span class="hljs-attr">data</span>: {
      <span class="hljs-attr">username</span>: <span class="hljs-string">'usuario123'</span>,
      <span class="hljs-attr">full_name</span>: <span class="hljs-string">'Nombre Apellido'</span>,
      <span class="hljs-attr">avatar_url</span>: <span class="hljs-string">'https://example.com/avatar.png'</span>
    }
  }
});
</code></pre>
<p>De esta manera, los datos adicionales se insertarán automáticamente en la tabla <code>profiles</code> al momento del registro. Para que los datos se almacenen en la tabla <code>profiles</code> deberás asegurarte de que la función <code>handle_new_user</code> que hemos creado antes lea los datos de <code>raw_user_meta_data</code> y los inserte en una columna de la tabla <code>profiles</code>, de lo contrario estarás pasando los metadatos pero no se guardarán en tu tabla.</p>
<hr />
<p>Si tienes alguna duda o quieres profundizar en algún aspecto, no dudes en dejar un comentario o contactarme.</p>
]]></content:encoded></item><item><title><![CDATA[Cómo Funcionan las Apps Móviles]]></title><description><![CDATA[En la era digital actual, las aplicaciones móviles se han convertido en una parte integral de nuestras vidas. Desde hacer compras online hasta mantenerse en contacto con amigos y familiares, las aplicaciones hacen todo más fácil y accesible. Sin emba...]]></description><link>https://blog.gartnerleandro.es/como-funcionan-las-apps-moviles</link><guid isPermaLink="true">https://blog.gartnerleandro.es/como-funcionan-las-apps-moviles</guid><category><![CDATA[desarrollo de apps]]></category><category><![CDATA[desarrollo movil]]></category><category><![CDATA[programación de apps]]></category><category><![CDATA[programación apps]]></category><category><![CDATA[Programación]]></category><category><![CDATA[React Native]]></category><category><![CDATA[apps]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Fri, 09 Aug 2024 07:00:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1723143207400/a030a9b6-78be-4db2-b9db-a7d251eeecfe.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En la era digital actual, las aplicaciones móviles se han convertido en una parte integral de nuestras vidas. Desde hacer compras online hasta mantenerse en contacto con amigos y familiares, las aplicaciones hacen todo más fácil y accesible. Sin embargo, entender cómo funcionan estas aplicaciones puede ser un desafío.</p>
<h2 id="heading-diferencias-entre-aplicacion-android-e-ios">Diferencias entre aplicación Android e iOS</h2>
<p>Las aplicaciones Android e iOS son diseñadas para funcionar en diferentes sistemas operativos, lo que significa que tienen diferentes requisitos técnicos y de diseño. Las aplicaciones de Android se desarrollan generalmente en Java o Kotlin, mientras que las aplicaciones de iOS se desarrollan en Swift u Objective-C. Además, las guías de diseño para cada plataforma también difieren, lo que puede afectar la apariencia y la funcionalidad de la aplicación.</p>
<h2 id="heading-diferencias-entre-aplicacion-nativa-y-multi-plataforma">Diferencias entre aplicación nativa y multi plataforma</h2>
<p>Una aplicación nativa está diseñada para una plataforma específica, ya sea Android o iOS. Esto permite que la aplicación aproveche al máximo las características y capacidades del sistema operativo. Por otro lado, una aplicación multi plataforma está diseñada para funcionar en múltiples sistemas operativos con un solo código base. Aunque esto puede ahorrar tiempo y recursos, a veces puede resultar en una menor optimización y rendimiento.</p>
<h2 id="heading-introduccion-a-react-native">Introducción a React Native</h2>
<h3 id="heading-que-es">¿Qué es?</h3>
<p>React Native es un framework de desarrollo de aplicaciones móviles que permite a los desarrolladores crear aplicaciones multi plataforma utilizando JavaScript y React.</p>
<h3 id="heading-porque-usarlo">¿Porqué usarlo?</h3>
<p>Utilizar React Native puede ofrecer varias ventajas:</p>
<ul>
<li><p><strong>2x1 en plataformas</strong>: Un solo código base para ambas plataformas, lo que ahorra tiempo y recursos.</p>
</li>
<li><p><strong>Menos bugs</strong>: Menos código significa menos posibilidades de errores y problemas. Además de que si tienen un problema en tu código arreglando este en un único lugar ya solucionas el problema en ambas plataformas.</p>
</li>
<li><p><strong>Menos recursos</strong>: Al no tener que mantener dos bases de código separadas, se requiere menos esfuerzo y recursos.</p>
</li>
</ul>
<h3 id="heading-alternativas">Alternativas</h3>
<p>Una alternativa popular a React Native es Flutter, un framework de desarrollo de aplicaciones móviles creado por Google. Flutter también permite el desarrollo multi plataforma, pero utiliza el lenguaje de programación Dart en lugar de JavaScript.</p>
<h2 id="heading-calidad-de-las-aplicaciones">Calidad de las aplicaciones</h2>
<p>En el mundo del desarrollo de aplicaciones móviles, una de las preguntas más comunes es si es posible crear aplicaciones de alta calidad utilizando frameworks multiplataforma como React Native. La respuesta corta es sí, pero voy a profundizar un poco más para entender por qué y cómo.</p>
<h3 id="heading-ejemplos-de-aplicaciones-exitosas-con-react-native">Ejemplos de aplicaciones exitosas con React Native</h3>
<p>Varias aplicaciones de alto perfil han sido desarrolladas utilizando React Native, demostrando que es posible crear aplicaciones robustas y de alto rendimiento con este framework. Aquí algunos ejemplos:</p>
<ul>
<li><p><strong>Facebook</strong>: La propia aplicación de Facebook utiliza React Native en diversas partes de su interfaz, lo que les ha permitido desplegar nuevas funciones de manera más rápida y eficiente.</p>
</li>
<li><p><strong>Instagram</strong>: Instagram ha integrado React Native para características específicas de su aplicación, logrando una mayor velocidad de desarrollo y una experiencia de usuario fluida.</p>
</li>
<li><p><strong>Airbnb</strong>: Aunque Airbnb finalmente decidió volver a las aplicaciones nativas, durante un tiempo considerable, utilizaron React Native para desarrollar nuevas funciones rápidamente y probar ideas.</p>
</li>
<li><p><strong>Tesla</strong>: La aplicación móvil de Tesla, utilizada para controlar sus vehículos, también fue desarrollada con React Native, demostrando que incluso las aplicaciones más complejas pueden beneficiarse de este enfoque.</p>
</li>
</ul>
<h3 id="heading-por-que-react-native">¿Por qué React Native?</h3>
<p>React Native no es el único framework multiplataforma disponible, pero se ha convertido en uno de los más populares debido a varias razones:</p>
<ul>
<li><p><strong>Desarrollado por Facebook</strong>: La solidez y el respaldo de una gran empresa como Facebook le da credibilidad.</p>
</li>
<li><p><strong>Comunidad activa</strong>: Una comunidad grande y activa significa más recursos, bibliotecas y soporte disponibles.</p>
</li>
<li><p><strong>Componentes reutilizables</strong>: La capacidad de crear componentes reutilizables acelera significativamente el desarrollo.</p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusión</h3>
<p>En resumen, sí, es completamente posible crear aplicaciones móviles de alta calidad utilizando frameworks multiplataforma como React Native. A medida que la tecnología continúa avanzando, estos frameworks solo mejorarán, ofreciendo aún más ventajas y reduciendo las limitaciones actuales. Con ejemplos de éxito como Facebook, Instagram y Tesla, está claro que las aplicaciones multiplataforma pueden ser tan buenas como las nativas, si no mejores, en ciertos aspectos.</p>
<p>Si estás considerando desarrollar una aplicación móvil, React Native es definitivamente una opción que vale la pena explorar.</p>
<p>Espero que este post te haya servido para que tengas una comprensión más clara de cómo funcionan las aplicaciones móviles y las diferentes opciones disponibles para su desarrollo.</p>
<p>Si te interesa saber de más aplicaciones desarrolladas con React Native puedes verlas <a target="_blank" href="https://reactnative.dev/showcase">aquí</a> y te dejo también dos aplicaciones que yo mismo he desarrollado con este framework <a target="_blank" href="https://wiset.es/">Wiset</a> y <a target="_blank" href="https://backpaper.app/">Backpaper</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Introducción al "Control Flow" en JavaScript para Principiantes]]></title><description><![CDATA[En el post anterior sobre JavaScript te expliqué conceptos básicos como las variables, los tipos de datos, los condicionales, los operadores, las funciones… Ahora que ya sabes estos conceptos de JavaScript es importante que entiendas cómo se ejecuta ...]]></description><link>https://blog.gartnerleandro.es/introduccion-al-control-flow-en-javascript-para-principiantes</link><guid isPermaLink="true">https://blog.gartnerleandro.es/introduccion-al-control-flow-en-javascript-para-principiantes</guid><category><![CDATA[flujo de control js]]></category><category><![CDATA[javascript principiantes]]></category><category><![CDATA[primeros pasos con javascript]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[aprender javascript]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Mon, 08 Jul 2024 11:33:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1720129258502/6572e172-c6b3-4c2a-b384-f4bcf799a8c9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En el <a target="_blank" href="https://blog.gartnerleandro.es/aprende-javascript-desde-cero-introduccion-y-primeros-pasos">post anterior</a> sobre JavaScript te expliqué conceptos básicos como las variables, los tipos de datos, los condicionales, los operadores, las funciones… Ahora que ya sabes estos conceptos de JavaScript es importante que entiendas cómo se ejecuta este código.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">🗒</div>
<div data-node-type="callout-text">Los comentarios (<code>//</code>) después de cada ejemplo de código muestran el resultado de su ejecución.</div>
</div>

<p>El <em>Control Flow o Flujo de control</em> en JavaScript es el orden en el que el intérprete de JavaScript (generalmente en el navegador) ejecuta las declaraciones de tu código. Si en tu código no existen declaraciones que alteren el flujo, este se ejecuta de principio a fin (de arriba hacia abajo) línea a línea. Las estructuras de control se utilizan para:</p>
<ol>
<li><p>Determinar si un código debe ejecutarse o no.</p>
</li>
<li><p>Determinar si un código debe ejecutarse repetidas veces.</p>
</li>
<li><p>Determinar si se interrumpe una ejecución.</p>
</li>
</ol>
<h2 id="heading-condicionales">Condicionales</h2>
<p>Estas instrucciones van a determinar si el código se debe ejecutar en función a una o varias condiciones. Para que el código de la condición se ejecute, el resultado del conjunto de condiciones es <code>true</code> , de lo contrario, el código será omitido.</p>
<h3 id="heading-ifelse">if..else</h3>
<p>En la publicación anterior te expliqué muy por encima este tipo de condicionales. La declaración <code>if</code> evalúa las condiciones dentro de los paréntesis que la siguen, si la condición o conjunto de condiciones dentro de este paréntesis da como resultado <code>true</code> , ejecutará el código dentro del bloque <code>{ }</code>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> name = <span class="hljs-string">"Leandro"</span>;

<span class="hljs-keyword">if</span> (name === <span class="hljs-string">"Leandro"</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Leandro"</span>);
}
<span class="hljs-comment">// "Tu nombre es Leandro"</span>
</code></pre>
<p>Si la condición entre paréntesis da como resultado <code>false</code> el código dentro del bloque será ignorado.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> name = <span class="hljs-string">"Leandro"</span>;

<span class="hljs-keyword">if</span> (name === <span class="hljs-string">"Pedro"</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Pedro"</span>);
}
</code></pre>
<p>El condicional <code>if</code> permite agregar a su declaración la palabra clave <code>else</code> , esta especifica el código que se ejecutará si la condición dentro del <code>if</code> es <code>false</code> .</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> name = <span class="hljs-string">"Leandro"</span>;

<span class="hljs-keyword">if</span> (name === <span class="hljs-string">"Pedro"</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Pedro"</span>);
} <span class="hljs-keyword">else</span> {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"No sé cuál es tu nombre"</span>);
}
<span class="hljs-comment">// "No sé cuál es tu nombre"</span>
</code></pre>
<p>Además, el <code>else</code> te permite encadenar otra declaraciones <code>if</code> .</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> name = <span class="hljs-string">"Leandro"</span>;

<span class="hljs-keyword">if</span> (name === <span class="hljs-string">"Pedro"</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Pedro"</span>);
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (name === <span class="hljs-string">"Leandro"</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Leandro"</span>);
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (name === <span class="hljs-string">"Juan"</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Juan"</span>);
} <span class="hljs-keyword">else</span> {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"No sé cuál es tu nombre"</span>);
}
<span class="hljs-comment">// "Tu nombre es Leandro"</span>
</code></pre>
<p>En caso de que algunas de estas condiciones sea <code>true</code> se ejecutará el código dentro del bloque de dicha condición y el resto será ignorado.</p>
<h3 id="heading-operador-ternario">Operador ternario</h3>
<p>Este operador es una abreviatura de un <code>if..else</code> y se utiliza para ejecutar un código u otro en función de si la condición es <code>true</code> o <code>false</code> . Al contrario que el <code>if..else</code> este operador no se puede extender.</p>
<p>Este operador se forma con tres operandos:</p>
<ul>
<li><p>La condición o conjunto de condiciones que se evaluará seguida de un signo <code>?</code></p>
</li>
<li><p>El código que se ejecutará si la condición da como resultado <code>true</code> seguida de <code>:</code></p>
</li>
<li><p>La expresión que se ejecutará si la condición se evalúa como <code>false</code></p>
</li>
</ul>
<p>Estos tres operandos son necesarios obligatoriamente para formar el operador ternario.</p>
<p>El uso más común que se le da a este operador es para establecer un valor en una variable en función de una condición.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> age = <span class="hljs-number">21</span>;
<span class="hljs-keyword">const</span> esMayorDeEdad = age &gt; <span class="hljs-number">18</span> ? <span class="hljs-literal">true</span> : <span class="hljs-literal">false</span>;
<span class="hljs-keyword">const</span> puedePasar = esMayorDeEdad ? <span class="hljs-string">"Si, puede pasar"</span> : <span class="hljs-string">"No, es menor de edad"</span>;

<span class="hljs-built_in">console</span>.log(esMayorDeEdad); <span class="hljs-comment">// true</span>
<span class="hljs-built_in">console</span>.log(puedePasar ); <span class="hljs-comment">// Si, puede pasar</span>
</code></pre>
<h3 id="heading-switchcase"><strong>switch..case</strong></h3>
<p>Esta sentencia se utiliza para comparar el valor de una expresión con una lista de valores potenciales definidos. La sintaxis de esta expresión empieza con la palabra reservada <code>switch</code> seguida de la expresión entre paréntesis. A continuación se abren una llaves <code>{ }</code> y dentro de estas se agregará la palabra reservada <code>case</code> seguida del potencial valor y <code>:</code> . Si el valor de la expresión coincide con algún <code>case</code>, se ejecutará cualquier declaración de código que esté después de los <code>:</code> de ese case.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> name = <span class="hljs-string">"Leandro"</span>;

<span class="hljs-keyword">switch</span> (name) {
    <span class="hljs-keyword">case</span> <span class="hljs-string">"Pedro"</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Pedro"</span>);
    <span class="hljs-keyword">case</span> <span class="hljs-string">"Leandro"</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Leandro"</span>);
    <span class="hljs-keyword">case</span> <span class="hljs-string">"Juan"</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Juan"</span>);
    <span class="hljs-keyword">default</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"No sé cuál es tu nombre"</span>);
}
<span class="hljs-comment">// "Tu nombre es Leandro"</span>
<span class="hljs-comment">// "Tu nombre es Juan"</span>
<span class="hljs-comment">// "No sé cuál es tu nombre"</span>
</code></pre>
<p>Al final de los <code>case</code> se suele agregar un valor <code>default</code> por si ningunos de los valores anteriores cumplen la condición.</p>
<p>Un error común al utilizar <code>switch..case</code> es que, después de encontrar una coincidencia, el intérprete de JavaScript ejecuta <strong>cualquier declaración</strong> que siga al <code>case</code> coincidente, incluso aquellas que estén dentro de otras cláusulas case. Por tanto, el resultado del código anterior sería el siguiente:</p>
<pre><code class="lang-jsx"><span class="hljs-comment">// Tu nombre es Leandro</span>
<span class="hljs-comment">// Tu nombre es Juan</span>
<span class="hljs-comment">// No sé cuál es tu nombre</span>
</code></pre>
<p>Para evitar esto, es necesario utilizar la palabra reservada <code>break</code> al final de la declaración de cada case. Esto detendrá la ejecución del <code>switch</code> .</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> name = <span class="hljs-string">"Leandro"</span>;

<span class="hljs-keyword">switch</span> (name) {
    <span class="hljs-keyword">case</span> <span class="hljs-string">"Pedro"</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Pedro"</span>);
        <span class="hljs-keyword">break</span>;
    <span class="hljs-keyword">case</span> <span class="hljs-string">"Leandro"</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Leandro"</span>);
        <span class="hljs-keyword">break</span>;
    <span class="hljs-keyword">case</span> <span class="hljs-string">"Juan"</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Tu nombre es Juan"</span>);
        <span class="hljs-keyword">break</span>;
    <span class="hljs-keyword">default</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"No sé cuál es tu nombre"</span>);
        <span class="hljs-keyword">break</span>;
}
<span class="hljs-comment">// "Tu nombre es Leandro"</span>
</code></pre>
<h2 id="heading-bucles">Bucles</h2>
<p>Los bucles permiten repetir un conjunto de declaraciones (bloque de código) mientras se cumpla una condición o hasta que se cumpla una condición, depende del tipo de bucle. Estos interrumpen el flujo normal de arriba hacia abajo hasta que este finalice, una vez finaliza, la ejecución continúa.</p>
<p>Algunos ejemplos de uso suelen ser buscar un elemento en un array o generar elementos en el HTML en base a un listado de datos.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> usuarios = [<span class="hljs-string">"Leandro"</span>, <span class="hljs-string">"Pedro"</span>, <span class="hljs-string">"Juan"</span>];

<span class="hljs-keyword">for</span>(<span class="hljs-keyword">let</span> usuario <span class="hljs-keyword">of</span> usuarios) {
    <span class="hljs-built_in">console</span>.log(usuario);
}

<span class="hljs-comment">// Leandro</span>
<span class="hljs-comment">// Pedro</span>
<span class="hljs-comment">// Juan</span>
</code></pre>
<h3 id="heading-while">while</h3>
<p>Para definir este tipo de bucles se utiliza la palabra reservada <code>while</code> seguida de paréntesis <code>( )</code> con la condición en su interior. Si la condición se evalúa como <code>true</code> se ejecutará el bloque de código dentro del bloque <code>{ }</code> , de lo contrario, el bucle nunca se ejecuta. Después de cada iteración (ejecución), la condición se vuelve a evaluar, si aun es <code>true</code> , se vuelve a repetir el bucle.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> contador = <span class="hljs-number">0</span>;

<span class="hljs-keyword">while</span> (contador &lt; <span class="hljs-number">3</span>) {
  contador = contador + <span class="hljs-number">1</span>;
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Loop <span class="hljs-subst">${contador}</span>`</span>);
}

<span class="hljs-comment">// "Loop 1"</span>
<span class="hljs-comment">// "Loop 2"</span>
</code></pre>
<p>Si el intérprete encuentra una declaración <code>continue</code> en un bucle de este tipo, detiene esa iteración, vuelve a evaluar la condición, y si es posible, continúa el bucle.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> contador = <span class="hljs-number">0</span>;

<span class="hljs-keyword">while</span>(contador &lt;= <span class="hljs-number">5</span>) {
  contador = contador + <span class="hljs-number">1</span>;

  <span class="hljs-keyword">if</span> (contador === <span class="hljs-number">3</span>) {
    <span class="hljs-keyword">continue</span>;
  }

  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Loop <span class="hljs-subst">${contador}</span>`</span>);
}

<span class="hljs-comment">// "Loop 1"</span>
<span class="hljs-comment">// "Loop 2"</span>
<span class="hljs-comment">// "Loop 4"</span>
<span class="hljs-comment">// "Loop 5"</span>
</code></pre>
<p>Si el intérprete encuentra una declaración <code>break</code> en un bucle <code>while</code> , se detiene la iteración y no se vuelve a evaluar la condición, lo que permite que el intérprete continúe con el código que esté después del bucle.</p>
<p>Es importante tener en cuenta que si la condición no se deja de cumplir nunca, es decir, siempre devuelve <code>true</code> , el bucle continuará de forma indefinida, a esto se le conoce como <code>bucle infinito.</code> Este es considerado un error de programación y puede hacer que la ejecución del código se bloquee de forma indefinida y causar fallos en la pestaña del navegador.</p>
<h3 id="heading-dowhile">do..while</h3>
<p>El bucle <code>do..while</code> es una variante del bucle <code>while</code>, pero con una diferencia clave: el bloque de código se ejecuta al menos una vez antes de que se evalúe la condición.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> contador = <span class="hljs-number">0</span>;

<span class="hljs-keyword">do</span> {
  contador = contador + <span class="hljs-number">1</span>;
  <span class="hljs-built_in">console</span>.log( <span class="hljs-string">`Loop <span class="hljs-subst">${ contador }</span>`</span> );
} <span class="hljs-keyword">while</span> (contador &lt; <span class="hljs-number">3</span>);

<span class="hljs-comment">// "Loop 1"</span>
<span class="hljs-comment">// "Loop 2"</span>
<span class="hljs-comment">// "Loop 3"</span>
</code></pre>
<h3 id="heading-for">for</h3>
<p>El bucle <code>for</code> es otro tipo de bucle que se utiliza para iterar sobre una secuencia de valores, como elementos de un array. La sintaxis del <code>for</code> incluye tres partes: la inicialización, la condición y la expresión final, todas separadas por punto y coma.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> usuarios = [<span class="hljs-string">"Leandro"</span>, <span class="hljs-string">"Pedro"</span>, <span class="hljs-string">"Juan"</span>];

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt;= usuarios.length; i++) {
  <span class="hljs-built_in">console</span>.log(usuarios[i]);
}

<span class="hljs-comment">// "Leandro"</span>
<span class="hljs-comment">// "Pedro"</span>
<span class="hljs-comment">// "Juan"</span>
</code></pre>
<p>La primera expresión inicializa una variable que actúa como un contador. Esta expresión se evalúa una vez, antes de la primera iteración del bucle. Estas variables pueden tener cualquier nombre válido, pero con frecuencia se las llama <code>i</code> para "iteración" o "índice".</p>
<p>La siguiente expresión es la condición que indica si el bucle debe ejecutarse. Se usa con mayor frecuencia a fin de establecer un límite superior para el contador de iteraciones. Si la condición no se evalúa en un principio como <code>true</code>, el cuerpo del bucle no se ejecuta.</p>
<p>La última expresión se ejecuta al final de cada iteración a través del bucle. Por lo general, se usa para aumentar el identificador en uno.</p>
<h3 id="heading-forof">for...of</h3>
<p>El bucle <code>for...of</code> se utiliza para iterar sobre objetos iterables (como arrays, strings, etc.). Este bucle proporciona una manera más simple y directa de recorrer los elementos de una colección.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> usuarios = [<span class="hljs-string">"Leandro"</span>, <span class="hljs-string">"Pedro"</span>, <span class="hljs-string">"Juan"</span>];

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> usuario <span class="hljs-keyword">of</span> usuarios) {
  <span class="hljs-built_in">console</span>.log(usuario);
}

<span class="hljs-comment">// "Leandro"</span>
<span class="hljs-comment">// "Pedro"</span>
<span class="hljs-comment">// "Juan"</span>
</code></pre>
<h3 id="heading-forin">for...in</h3>
<p>El bucle <code>for...in</code> se utiliza para iterar sobre las propiedades enumerables de un objeto. A diferencia de <code>for...of</code>, este bucle recorre las claves de un objeto.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> usuario = { <span class="hljs-attr">nombre</span>: <span class="hljs-string">"Leandro"</span>, <span class="hljs-attr">edad</span>: <span class="hljs-number">28</span>, ocupación: <span class="hljs-string">"Programador"</span> };

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> propiedad <span class="hljs-keyword">in</span> usuario) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`<span class="hljs-subst">${propiedad}</span>: <span class="hljs-subst">${usuario[propiedad]}</span>`</span>);
}

<span class="hljs-comment">// "nombre: Leandro"</span>
<span class="hljs-comment">// "edad: 28"</span>
<span class="hljs-comment">// "ocupación: Programador"</span>
</code></pre>
<h3 id="heading-foreach">forEach()</h3>
<p>Los constructores <code>Array</code>, <code>Map</code>, <code>Set</code> y <code>NodeList</code> proporcionan un método (función) llamado <code>forEach()</code> que permite la iteración sobre su estructura de datos de una forma más sencilla. A diferencia de otras estructuras de bucle, este método no se puede interrumpir con <code>break</code> ni <code>continue</code>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> usuarios = [<span class="hljs-string">"Leandro"</span>, <span class="hljs-string">"Pedro"</span>, <span class="hljs-string">"Juan"</span>];

usuarios.forEach(<span class="hljs-function">(<span class="hljs-params">usuario, i</span>) =&gt;</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`<span class="hljs-subst">${i}</span>.<span class="hljs-subst">${usuario}</span>`</span>);
});

<span class="hljs-comment">// "0.Leandro"</span>
<span class="hljs-comment">// "1.Pedro"</span>
<span class="hljs-comment">// "2.Juan"</span>
</code></pre>
<h2 id="heading-funciones">Funciones</h2>
<p>Son bloques de código reutilizables que realizan una tarea específica. Pueden recibir parámetros y devolver un valor, lo que permite separar y organizar mejor el código. Las funciones necesitan ser ejecutadas para que realicen su labor, esto quiere decir que cuando el intérprete llegue a una función, esta será ignorada y no interrumpirá el flujo hasta que esta sea ejecutada.</p>
<p>Las funciones se declaran con la palabra reservada <code>function</code> seguida de un espacio y el nombre que se le quiera dar a la función, a continuación es necesario abrir y cerrar un paréntesis <code>()</code> dentro de estos paréntesis se pueden definir valores en caso de que la función los requiera, por último, se necesita abrir y cerrar las llaves <code>{}</code> para indicar el inicio y el final del bloque de la función.</p>
<p>Para poder ejecutar una función hay que escribir el nombre que se le ha dado seguido de paréntesis <code>()</code> y si la función necesita parámetros, estos se tendrán que pasar dentro del paréntesis.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Función con parámetros</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">saludoPersonalizado</span>(<span class="hljs-params">nombre</span>) </span>{
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Hola, <span class="hljs-subst">${nombre}</span>!`</span>);
}

saludoPersonalizado(<span class="hljs-string">"Leandro"</span>); <span class="hljs-comment">// "Hola, Leandro!"</span>

<span class="hljs-comment">// Función sin parámetros</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">saludoGenerico</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Hola, usuario!"</span>);
}

saludoGenerico(); <span class="hljs-comment">// "Hola, usuario!"</span>
</code></pre>
<p>Los parámetros que la función recibe entre los paréntesis <code>()</code> son llamados parámetros de entrada. Estos parámetros tienen que ser pasados al ejecutar la función.</p>
<p>Algunas funciones pueden tener también, si se necesita, parámetros de salida, para ello será necesario tener dentro de la función la palabra reservada <code>return</code> seguida del valor que se quiere devolver. Este valor devuelto se puede recoger dentro de una variable para ser utilizado más adelante.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Función con valor de retorno</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">saludoGenerico</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-string">"Hola, usuario!"</span>;
}

<span class="hljs-keyword">const</span> saludo = saludoGenerico();

<span class="hljs-built_in">console</span>.log(saludo); <span class="hljs-comment">// "Hola, usuario!"</span>
</code></pre>
<p>Cuando una función es ejecutada, el flujo de ejecución se detiene en el punto donde se encuentra la función y se reanuda después de que la función haya terminado de ejecutarse. Esto permite modularizar el código y reutilizar funciones en diferentes partes del programa.</p>
<h2 id="heading-conclusion">Conclusión</h2>
<p>El flujo de control es fundamental para escribir código efectivo y eficiente en JavaScript. Con una comprensión sólida de las estructuras de control como condicionales y bucles, puedes gestionar mejor cómo y cuándo se ejecuta tu código. Espero que esta guía básica sobre el <em>control flow</em> te haya ayudado a entender un poco mejor cómo se ejecuta el código JavaScript.</p>
<p>Para aprender más, visita <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/JavaScript">MDN Web Docs sobre JavaScript</a>.</p>
<p>¡Hasta el siguiente post!</p>
]]></content:encoded></item><item><title><![CDATA[Aprende JavaScript Desde Cero: Introducción y Primeros Pasos]]></title><description><![CDATA[Hasta ahora en mis publicaciones he estado hablado sobre la estructura de una página web (HTML) y cómo hacer que se vea más bonita (CSS), en este post voy a ir un paso más allá y voy a explicar cómo hacer que una página web trabaje con datos y lógica...]]></description><link>https://blog.gartnerleandro.es/aprende-javascript-desde-cero-introduccion-y-primeros-pasos</link><guid isPermaLink="true">https://blog.gartnerleandro.es/aprende-javascript-desde-cero-introduccion-y-primeros-pasos</guid><category><![CDATA[aprender javascript]]></category><category><![CDATA[javascript desde cero]]></category><category><![CDATA[front-end desde cero]]></category><category><![CDATA[introducción a javascript]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Vanilla JS]]></category><category><![CDATA[aprender a programar]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Mon, 27 May 2024 06:47:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1716752880162/6df3c6ab-8a8e-4c3d-915e-a40d32e76891.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hasta ahora en mis publicaciones he estado hablado sobre la estructura de una página web (HTML) y cómo hacer que se vea más bonita (CSS), en este post voy a ir un paso más allá y voy a explicar cómo hacer que una página web trabaje con datos y lógica utilizando JavaScript.</p>
<p>Si estás empezando en el mundo del desarrollo web, probablemente hayas oído hablar de este lenguaje. JavaScript es la herramienta mágica que te permite añadir interactividad a tus sitios web, haciendo que tus páginas cobren vida con formularios, conexión con una base de datos, juegos, respuestas a botones y mucho más.</p>
<h2 id="heading-que-es-javascript">¿Qué es JavaScript?</h2>
<p>JavaScript es un lenguaje de programación que se ejecuta en el navegador del usuario. Esto significa que, a diferencia de lenguajes como Python o Java que se ejecutan en el servidor, JavaScript puede interactuar directamente con el HTML y CSS de tu página para crear efectos dinámicos en tiempo real.</p>
<p>JavaScript también se puede ejecutar en el servidor, pero en este caso me voy a enfocar más en la parte del navegador que es lo que nos interesa para seguir con el camino del desarrollo Front-end.</p>
<h3 id="heading-que-puedes-hacer-con-javascript">¿Qué puedes hacer con JavaScript?</h3>
<p>Las posibilidades con JavaScript son casi infinitas. Puedes empezar con tareas sencillas como cambiar el contenido de una página al hacer clic en un botón, crear carruseles de imágenes, validar formularios, y progresar hasta crear aplicaciones web complejas, juegos interactivos, animaciones en 2D y gráficos en 3D.</p>
<p>JavaScript es potente y flexible, y a menudo se complementa con varias herramientas y librerías que extienden su funcionalidad básica, como:</p>
<ul>
<li><p><strong>APIs del navegador:</strong> Te permiten manipular el <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/API/Document_Object_Model">DOM</a> (Document Object Model), trabajar con gráficos 3D, capturar datos de la cámara web, enviar notificaciones, entre otros.</p>
</li>
<li><p><strong>APIs de terceros:</strong> Integrar servicios externos como mapas, redes sociales, y más.</p>
</li>
<li><p><strong>Frameworks y librerías:</strong> React, Angular, y Vue.js, que facilitan la creación de aplicaciones web complejas.</p>
</li>
</ul>
<p>En este post voy a empezar desde lo más básico así que hablaré del JavaScript puro o también conocido como JavaScript Vanilla y en futuros posts lo iré complementando con otras APIs y frameworks.</p>
<h2 id="heading-primeros-pasos-con-javascript">Primeros Pasos con JavaScript</h2>
<h3 id="heading-hola-mundo">¡Hola Mundo!</h3>
<p>Para empezar a trabajar con JavaScript, vamos a crear un sencillo ejemplo de "¡Hola Mundo!". Esto te permitirá ver cómo se integra JavaScript con tu HTML.</p>
<ol>
<li><p><strong>Crea un archivo llamado</strong> <code>index.html</code> y agrega dentro del <code>&lt;body&gt;</code> un texto dentro de una etiqueta <code>&lt;h1&gt;</code></p>
<pre><code class="lang-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
     <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Texto de ejemplo<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
 <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
</code></pre>
<p> Si abres el archivo <code>index.html</code> con el navegador verás que aparece el texto "Texto de ejemplo"</p>
</li>
<li><p><strong>Crea un archivo llamado</strong> <code>main.js</code> , el nombre del archivo es irrelevante pero tendrás que tenerlo en cuenta para importarlo en tu HTML como hicimos en el <a target="_blank" href="https://blog.gartnerleandro.es/agregando-estilos-al-html-una-guia-sobre-css-y-sus-selectores">post anterior</a> con el CSS.</p>
</li>
<li><p><strong>Abre tu archivo</strong> <code>index.html</code> y añade el siguiente código el final del elemento <code>&lt;body&gt;</code> .</p>
<pre><code class="lang-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
     <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Texto de ejemplo<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
     <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"main.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
 <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
</code></pre>
<p> Esto conecta tu archivo JavaScript con la página HTML.</p>
</li>
<li><p><strong>Escribe el siguiente código en</strong> <code>main.js</code>:</p>
<pre><code class="lang-javascript"> <span class="hljs-keyword">const</span> miTitulo = <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">"h1"</span>);
 miTitulo.textContent = <span class="hljs-string">"¡Hola mundo!"</span>;
</code></pre>
</li>
</ol>
<p>Guarda ambos archivos y abre tu <code>index.html</code> en el navegador. Deberías ver que el título de la página ha cambiado a "¡Hola mundo!".</p>
<p>¡Enhorabuena! 🎉 ya estás utilizando JavaScript en tu página web.</p>
<h3 id="heading-entendiendo-el-codigo">Entendiendo el Código</h3>
<p>El código anterior hace lo siguiente:</p>
<ul>
<li><p><code>document.querySelector("h1")</code>: Selecciona el primer elemento <code>&lt;h1&gt;</code> en tu documento HTML.</p>
</li>
<li><p><code>miTitulo.textContent = "¡Hola mundo!";</code>: Cambia el texto del elemento seleccionado a "¡Hola mundo!".</p>
</li>
</ul>
<p>Colocamos el script al final del documento HTML para asegurarnos de que todo el HTML se cargue antes de que JavaScript intente interactuar con él. Esto es importante ya que el HTML carga de forma progresiva de arriba hacia abajo, por tanto, si nuestro script se ejecuta antes de que el elemento <code>&lt;h1&gt;</code> esté en la página, no encontrará el elemento y nuestro script fallará, a este problema se les conoce como condición de carrera.</p>
<p>Es probable que en este ejemplo básico no lo notes, pero los archivos JavaScript son pesados en comparación con el HTML y el navegador tarda un tiempo en procesarlo y ejecutarlo, por tanto, es recomendable ponerlo al final del HTML o agregarle <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#defer">el atributo <code>defer</code></a> a la etiqueta script para que no bloquee la carga de la página.</p>
<h2 id="heading-conceptos-basicos-de-javascript">Conceptos Básicos de JavaScript</h2>
<h3 id="heading-variables">Variables</h3>
<p>Las variables son contenedores para almacenar datos. En JavaScript, puedes declarar variables usando <code>let</code> o <code>const</code>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> nombre = <span class="hljs-string">"Juan"</span>;
<span class="hljs-keyword">let</span> edad = <span class="hljs-number">30</span>;
</code></pre>
<p>Se utiliza <code>let</code> para definir una variable que su valor puede cambiar y <code>const</code> para variables que su valor es fijo, a estas se les suele llamar también constantes.</p>
<p>Como te he comentado, estas palabras reservadas (<code>let</code>, <code>const</code>) se utilizan para definir una nueva variable o constante, lo que significa que si quiero cambiar el valor de una variable que ya existe no tengo que utilizar esas palabras registradas delante de la variable.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> nombre = <span class="hljs-string">"Juan"</span>;
<span class="hljs-keyword">let</span> edad = <span class="hljs-number">30</span>;
edad = <span class="hljs-number">31</span>;
</code></pre>
<p>En el ejemplo estoy asignando un nuevo valor (31) a la variable edad que ya existe, por tanto, ahora edad tendrá el valor <code>31</code>.</p>
<h3 id="heading-tipos-de-datos">Tipos de Datos</h3>
<p>JavaScript maneja varios tipos de datos, incluyendo:</p>
<ul>
<li><p><strong>String (cadenas de texto):</strong> <code>"Hola Mundo"</code></p>
</li>
<li><p><strong>Number (números):</strong> <code>42</code> o <code>3.14</code></p>
</li>
<li><p><strong>Boolean (booleanos):</strong> <code>true</code> o <code>false</code></p>
</li>
<li><p><strong>Array (colección):</strong> <code>[1, 2, 3, 4]</code></p>
</li>
<li><p><strong>Object (objeto):</strong> <code>{ nombre: "Juan", edad: 30 }</code></p>
</li>
</ul>
<p>No te preocupes si no entiendes para qué sirven estos datos o cómo se utilizan, en futuras publicaciones te explicaré más en detalle cómo trabajar con cada uno de ellos, pero es necesario mencionarlos para que entiendas que puedes tratar con diferentes tipos de datos.</p>
<p>Volvamos al ejemplo anterior:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> nombre = <span class="hljs-string">"Juan"</span>;
<span class="hljs-keyword">let</span> edad = <span class="hljs-number">30</span>;
</code></pre>
<p>En este caso, la constante nombre sería de tipo <strong>string</strong> porque el valor que guarda está definido entre comillas ( <code>"</code> ), esto le indica al JavaScript que el valor es de tipo cadena de texto (<strong>string</strong>).</p>
<p>Por otro lado tenemos la variable <code>edad</code>, esta no está definida entre comillas, y es un número, por tanto, JavaScript entiende que la variable <code>edad</code> es de tipo <strong>number.</strong></p>
<p>Al contrario que en otros lenguajes de programación, JavaScript es flexible en cuanto al tipo de dato que guarda una variable, esto quiere decir, que si la <code>edad</code> ahora es de tipo <strong>number</strong>, puedo convertirla en tipo <strong>string</strong> simplemente asignándole un valor que sea de ese tipo.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> nombre = <span class="hljs-string">"Juan"</span>;
<span class="hljs-keyword">let</span> edad = <span class="hljs-number">30</span>;
edad = <span class="hljs-string">"30"</span>;
</code></pre>
<p>En este ejemplo, lo que he hecho ha sido cambiar el valor de la variable <code>edad</code> y le he asignado un valor de tipo <strong>string</strong> y JavaScript me dejaría hacer ese cambio sin problema. Por tanto, ahora la variable edad sería de tipo <strong>string</strong> y su valor sería <code>30</code>.</p>
<p>Si mostramos el valor de la variable edad, no podemos saber si esta es un número o una cadena de texto, por tanto, podríamos pensar que es irrelevante, pero en el código, una variable de tipo <strong>string</strong> no tiene las mismas propiedades que una variable de tipo <strong>number</strong>, por lo tanto, es importante que tengamos en cuenta los tipos.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">🧠</div>
<div data-node-type="callout-text"><strong>Dato:</strong> Existe una variante del JavaScript llamada TypeScript que no permite que esto suceda. El TypeScript es utilizado por desarrolladores y empresas para evitar que por error cambie el tipo de dato que almacena una variable y el código sea más robusto y predecible.</div>
</div>

<h3 id="heading-operadores">Operadores</h3>
<p>Los operadores permiten realizar operaciones sobre variables y valores. Algunos operadores básicos son:</p>
<ul>
<li><p><strong>Suma:</strong> <code>+</code></p>
</li>
<li><p><strong>Resta:</strong> <code>-</code></p>
</li>
<li><p><strong>Multiplicación:</strong> <code>*</code></p>
</li>
<li><p><strong>División:</strong> <code>/</code></p>
</li>
<li><p><strong>Mayor:</strong> <code>&gt;</code></p>
</li>
<li><p><strong>Menor:</strong> <code>&lt;</code></p>
</li>
<li><p><strong>Mayor o igual:</strong> <code>&gt;=</code></p>
</li>
<li><p><strong>Menor o igual:</strong> <code>&lt;=</code></p>
</li>
<li><p><strong>Igual:</strong> <code>===</code></p>
</li>
</ul>
<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text"><strong>¡Cuidado!</strong> La operación de comparación se debe hacer con triple signo igual (<code>===</code>), si solo se utiliza un signo (<code>=</code>) significa que quieres asignar un valor, y si utilizas dos <code>==</code> estarás comparando el valor pero no el tipo del valor, por tanto 30 será igual que "30".</div>
</div>

<p>Ejemplo:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> suma = <span class="hljs-number">5</span> + <span class="hljs-number">10</span>;
<span class="hljs-keyword">let</span> concatenacion = <span class="hljs-string">"Hola"</span> + <span class="hljs-string">" "</span> + <span class="hljs-string">"Mundo"</span>;
</code></pre>
<p>En el código anterior podemos ver dos operaciones de tipo suma que hacen diferentes funciones, la primera, al ser dos números, JavaScript entiende que lo que se quiere hacer es una operación matemática, por tanto, lo que hace es sumar ambos valores y devolver el resultado, que en este caso sería <code>15</code> .</p>
<p>Sin embargo, en la segunda operación, al contener al menos un dato de tipo <strong>string,</strong> JavaScript entiende que lo que se quiere hacer es concatenar (unir) todos los datos, en este ejemplo el texto <code>Hola</code>, un espacio en blanco y el texto <code>Mundo</code> y el resultado sería: <code>Hola Mundo</code> .</p>
<h3 id="heading-condicionales">Condicionales</h3>
<p>Los condicionales permiten ejecutar código basado en una condición.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> edad = <span class="hljs-number">18</span>;

<span class="hljs-keyword">if</span> (edad &gt;= <span class="hljs-number">18</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Eres mayor de edad."</span>);
} <span class="hljs-keyword">else</span> {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Eres menor de edad."</span>);
}
</code></pre>
<p>En el código anterior tenemos la variable <code>edad</code> a la que le hemos asignado un valor de tipo <strong>number</strong> (<code>18</code>), a continuación encontramos una condición <code>if .. else</code> . Esta condición implica que si la variable edad es mayor o igual (<code>&gt;=</code>) a <code>18</code> se ejecutará el código del interior del <code>if</code> , en caso de no cumplirse la condición, se ejecutará el código del interior del <code>else</code>.</p>
<p>En el caso del ejemplo, el código que se ejecutaría sería el del interior del <code>if</code> mostrando el valor: <code>Eres mayor de edad.</code></p>
<h3 id="heading-funciones">Funciones</h3>
<p>Las funciones encapsulan un bloque de código que puedes reutilizar.</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">saludar</span>(<span class="hljs-params">nombre</span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-string">"Hola, "</span> + nombre;
}

<span class="hljs-built_in">console</span>.log(saludar(<span class="hljs-string">"Mundo"</span>)); <span class="hljs-comment">// "Hola, Mundo"</span>
</code></pre>
<p>En este ejemplo encontramos una función llamada <code>saludar</code> , sabemos que es una función porque delante del nombre tiene la palabra reservada <code>function</code> , existe otra manera de generar funciones pero lo veremos más adelante, de momento vamos a decir que para definir una función se tiene que seguir la siguiente estructura:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716790916628/d03e88d8-94b4-46f3-920e-0ed1ab7ed8a9.png" alt class="image--center mx-auto" /></p>
<p><code>function</code>: Es una palabra reservada en JavaScript que indica el inicio de una función.</p>
<p><code>saludar</code>: Es el nombre que va a tener la función.</p>
<p><code>(parámetros)</code>: Los paréntesis son parte de la función y son obligatorios, estos pueden contener dentro valores llamados parámetros, estos parámetros se deberán pasar al ejecutar la función y su valor se puede utilizar dentro de la función para hacer operaciones.</p>
<p><code>{ }</code>: Las llaves de apertura y cierre indican el inicio y el final de la función.</p>
<p><code>return</code>: Palabra reservada en JavaScript para indicar que el valor que viene a continuación será devuelto por la función.</p>
<p>Como puedes ver en el ejemplo del código superior, cuando se ejecuta la función <code>saludar</code> se le pasa un valor dentro de los paréntesis <code>saludar("Mundo")</code> esto indica, que cuando se ejecute la función, el valor del parámetro nombre será un <strong>string</strong> con el valor "Mundo". Por tanto, el valor devuelto por esta función es <code>"Hola, Mundo"</code>.</p>
<p><strong>Función sin parámetros</strong></p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">nombre</span>(<span class="hljs-params"></span>) </span>{
 <span class="hljs-keyword">return</span> <span class="hljs-string">"código a ejecutar"</span>;
}
</code></pre>
<p>Esta otra función sigue la misma estructura pero no tiene parámetros, por tanto, al ejecutarla no tendremos que pasar ningún valor entre los paréntesis <code>nombre()</code> y el valor que devolverá, siempre será <code>"código a ejecutar"</code>.</p>
<p>Las funciones son una parte fundamental de JavaScript y se utilizan para prácticamente todo, en futuros posts te explicaré más sobre las funciones y cómo utilizarlas en cada caso.</p>
<h3 id="heading-eventos">Eventos</h3>
<p>Los eventos permiten interactuar con el usuario. Por ejemplo, puedes ejecutar código cuando un usuario hace clic en un botón.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> button = <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">"button"</span>);
button.onclick = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
    alert(<span class="hljs-string">"¡Se ha pulsado el Botón!"</span>);
};
</code></pre>
<p>Este código crea una constante llamada <code>button</code> y se le asigna un elemento botón que se busca en el HTML con la función <code>document.querySelector</code> que ya hemos visto en el primer ejemplo, a continuación, a la constante botón se le asigna una función sin nombre en su propiedad <code>onclick</code>, de esta manera, cuando un usuario hace click en un botón, se ejecutará esa función.</p>
<p>Como te expliqué en <a target="_blank" href="https://blog.gartnerleandro.es/conceptos-base-de-html#heading-atributos">el post del HTML</a>, los elementos tienen atributos, uno de los atributos es <code>onclick</code>, este atributo permite ejecutar un código cuando un usuario realiza la acción de click encima del elemento, en este caso un botón.</p>
<p><strong>¿Por qué esta función no tiene nombre?</strong></p>
<p>Buena pregunta, a las funciones y la variables, se les asigna un nombre para poder referirnos a ellas más adelante en nuestro código, en este caso, como esa función se está asignando con un <code>=</code> al atributo <code>onclick</code> no necesitamos asignarle un nombre ya que, cuando se ejecute el evento <code>click</code> por parte del usuario, se ejecutará inmediatamente la función.</p>
<p>Además, por mucho que a esa función se le pusiera un nombre, no se podría hacer referencia a ella porque está asignada directamente a un atributo y el código no podría acceder a ella, para poder reutilizar una función en el atributo y desde otro lugar de nuestro código se tendría que definir la función a parte.</p>
<p>Por ejemplo así:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> button = <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">"button"</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">handleClick</span>(<span class="hljs-params"></span>) </span>{
    alert(<span class="hljs-string">"¡Se ha pulsado el Botón!"</span>);
};

button.onclick = handleClick;

handleClick();
</code></pre>
<h3 id="heading-comentarios">Comentarios</h3>
<p>Por último pero no menos importante debes saber que existe una manera de agregar comentarios en JavaScript, estos son texto simple que no se ejecuta, los comentarios te permiten dejar escrito en el código información útil sin que esto afecte al código. Para agregar comentarios en JavaScript se puede hacer utilizando doble barra (<code>//</code>) si el comentario es de una única línea o (<code>/**/</code>) si el comentario es de varias líneas.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Este texto es un comentario de una línea</span>

<span class="hljs-comment">/*
Este es un comentario de varias líneas,
el contenido de este comentario no afecta al código y
es únicamente informativo.
*/</span>
</code></pre>
<p>A menudo en tutoriales o ejemplo de código, se utilizan estos comentarios para mostrar el valor de una variable o el resultado de una función, por ejemplo como he hecho yo en la función saludar:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">saludar</span>(<span class="hljs-params">nombre</span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-string">"Hola, "</span> + nombre;
}

<span class="hljs-built_in">console</span>.log(saludar(<span class="hljs-string">"Mundo"</span>)); <span class="hljs-comment">// "Hola, Mundo"</span>
</code></pre>
<h3 id="heading-practica-cambiador-de-imagenes">Práctica: Cambiador de Imágenes</h3>
<p>Con lo que te he explicado en el post, te animo a que crees un cambiador de imágenes.</p>
<p>Requisitos:</p>
<ul>
<li><p>Un elemento imagen con una imagen por defecto (puedes utilizar una imagen de <a target="_blank" href="https://unsplash.com/es">unsplash</a>).</p>
</li>
<li><p>Un botón con el texto "Cambiar".</p>
</li>
<li><p>Al hacer click en el botón, si la imagen que se muestra es la imagen por defecto, se debe cambiar por otra diferente.</p>
</li>
<li><p>Al hacer click en el botón, si la imagen que se muestra <strong>no</strong> es la imagen por defecto, se debe cambiar por la imagen por defecto.</p>
</li>
<li><p>Agrega los estilos css que quieras.</p>
</li>
</ul>
<p><a target="_blank" href="https://codepen.io/gartnerleandro/pen/WNBGBOo">Solución</a></p>
<h2 id="heading-conclusion">Conclusión</h2>
<p>JavaScript es un lenguaje de programación poderoso que te permite añadir interactividad y dinamismo a tus sitios web. En este artículo, te he mostrado los fundamentos básicos y ejemplos prácticos para ayudarte a empezar, en futuras publicaciones te hablaré sobre casos prácticos y te iré mostrando trucos para que tu JavaScript sea mejor.</p>
<p>Entiendo perfectamente que de primeras es mucha información, pero te aseguro que con esta guía podrás seguir sin ningún problema las futuras publicaciones y a medida que vayas utilizando y practicando JavaScript se te irá haciendo más fácil.</p>
<p>Te recomiendo que hagas pruebas con los ejemplos que te he ido mostrando en la publicación. ¡Sigue practicando y explorando, y pronto estarás creando páginas web increíbles! Para aprender más, visita <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/JavaScript">MDN Web Docs sobre JavaScript</a>.</p>
<p>¡Hasta el siguiente post! 👋🏼</p>
]]></content:encoded></item><item><title><![CDATA[Agregando estilos al HTML: Una guía sobre CSS y sus selectores]]></title><description><![CDATA[En anteriores publicaciones te he estado hablando sobre el HTML, su estructura y cómo utilizarlo, pero como te habrás podido dar cuenta, el resultado de una web generada únicamente con HTML plano, no es demasiado llamativa o bonita, aquí es donde ent...]]></description><link>https://blog.gartnerleandro.es/agregando-estilos-al-html-una-guia-sobre-css-y-sus-selectores</link><guid isPermaLink="true">https://blog.gartnerleandro.es/agregando-estilos-al-html-una-guia-sobre-css-y-sus-selectores</guid><category><![CDATA[iniciando en html]]></category><category><![CDATA[primeros pasos css]]></category><category><![CDATA[css principiante]]></category><category><![CDATA[html y css]]></category><category><![CDATA[HTML]]></category><category><![CDATA[CSS]]></category><category><![CDATA[empezando a programar]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Mon, 20 May 2024 07:52:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1716067279304/dbfc4a74-a5e4-4d18-ab6b-02228668a68b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En <a target="_blank" href="https://blog.gartnerleandro.es/conceptos-base-de-html">anteriores publicaciones</a> te he estado hablando sobre el HTML, su estructura y cómo utilizarlo, pero como te habrás podido dar cuenta, el resultado de una web generada únicamente con HTML plano, no es demasiado llamativa o bonita, aquí es donde entra la publicación de hoy.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716063753208/2f428e68-08c1-4dac-9050-33fe421f5746.png" alt="Web hecha únicamente utilizando HTML sin estilos" class="image--center mx-auto" /></p>
<p>Bienvenido/a a otro fascinante post donde exploraremos el mundo del CSS (Cascading Style Sheets o Hojas de Estilo en Cascada). En esta ocasión, te explicaré cómo agregar CSS a un documento HTML utilizando archivos externos, una práctica esencial para mantener nuestro código organizado. Además, aprenderemos sobre los distintos tipos de selectores en CSS, lo que nos permitirá aplicar estilos de manera precisa a nuestros elementos HTML.</p>
<h2 id="heading-que-es-el-css-y-para-que-se-usa"><strong>¿Qué es el CSS y para qué se usa?</strong></h2>
<p>CSS es un lenguaje de hojas de estilo que nos permite estilizar y diseñar documentos HTML. Si bien HTML se encarga de la estructura básica de la página, el CSS se ocupa de su presentación visual, permitiendo controlar aspectos como el color, la tipografía, el espaciado, entre muchos otros. Utilizar CSS mejora significativamente la experiencia del usuario y nos brinda una amplia gama de posibilidades creativas para diseñar páginas web atractivas y funcionales.</p>
<h2 id="heading-vincular-un-archivo-css-a-html"><strong>Vincular un archivo CSS a HTML</strong></h2>
<p>Para mantener el CSS separado del HTML, lo más recomendable es utilizar un archivo externo. Esto no solo ayuda a que nuestro proyecto sea más fácil de mantener, sino que también permite que los navegadores almacenen en caché los estilos y los reutilicen en múltiples páginas del sitio, cosa que no se podría hacer si los estilos están metidos directamente en el HTML utilizando el atributo <code>style</code>.</p>
<h3 id="heading-creando-y-vinculando-un-archivo-css"><strong>Creando y vinculando un archivo CSS</strong></h3>
<ol>
<li><p><strong>Creación de un Archivo CSS:</strong> Abre tu editor de código, como Visual Studio Code, y crea un nuevo archivo con la extensión <code>.css</code>. Por ejemplo, puedes llamarlo <code>estilos.css</code>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716064063985/e1971d23-3bd1-4cc6-bf79-ac4dec27e8fa.png" alt="captura de pantalla del editor de código VSCode con un archivo estilos.css creado en la misma carpeta de que archivo index.html" class="image--center mx-auto" /></p>
</li>
<li><p><strong>Guardando el Archivo:</strong> Asegúrate de guardar el archivo en la misma carpeta donde se encuentra tu archivo HTML.</p>
</li>
<li><p><strong>Vinculación en HTML:</strong> En tu archivo HTML, dentro del elemento <code>&lt;head&gt;</code>, añade la siguiente línea para enlazar tu archivo CSS:</p>
<pre><code class="lang-html"> <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"estilos.css"</span>&gt;</span>
</code></pre>
<p> Este elemento <code>&lt;link&gt;</code> le dice al navegador dónde encontrar la hoja de estilo y cómo interpretarla.</p>
</li>
</ol>
<h2 id="heading-selectores-en-css"><strong>Selectores en CSS</strong></h2>
<p>Los selectores en CSS son patrones que identifican a qué elementos se aplicarán los estilos definidos dentro de las reglas CSS.</p>
<h3 id="heading-tipos-de-selectores"><strong>Tipos de Selectores</strong></h3>
<ul>
<li><p><strong>Selectores de Tipo:</strong> Seleccionan elementos por su nombre de etiqueta, como <code>h1</code>, <code>p</code>, <code>div</code>, etc.</p>
<pre><code class="lang-xml">  <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Título de ejemplo<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
</code></pre>
<pre><code class="lang-css">  <span class="hljs-selector-tag">h1</span> {
    <span class="hljs-attribute">color</span>: blue;
  }
</code></pre>
</li>
<li><p><strong>Selectores de Clase:</strong> Empiezan con un punto <code>.</code> y seleccionan elementos basados en el atributo <code>class</code>. Como vimos <a target="_blank" href="https://blog.gartnerleandro.es/conceptos-base-de-html#heading-atributos">en publicaciones anteriores</a>, los elementos de HTML pueden tener atributos, uno de estos es el atributo <code>class</code> , en este podemos agregar una o varias clases separadas por un espacio para poder utilizarlas más adelante en el CSS.</p>
<pre><code class="lang-xml">  <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"destacado"</span>&gt;</span>Texto destacado<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
</code></pre>
<pre><code class="lang-css">  <span class="hljs-selector-class">.destacado</span> {
    <span class="hljs-attribute">font-weight</span>: bold;
  }
</code></pre>
</li>
<li><p><strong>Selectores de ID:</strong> Comienzan con un <code>#</code> y seleccionan elementos basados en el atributo <code>id</code>. Es importante recordar que los IDs de los elementos deben ser únicos.</p>
<pre><code class="lang-xml">  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"principal"</span>&gt;</span>Texto principal<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<pre><code class="lang-css">  <span class="hljs-selector-id">#principal</span> {
    <span class="hljs-attribute">background-color</span>: yellow;
  }
</code></pre>
</li>
<li><p><strong>Selectores de Atributo:</strong> Se utilizan para seleccionar elementos con un atributo específico.</p>
<pre><code class="lang-xml">  <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://example.com"</span>&gt;</span>Enlace de ejemplo<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<pre><code class="lang-css">  <span class="hljs-selector-tag">a</span><span class="hljs-selector-attr">[href=<span class="hljs-string">"https://example.com"</span>]</span> {
    <span class="hljs-attribute">color</span>: green;
  }
</code></pre>
</li>
<li><p><strong>Pseudoclases y Pseudoelementos:</strong> Selectores como <code>:hover</code> y <code>::after</code> permiten estilizar estados de un elemento o partes específicas de él.</p>
<pre><code class="lang-css">  <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span> {
    <span class="hljs-attribute">color</span>: red;
  }

  <span class="hljs-selector-tag">p</span><span class="hljs-selector-pseudo">::first-line</span> {
    <span class="hljs-attribute">font-weight</span>: bold;
  }
</code></pre>
</li>
<li><p><strong>Combinadores:</strong> Sirven para relacionar varios selectores de forma más específica, como descendientes ( <code>&gt;</code> ) o hermanos adyacentes ( <code>+</code> ).</p>
<pre><code class="lang-css">  <span class="hljs-selector-tag">ul</span> &gt; <span class="hljs-selector-tag">li</span> {
    <span class="hljs-attribute">list-style-type</span>: none;
  }

  <span class="hljs-selector-tag">h1</span> + <span class="hljs-selector-tag">p</span> {
    <span class="hljs-attribute">margin-top</span>: <span class="hljs-number">0</span>;
  }
</code></pre>
</li>
</ul>
<h2 id="heading-ideas-practicas-para-aplicar-html-y-css"><strong>Ideas prácticas para aplicar HTML y CSS</strong></h2>
<ol>
<li><p><strong>Página de "Sobre mí":</strong> Utiliza HTML para estructurar una biografía breve y CSS para diseñar elementos como fotografías, cabeceras y listas de hobbies o logros.</p>
<p> 🖌️ <a target="_blank" href="https://codepen.io/gartnerleandro/pen/zYQrPmd?editors=1100">Resultado de ejemplo</a></p>
</li>
<li><p><strong>Galería de imágenes responsiva:</strong> Crea una galería usando <code>&lt;div&gt;</code> para cada imagen y aplica estilos como <code>width</code>, <code>padding</code>, y <code>box-shadow</code> con CSS para que se ajuste elegantemente a diferentes tamaños de pantalla.</p>
<p> 🖌️ <a target="_blank" href="https://codepen.io/gartnerleandro/pen/zYQrPMd?editors=1100">Resultado de ejemplo</a></p>
</li>
<li><p><strong>Formulario de contacto estilizado:</strong> Diseña un formulario con campos para nombre, correo electrónico y mensaje. Utiliza CSS para hacerlo atractivo y fácil de usar, ajustando elementos como <code>border-radius</code>, <code>background-color</code>, y <code>hover</code> .</p>
<p> 🖌️ <a target="_blank" href="https://codepen.io/gartnerleandro/pen/mdYVqQv?editors=1100">Resultado de ejemplo</a></p>
</li>
</ol>
<h2 id="heading-conclusion"><strong>Conclusión</strong></h2>
<p>Hasta aquí la introducción a cómo agregar CSS a tus documentos HTML mediante archivos externos y un recorrido por los selectores que ofrece CSS.</p>
<p>No te preocupes si no acabas de entender cómo funciona, es normal, el HTML y el CSS pueden llegar a ser muy complejos, pero con práctica estoy seguro de que te convertirás en un verdadero experto/a. Si quieres ver qué otros tipos de selectores hay, puedes acceder a <a target="_blank" href="https://developer.mozilla.org/es/docs/Learn/CSS/Building_blocks/Selectors#tabla_de_referencia_de_selectores">esta tabla</a>.</p>
<p>Espero que este post te inspire a experimentar con estos conceptos y a crear páginas web visualmente impresionantes y eficientes. ¡Hasta la próxima! 👋🏼</p>
]]></content:encoded></item><item><title><![CDATA[Optimiza tu entorno de desarrollo con las herramientas adecuadas]]></title><description><![CDATA[Como programadores, pasar horas frente al código es parte de nuestro día a día, por lo que estar cómodos y ser eficientes con nuestras herramientas es crucial.
Si has seguido mis publicaciones para iniciar en la programación, hasta ahora, te he estad...]]></description><link>https://blog.gartnerleandro.es/optimiza-tu-entorno-de-desarrollo-con-las-herramientas-adecuadas</link><guid isPermaLink="true">https://blog.gartnerleandro.es/optimiza-tu-entorno-de-desarrollo-con-las-herramientas-adecuadas</guid><category><![CDATA[entorno de desarrollo]]></category><category><![CDATA[aprender a programar]]></category><category><![CDATA[empezando a programar]]></category><category><![CDATA[preparando las herramientas]]></category><category><![CDATA[entorno de programación]]></category><category><![CDATA[herramientas]]></category><category><![CDATA[herramientas de programación]]></category><category><![CDATA[ide]]></category><category><![CDATA[aprender html]]></category><category><![CDATA[cómo empezar a programar]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Mon, 13 May 2024 06:49:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1715261161265/4b2d0359-b7e8-4226-b7a5-eabaa7d019bf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Como programadores, pasar horas frente al código es parte de nuestro día a día, por lo que estar cómodos y ser eficientes con nuestras herramientas es crucial.</p>
<p>Si has seguido mis publicaciones para iniciar en la programación, hasta ahora, te he estado indicando que utilizaras un editor de código online como <a target="_blank" href="https://codepen.io/">Codepen</a> para hacer tus pruebas y adentrarte en la programación, pero ahora que ya has practicado un poco, ha llegado la hora de que te instales tu propio editor de código local.</p>
<h2 id="heading-online-vs-local">Online vs Local</h2>
<p>Los editores de código local ofrecen una amplia ventaja sobre los editores online, una de las más obvias es que no requieren una conexión a internet, lo que te permite trabajar en tus proyectos sin depender de la disponibilidad de la red y de tu velocidad de internet. Esto es especialmente útil si te encuentras en áreas con conexión limitada o inestable.</p>
<p>Otra ventaja, es que te permiten más libertad, ya que en los editores online el resultado del código depende de la manera de ejecutarlo que tenga el editor online en su servidor, por tanto, nos podemos encontrar con problemas como el de <a target="_blank" href="https://blog.gartnerleandro.es/10-consejos-esenciales-de-html-para-principiantes">este post</a>. Por si no lo has leído, el problema que nos encontrábamos era que queríamos practicar una estructura de HTML en un editor online y este nos mostraba un mensaje indicando que nuestro código se iba a ejecutar en el <code>body</code> de un HTML ya existente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715260612043/c8d7d9c8-94e7-48db-87d8-3ab2e2967210.avif" alt="mensaje de error de codepen indicando que el código del editor se va a ejecutar dentro del body de un HTML predefinido" class="image--center mx-auto" /></p>
<p>Además, los editores locales suelen ofrecer una mejor gestión de archivos y proyectos, ya que tienen acceso directo al sistema de archivos de tu ordenador, lo que facilita la organización, el acceso y la manipulación de archivos y directorios. Esta integración con el sistema de archivos local permite una sincronización más fluida con herramientas de control de versiones, como <a target="_blank" href="https://git-scm.com/">Git</a>, y una interacción más rápida y eficiente, lo que mejora significativamente tu flujo de trabajo de desarrollo.</p>
<h2 id="heading-la-importancia-de-un-buen-editor-de-codigo">La importancia de un buen editor de código</h2>
<p>Durante mi carrera, he probado varios editores de código, desde <a target="_blank" href="https://www.sublimetext.com/">Sublime Text</a> hasta <a target="_blank" href="https://atom-editor.cc/">Atom</a>, incluso <a target="_blank" href="https://www.vim.org/">Vim</a>, pero finalmente, me he decantado por <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a> (VSCode). ¿Por qué? VSCode combina eficiencia, una amplia gama de funcionalidades, personalización a través de plugins y una terminal integrada que facilita mucho las cosas.</p>
<h3 id="heading-configurando-vscode">Configurando VSCode</h3>
<p>Configurar VSCode no es complicado y lo puedes adaptar a tu medida. Por ejemplo, ajustar los atajos de teclado y crear tus propios <a target="_blank" href="https://es.wikipedia.org/wiki/Snippet">snippets</a> puede aumentar enormemente tu productividad. Aquí van algunos pasos básicos para personalizar VSCode:</p>
<ol>
<li><p><strong>Atajos de teclado</strong>: Dirígete a <code>Ajustes &gt; Métodos abreviados de teclado</code> para modificarlos según tus necesidades. Es importante que te familiarices con los atajos ya existentes o los personalices a tu gusto para trabajar de forma más eficiente.</p>
</li>
<li><p><strong>Snippets</strong>: En <code>Ajustes &gt; Configurar Fragmentos de usuario</code>, puedes crear fragmentos de código que usas frecuentemente, lo cual te ahorra tiempo y esfuerzo. Por ejemplo, puedes configurar que cuando escribas <code>html</code> se te ejecute un snippet y te cree una estructura base de HTML que hayas creado como plantilla así no tienes que crearla cada vez manualmente.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715251038643/82c2a4f5-698c-416b-aa49-a0c9d57fa34b.gif" alt="gif mostrando cómo utilizar un snippet llamado doc que te genera el esqueleto de un HTML" class="image--center mx-auto" /></p>
<p> <strong>Tema y aspecto</strong>: Personaliza la apariencia desde <code>Ajustes &gt; Tema &gt; Tema de color</code>. Seguramente vayas a pasar mucho tiempo delante de tu editor así que es importante que estés cómodo con los colores y personalización de la herramienta.</p>
</li>
</ol>
<h3 id="heading-plugins-elige-sabiamente">Plugins: Elige sabiamente</h3>
<p>Los <a target="_blank" href="https://marketplace.visualstudio.com/VSCode">plugins</a> pueden transformar tu editor en una herramienta poderosa, pero su uso excesivo puede tener contrapartidas. Es vital instalar solo aquellos necesarios y hacer limpiezas periódicas, una mala gestión de plugins puede hacer que tu experiencia con el editor sea pésima:</p>
<ul>
<li><p><strong>Rendimiento</strong>: Demasiados plugins pueden ralentizar tu editor, especialmente si tienes varios proyectos abiertos en diferentes editores.</p>
</li>
<li><p><strong>Distracciones</strong>: Algunos plugins pueden interrumpir tu flujo de trabajo con constantes notificaciones o mensajes en el código.</p>
</li>
<li><p><strong>Plugins temporales</strong>: Hay plugins útiles solo para ciertas fases del desarrollo. Por ejemplo, un plugin que muestra el tamaño de las librerías es útil durante la optimización del rendimiento, pero quizás no en el día a día.</p>
</li>
<li><p><strong>Configuración de plugins</strong>: Asegúrate de que cada plugin esté bien configurado. Por ejemplo, si usas Prettier, configúralo para que solo actúe en proyectos con un archivo de configuración de Prettier.</p>
</li>
</ul>
<p>Todos los plugins tienen una documentación detallada de cómo utilizarlo y cómo configurarlo, tómate tu tiempo y configura cada plugin a tu gusto, esto hará que a la larga seas mucho más eficiente, y sobre todo, si no necesitas el plugin, desinstálalo o páusalo para que no te moleste.</p>
<p>Si estas empezando, puedes ignorar los plugins de momento, ya habrá tiempo para explorarlos más adelante.</p>
<h3 id="heading-modo-zen-en-vscode">Modo "Zen" en VSCode</h3>
<p>El modo "Zen" te ayuda a concentrarte eliminando elementos superfluos de la UI y centrando tu atención solo en el código. Para activarlo, puedes usar el comando <code>Ctrl+K Z</code> o buscar "Zen Mode" en la paleta de comandos (<code>cmd+Shift+P</code>). Este modo te ayudará a centrarte en el archivo que estés trabajando eliminando todo elemento de la UI que no sea relevante así te podrás concentrar en el trabajo actual.</p>
<h2 id="heading-conclusion">Conclusión</h2>
<p>Elegir y configurar adecuadamente tus herramientas de trabajo no solo impacta tu productividad, sino también tu satisfacción general como desarrollador. VSCode es una herramienta excepcionalmente potente si se configura correctamente y se mantiene alineada con las necesidades de tus proyectos. Recuerda que al final, lo importante es que te sientas cómodo y eficiente con las herramientas que eliges.</p>
<h2 id="heading-ejercicio">Ejercicio</h2>
<p>Ahora que ya tienes tu entorno local listo, te invito a que repliques el ejercicio que hicimos en el post anterior. Crea un archivo <code>index.html</code> que siga las siguientes pautas:</p>
<ul>
<li><strong>Buena estructura de HTML</strong>, intenta que la estructura tenga semántica. No olvides las etiquetas <code>&lt;!doctype html&gt;</code> y <code>&lt;html&gt;</code> .</li>
</ul>
<ul>
<li><p>Utiliza el elemento <code>main</code></p>
</li>
<li><p>Agrega enlaces a páginas externas, por ejemplo: Twitter, Instagram, LinkedIn</p>
</li>
<li><p>Agrega una marca de tiempo con el elemento <code>time</code></p>
</li>
<li><p>Agrega al menos una lista del tipo que quieras</p>
</li>
<li><p>Utiliza el tag <code>section</code> para dividir las diferentes secciones y agrega un título a cada sección, por ejemplo: Crea una sección para los enlaces, otro para la lista...</p>
</li>
</ul>
<p>Por último, abre tu archivo con el navegador y observa tu creación. ¡Enhorabuena! 🎉</p>
]]></content:encoded></item><item><title><![CDATA[10 Consejos Esenciales de HTML para Principiantes]]></title><description><![CDATA[Hoy voy a compartir contigo algunos consejos esenciales de HTML que todo principiante debería conocer para mejorar y optimizar su código. Si no sabes para qué se utilizan algunas de las etiquetas que menciono en el post te recomiendo que visites esta...]]></description><link>https://blog.gartnerleandro.es/10-consejos-esenciales-de-html-para-principiantes</link><guid isPermaLink="true">https://blog.gartnerleandro.es/10-consejos-esenciales-de-html-para-principiantes</guid><category><![CDATA[consejos html]]></category><category><![CDATA[buenas practicas html]]></category><category><![CDATA[html para principiantes]]></category><category><![CDATA[HTML]]></category><category><![CDATA[HTML tags ]]></category><category><![CDATA[aprender html]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Mon, 06 May 2024 06:32:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714224938981/e9337a77-3381-4d57-9a20-ee87aac5f2c4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hoy voy a compartir contigo algunos consejos esenciales de HTML que todo principiante debería conocer para mejorar y optimizar su código. Si no sabes para qué se utilizan algunas de las etiquetas que menciono en el post te recomiendo que visites <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/HTML/Element">esta página</a>. ¡Vamos allá!</p>
<h3 id="heading-1-define-el-viewport">1. <strong>Define el viewport</strong></h3>
<p>Es esencial para las páginas web modernas asegurarse de que se vean bien en todos los dispositivos. Definir el viewport en la sección <code>&lt;head&gt;</code> de tu HTML garantiza que tu sitio sea visualmente accesible en dispositivos móviles.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>&gt;</span>
</code></pre>
<h3 id="heading-2-utiliza-etiquetas-semanticas">2. <strong>Utiliza etiquetas semánticas</strong></h3>
<p>Las etiquetas semánticas como <code>&lt;header&gt;</code>, <code>&lt;footer&gt;</code>, <code>&lt;article&gt;</code> , <code>&lt;section&gt;</code> , etc. No solo ayudan a estructurar tu contenido de manera clara, sino que también mejoran la accesibilidad y el SEO.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">article</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Introducción a HTML<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>HTML es el lenguaje de marcado utilizado para crear páginas web.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">article</span>&gt;</span>
</code></pre>
<h3 id="heading-3-aprovecha-el-elemento">3. <strong>Aprovecha el elemento</strong> <code>&lt;main&gt;</code></h3>
<p>El elemento <code>&lt;main&gt;</code> indica el contenido principal de tu página y debería usarse solo una vez por documento, facilitando la accesibilidad.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">main</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Bienvenido a mi Blog<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Este es el principal contenido de la página.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">main</span>&gt;</span>
</code></pre>
<h3 id="heading-4-no-olvides-la-etiqueta">4. <strong>No olvides la etiqueta</strong> <code>&lt;meta charset="utf-8"&gt;</code></h3>
<p>Esta etiqueta asegura que tu página web pueda mostrar caracteres de múltiples idiomas sin problemas.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"utf-8"</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
</code></pre>
<h3 id="heading-5-usa-el-atributo-alt-en-las-imagenes">5. <strong>Usa el atributo</strong> <code>alt</code> en las imágenes</h3>
<p>Describir tus imágenes con el atributo <code>alt</code> mejora la accesibilidad y ayuda en el SEO.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"paisaje.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Hermoso paisaje de montañas al amanecer"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"100"</span> <span class="hljs-attr">height</span>"<span class="hljs-attr">50</span>"&gt;</span>
</code></pre>
<h3 id="heading-6-utiliza-rel-en-enlaces-externos-para-seguridad-y-seo">6. <strong>Utiliza</strong> <code>rel</code> en enlaces externos para seguridad y SEO</h3>
<p>Cuando enlazas a sitios externos, es una buena práctica utilizar el atributo <code>rel</code> con valores como <code>noopener</code> y <code>noreferrer</code> para mejorar la seguridad y el SEO.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"&lt;https://www.ejemplo-externo.com&gt;"</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"noopener noreferrer"</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"_blank"</span>&gt;</span>Visita este sitio externo<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<h3 id="heading-7-implementa-formularios-accesibles">7. <strong>Implementa formularios accesibles</strong></h3>
<p>Los formularios son esenciales para la interacción del usuario. Asegúrate de asociar cada etiqueta <code>&lt;input&gt;</code> con un <code>&lt;label&gt;</code> correspondiente.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"nombre"</span>&gt;</span>Nombre:<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"nombre"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"nombre"</span>&gt;</span>
</code></pre>
<h3 id="heading-8-utiliza-para-fechas-y-horas">8. <strong>Utiliza</strong> <code>&lt;time&gt;</code> <strong>para Fechas y Horas</strong></h3>
<p>La etiqueta <code>&lt;time&gt;</code> es útil para marcar fechas y horas, lo que ayuda a los buscadores y otros servicios a entender esos datos específicamente.</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>La conferencia comienza el <span class="hljs-tag">&lt;<span class="hljs-name">time</span> <span class="hljs-attr">datetime</span>=<span class="hljs-string">"2024-10-05"</span>&gt;</span>5 de octubre de 2024<span class="hljs-tag">&lt;/<span class="hljs-name">time</span>&gt;</span>.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
</code></pre>
<h3 id="heading-9-optimiza-la-carga-de-tus-scripts">9. <strong>Optimiza la carga de tus scripts</strong></h3>
<p>Colocar los <code>&lt;script&gt;</code> al final del cuerpo de tu HTML o usar el atributo <code>async</code> puede mejorar el tiempo de carga de la página.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"app.js"</span> <span class="hljs-attr">async</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></pre>
<h3 id="heading-10-agrega-descripciones-de-accesibilidad-con-aria">10. <strong>Agrega Descripciones de Accesibilidad con ARIA</strong></h3>
<p>Mejora la accesibilidad de tu sitio web utilizando atributos ARIA para describir roles, estados y propiedades de los elementos a las tecnologías de asistencia.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">aria-label</span>=<span class="hljs-string">"Cerrar ventana"</span>&gt;</span>X<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
</code></pre>
<h3 id="heading-11-utiliza-las-listas-ordenadas-y-desordenadas-correctamente">11. Utiliza las <strong>listas ordenadas y desordenadas correctamente</strong></h3>
<p>Las listas son herramientas poderosas para organizar el contenido y hacerlo más legible.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Elemento uno<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Elemento dos<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
</code></pre>
<p>Estos consejos están diseñados para ayudarte a escribir HTML más claro, accesible y funcional. Espero que los encuentres útiles en tu aprendizaje y práctica del desarrollo web.</p>
<h2 id="heading-ejercicios">Ejercicios</h2>
<p>Si quieres practicar aquí te dejo un reto.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Recuerda que puedes ayudarte de la <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/HTML/Element">documentación de MDN</a></div>
</div>

<p>Utiliza el editor de código con el que te sientas más cómodo e intenta aplicar los consejos anteriores para generar un HTML que tenga lo siguiente:</p>
<ul>
<li><strong>Buena estructura de HTML</strong>, intenta que la estructura tenga semántica. En algunos editores online puede que recibas un mensaje como al que aparece a continuación porque estos editores insertan tu HTML directamente en el elemento <code>body</code>, pero no te preocupes por eso.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714976426305/0aa63a2b-8cc9-4ce8-949a-2f6535ae9b35.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Utiliza el elemento <code>main</code></p>
</li>
<li><p>Agrega enlaces a páginas externas, por ejemplo: Twitter</p>
</li>
<li><p>Agrega una marca de tiempo con el elemento <code>time</code></p>
</li>
<li><p>Agrega al menos una lista del tipo que quieras</p>
</li>
<li><p>Utiliza el tag <code>section</code> para dividir las diferentes secciones y agrega un título a cada sección, por ejemplo: Crea una sección para los enlaces, otro para la lista...</p>
</li>
</ul>
<p><a target="_blank" href="https://codepen.io/gartnerleandro/pen/JjVgMBM?editors=1000">Resultado de Ejemplo</a></p>
<p>¡Sigue practicando y nunca dejes de aprender!</p>
]]></content:encoded></item><item><title><![CDATA[Conceptos base de HTML]]></title><description><![CDATA[HTML es un lenguaje de marcado que define la estructura del contenido en base a unos elementos llamados etiquetas. Existen muchísimas etiquetas en este enlace podrás verlas todas, pero no te asustes, las irás asimilando a medida que necesites utiliza...]]></description><link>https://blog.gartnerleandro.es/conceptos-base-de-html</link><guid isPermaLink="true">https://blog.gartnerleandro.es/conceptos-base-de-html</guid><category><![CDATA[conceptos básicos de html]]></category><category><![CDATA[aprender html]]></category><category><![CDATA[estructura de html]]></category><category><![CDATA[Programación]]></category><category><![CDATA[programación web]]></category><category><![CDATA[programación para principiantes]]></category><category><![CDATA[HTML tags ]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Mon, 29 Apr 2024 06:48:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714084882391/02f91f60-1ab7-4337-9038-1c07e17acefa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>HTML es un lenguaje de marcado que define la estructura del contenido en base a unos elementos llamados etiquetas. Existen muchísimas etiquetas en <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/HTML/Element">este enlace</a> podrás verlas todas, pero no te asustes, las irás asimilando a medida que necesites utilizarlas.</p>
<h2 id="heading-estructura-de-las-etiquetas">Estructura de las etiquetas</h2>
<p>Estas etiquetas tienen una estructura, la mayoría de ellas necesitan una etiqueta de apertura y una etiqueta de cierre para indicar dónde empieza y dónde acaba el elemento. Veamos un ejemplo.</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Hola mundo<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
</code></pre>
<p>En el código anterior podemos ver lo siguiente:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714066633962/b605d2ad-fa5a-49a1-a0dd-9d8266bc333c.png" alt="Explicación gráfica de la morfología de una etiqueta HTML" class="image--center mx-auto" /></p>
<p>Las partes principales que vemos en la imagen y en el código son:</p>
<ol>
<li><p><strong>La etiqueta de apertura:</strong> consiste en el nombre del elemento (en este caso, <code>p</code>), encerrado por <strong>paréntesis angulares</strong> (<code>&lt;</code> <code>&gt;</code>) de apertura y cierre. Indica dónde empieza a tener efecto un elemento, en este caso un párrafo.</p>
</li>
<li><p><strong>El contenido:</strong> es lo que agrupa el elemento en su interior, en este caso solo texto.</p>
</li>
<li><p><strong>La etiqueta de cierre:</strong> es igual que la etiqueta de apertura, excepto que incluye una barra de cierre ( <code>/</code> ) antes del nombre de la etiqueta indicando que termina un elemento, en este caso dónde termina el párrafo.</p>
</li>
<li><p><strong>El elemento:</strong> es el conjunto formado por la etiqueta de apertura, el contenido y la etiqueta de cierre.</p>
</li>
</ol>
<h3 id="heading-excepciones">Excepciones</h3>
<p>Como en toda regla, existen excepciones a esta estructura, y es que hay etiquetas que no pueden tener contenido, es decir, no pueden agrupar nada en su interior, por tanto, estas etiquetas son <strong>elementos vacíos</strong>. Veamos un ejemplo de un elemento vacío:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://to.lk/YmspRz"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"un ordenador con código"</span> /&gt;</span>
</code></pre>
<p>La estructura del elemento anterior tiene la siguiente forma:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714081479617/1cac34a9-a1d2-44fa-a3ce-532880d93aed.png" alt="Morfología de una etiqueta de auto cierre de tipo img" class="image--center mx-auto" /></p>
<p>En este ejemplo podemos observar algunas diferencias con el anterior, lo primero que podemos destacar es que el elemento no tiene etiqueta de cierre, en su lugar, esta etiqueta acaba con una barra de cierre ( <code>/</code> ) antes del paréntesis angular final de la etiqueta.</p>
<p>Cuando una etiqueta se crea de esta manera, se dice que es una etiqueta "<em>auto cerrada</em>" o más conocida por su término en inglés <em>self closing tag</em>.</p>
<p>Además, podemos ver que al no tener una etiqueta de cierre separada, esta no puede tener contenido en su interior.</p>
<h3 id="heading-atributos">Atributos</h3>
<p>Las etiquetas, tanto normales como de auto cierre pueden tener además otro elemento llamado atributo.</p>
<p>Los atributos contienen información adicional del elemento, estros atributos pueden servir para diferentes funciones. En el caso de la imagen anterior, el atributo <strong>src</strong> le indicará a la etiqueta en que lugar tiene que buscar la imagen que se tiene que mostrar, y el atributo <strong>alt</strong> establecerá el texto alternativo que aparecerá si la imagen no se puede cargar de manera correcta o se utilizará por los lectores de pantalla para describir la imagen.</p>
<p>Por tanto, el texto <strong>alt</strong> debe proporcionarle al lector la suficiente información como para que este tenga una buena idea de qué muestra la imagen sin poder verla.</p>
<p>Los atributos deben seguir algunas normas:</p>
<ol>
<li><p>Debe haber un espacio entre el nombre de la etiqueta y el atributo.</p>
</li>
<li><p>Debe haber un espacio entre los atributos.</p>
</li>
<li><p>El nombre del atributo va seguido de un signo de igual ( = )</p>
</li>
<li><p>A continuación del signo igual aparecerá el valor del atributo entre comillas ( " " )</p>
</li>
<li><p>En caso de ser un elemento con etiqueta de apertura y de cierre, los atributos siempre se incluirán en la etiqueta de apertura, nunca en la de cierre.</p>
</li>
</ol>
<h2 id="heading-anidacion-de-etiquetas">Anidación de etiquetas</h2>
<p>Ahora que ya sabes que es una etiqueta y que algunas etiquetas pueden tener contenido en su interior, te voy a hablar sobre la anidación de etiquetas. Se llama <strong>anidamiento</strong> al hecho de colocar elementos dentro de otros.</p>
<p>Por ejemplo, si se quiere resaltar una palabra dentro de un texto se puede hacer uso de la etiqueta <strong>&lt;strong&gt;</strong>. Veamos un ejemplo.</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Hola <span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>mundo<span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span> en etiqueta bien anidada<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://codepen.io/gartnerleandro/pen/GRLLOpG?editors=1000">https://codepen.io/gartnerleandro/pen/GRLLOpG?editors=1000</a></div>
<p> </p>
<p>El elemento <strong>&lt;strong&gt;</strong> se utiliza para marcar con énfasis lo que haya en su interior (<a target="_blank" href="https://developer.mozilla.org/es/docs/Web/HTML/Element/strong">más información</a>).</p>
<p>Es importante asegurarse de que los elementos estén correctamente anidados, de lo contrario el resultado podría no ser el esperado. Ejemplo de una etiqueta mal anidada:</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Hola <span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>mundo<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>en etiqueta mal anidada<span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span>
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://codepen.io/gartnerleandro/pen/bGJJYEz?editors=1000">https://codepen.io/gartnerleandro/pen/bGJJYEz?editors=1000</a></div>
<p> </p>
<p>Los elementos deben abrirse y cerrarse de manera ordenada de forma que siempre haya uno dentro de otro y no estén entrelazados.</p>
<p>De lo contrario, los navegadores intentarán adivinar la estructura correcta y puede que el resultado no sea el esperado, como en el ejemplo.</p>
<h2 id="heading-ejercicios-interactivos">Ejercicios interactivos</h2>
<p>Ahora que ya conoces algunos aspectos básicos del HTML te invito a que le eches un vistazo al listado de etiqueta de <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/HTML/Element">este enlace</a> e intentes hacer los siguientes ejercicios en un editor online como <a target="_blank" href="https://codepen.io/">codepen</a>. Después de cada ejercicio tendrás la solución para ver si has acertado.</p>
<h3 id="heading-ejercicio-1">Ejercicio 1</h3>
<p>Crea dos elementos de imagen, uno que tenga el atributo <strong>src</strong> y el atributo <strong>alt,</strong> y otro elemento imagen que solo tenga el atributo <strong>alt</strong> para ver qué ocurre si una imagen puede cargar correctamente y qué ocurre si la imagen no puede cargar.</p>
<p>El objetivo del ejercicio es ver qué ocurre en cada caso y para qué sirven los atributos.</p>
<p><a target="_blank" href="https://codepen.io/gartnerleandro/pen/WNWmGRO">Solución</a></p>
<h3 id="heading-ejercicio-2">Ejercicio 2</h3>
<p>Intenta replicar la siguiente imagen teniendo en cuenta los diferentes tamaños de texto:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714210805454/2984253d-3b7e-4c63-bf7e-d218da911e5c.png" alt="Resultado esperado del ejercicio 2" class="image--center mx-auto" /></p>
<p>El objetivo es mostrar información con diferentes tamaños de texto de más importante a menos importante, por ejemplo:</p>
<p>Texto 1: Tu nombre (Tamaño de letra grande)</p>
<p>Texto 2: Tu apellido (Tamaño de letra algo más pequeño que el texto 1)</p>
<p>Texto 3: Tu edad (Tamaño de letra algo más pequeño que el texto 2)</p>
<p>Texto 4: Una descripción (Tamaño de letra de un párrafo)</p>
<p><a target="_blank" href="https://developer.mozilla.org/es/docs/Learn/Getting_started_with_the_web/HTML_basics#encabezados">Pista</a></p>
<p><a target="_blank" href="https://codepen.io/gartnerleandro/pen/poBYEea">Solución</a></p>
<h3 id="heading-ejercicio-3">Ejercicio 3</h3>
<p>Intenta replicar la siguiente imagen:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714211187797/c3f0a2b3-3881-4208-88e1-1d69b53ead17.png" alt="Resultado esperado del tercer ejercicio" class="image--center mx-auto" /></p>
<p>Crea un elemento de tipo párrafo con el texto: "Este es el tercer ejercicio que hago de etiquetas HTML" y haz que el texto "<strong>tercer ejercicio</strong>" tenga más énfasis que el resto, a continuación, agrega al final del párrafo una imagen con los siguientes atributos:</p>
<p><strong>src:</strong> <a target="_blank" href="https://to.lk/UJFSgn">https://to.lk/UJFSgn</a></p>
<p><strong>alt:</strong> "gato bebé dentro de un calzado blanco"</p>
<p><a target="_blank" href="https://codepen.io/gartnerleandro/pen/jORJMwa">Solución</a></p>
<h2 id="heading-conclusion">Conclusión</h2>
<p>Si has llegado hasta aquí, enhorabuena 🎉, vas por el camino correcto, sigue practicando y conseguirás tus objetivos. Te animo a que intentes crear tu propia estructura HTML a tu gusto utilizando el listado de etiquetas a ver qué consigues crear.</p>
<p>Espero que este breve recorrido por los conceptos básicos de HTML te haya resultado útil y te inspire a seguir aprendiendo y experimentando.</p>
<p>¡Nos vemos en el próximo post!</p>
]]></content:encoded></item><item><title><![CDATA[Iniciando en la Programación: Guía para Principiantes]]></title><description><![CDATA[Si estás pensando en sumergirte en el campo de la programación, pero no sabes por dónde empezar, has llegado al lugar correcto. En este post, te guiaré a través de los pasos iniciales, exploraremos los diferentes caminos que puedes tomar en la progra...]]></description><link>https://blog.gartnerleandro.es/iniciando-en-la-programacion-guia-para-principiantes</link><guid isPermaLink="true">https://blog.gartnerleandro.es/iniciando-en-la-programacion-guia-para-principiantes</guid><category><![CDATA[programación web]]></category><category><![CDATA[programación para principiantes]]></category><category><![CDATA[guía de programación]]></category><category><![CDATA[cómo empezar a programar]]></category><category><![CDATA[iniciación a la programación]]></category><category><![CDATA[Programación]]></category><dc:creator><![CDATA[Leandro Gartner]]></dc:creator><pubDate>Mon, 22 Apr 2024 21:11:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713822814663/e6819ad9-3ee6-41a7-aa31-5b0cb2e8cac5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Si estás pensando en sumergirte en el campo de la programación, pero no sabes por dónde empezar, has llegado al lugar correcto. En este post, te guiaré a través de los pasos iniciales, exploraremos los diferentes caminos que puedes tomar en la programación y te daré algunos consejos sobre cómo comenzar específicamente en la programación web.</p>
<h2 id="heading-que-necesito-para-empezar-a-programar">¿Qué necesito para empezar a programar?</h2>
<p>Para comenzar en la programación, realmente necesitas muy poco, y aquí está la lista básica:</p>
<p><strong>Un ordenador:</strong> No necesitas el mejor del mercado; un ordenador con capacidad para ejecutar un editor de texto y un navegador es suficiente.</p>
<p><strong>Acceso a internet:</strong> Fundamental para buscar recursos, documentación, y participar en comunidades de programación.</p>
<p><strong>Ganas de aprender:</strong> La programación requiere paciencia y mucha práctica. ¡La perseverancia será tu mejor aliada!</p>
<p><strong>Editor de código:</strong> Algo tan simple como <a target="_blank" href="https://code.visualstudio.com/">VS Code</a> es un excelente punto de partida. Es gratuito, popular y tiene soporte para una gran cantidad de lenguajes de programación. También existen algunos editores de código online en los que puedes ver los cambios en tiempo real como <a target="_blank" href="https://codesandbox.io/">codesandbox</a> o <a target="_blank" href="https://codepen.io/">codepen</a>.</p>
<p><strong>Recursos educativos:</strong> Hay muchos cursos gratuitos y de pago en línea. Sitios como <a target="_blank" href="https://www.codecademy.com/">Codecademy</a>, <a target="_blank" href="https://www.freecodecamp.org/">freeCodeCamp</a> y <a target="_blank" href="https://es.khanacademy.org/">Khan Academy</a> ofrecen excelentes tutoriales para principiantes.</p>
<h2 id="heading-que-tipos-de-caminos-hay-dentro-de-la-programacion">¿Qué tipos de caminos hay dentro de la programación?</h2>
<p>La programación es un campo vasto y diverso, con muchas especializaciones. Aquí te muestro algunos caminos comunes que podrías considerar:</p>
<p><strong>Desarrollo Web:</strong> Dividido principalmente en desarrollo frontend (lo que ves en un sitio web) y backend (la infraestructura detrás de escenas, el servidor).</p>
<p><strong>Desarrollo de Software:</strong> Enfocado en la creación de software para ordenadores y dispositivos móviles.</p>
<p><strong>Ciencia de Datos:</strong> Utiliza la programación para analizar datos y extraer conclusiones. Requiere conocimientos de estadística y matemáticas.</p>
<p><strong>Inteligencia Artificial:</strong> Involucra algoritmos de aprendizaje automático, procesamiento de lenguaje natural y robótica.</p>
<p><strong>Desarrollo de Videojuegos:</strong> Combina creatividad con programación para crear videojuegos interactivos.</p>
<h2 id="heading-como-empezar-en-la-programacion-web">¿Cómo empezar en la programación web?</h2>
<p>Si te interesa el desarrollo web, una buena estrategia es comenzar aprendiendo las tecnologías fundamentales que todo desarrollador web debe manejar:</p>
<p><strong>HTML:</strong> El lenguaje de marcado para crear la estructura de las páginas web.</p>
<p><strong>CSS:</strong> Usado para estilizar elementos HTML y hacer que la página se vea bien y tenga algunas animaciones.</p>
<p><strong>JavaScript:</strong> Un lenguaje de programación que te permite hacer que las páginas web sean interactivas y dinámicas.</p>
<p>Una vez que tengas una comprensión básica de estos tres conceptos, puedes comenzar a explorar herramientas más avanzadas como frameworks y bibliotecas.</p>
<p>Por ejemplo, <a target="_blank" href="https://es.react.dev/">React</a> es una biblioteca de JavaScript muy popular para construir interfaces de usuario dinámicas y modernas, aunque personalmente, te recomiendo entender los fundamentos básicos primero ya que eso te facilitará mucho las cosas, porque si entiendes los conceptos básicos y cómo funciona el lenguaje, utilizar más adelante un framework será algo muy sencillo.</p>
<h3 id="heading-ideas-de-proyectos-iniciales">Ideas de proyectos iniciales</h3>
<p>Utiliza editores online como <a target="_blank" href="https://codesandbox.io/">codesandbox</a> o <a target="_blank" href="https://codepen.io/">codepen</a> para practicar HTML. Apóyate en la web de <a target="_blank" href="https://developer.mozilla.org/es/docs/Web/HTML/Element">MDN</a> para ver toda la lista de etiquetas HTML que existen e intenta crear algo que tenga sentido.</p>
<p>Por ejemplo, una página en la que tengas diferentes tipos de encabezados con tamaños diferentes, algunos párrafos de ejemplo, imágenes, links, etc..</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713819074965/a7d978ff-ee8c-4de2-bac0-dd038d73919d.png" alt="Captura de pantalla de un proyecto de ejemplo de HTML básico" class="image--center mx-auto" /></p>
<p>Este primer contacto con el lenguaje de marcado HTML te ayudará a empezar a familiarizarte con el editor de código y aprenderás a utilizar algunas etiquetas HTML que forman el esqueleto de las webs de todo el mundo.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text">No es necesario que memorices todas las etiquetas que existen ni como se utilizan, las irás asimilando a medida que las vayas aplicando en diferentes proyectos.</div>
</div>

<h2 id="heading-consejos-finales">Consejos Finales</h2>
<p><strong>Practica mucho:</strong> La mejor manera de aprender programación es escribiendo código. Comienza con pequeños proyectos y aumenta la complejidad a medida que mejoras.</p>
<p><strong>Únete a comunidades</strong>: Participar en foros como <a target="_blank" href="https://stackoverflow.com/">Stack Overflow</a> o <a target="_blank" href="https://www.reddit.com/">Reddit</a>, y unirte a grupos locales o en línea puede proporcionarte apoyo y dirección.</p>
<p><strong>Sigue aprendiendo</strong>: La tecnología cambia rápidamente. Mantente actualizado con las últimas tendencias y tecnologías emergentes.</p>
<p>Espero que este post te haya proporcionado un buen punto de partida en tu aventura de programación. ¡No te desanimes por los desafíos! Cada programador empezó siendo un principiante en algún momento. Con dedicación y curiosidad, estarás creando cosas increíbles antes de lo que imaginas.</p>
]]></content:encoded></item></channel></rss>