<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Mailén Hernández - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Mailén Hernández - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 19:37:28 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/mailentranslations/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ ¿Por qué utilizar Linux? 11 razones por las que Linux es increíble ]]>
                </title>
                <description>
                    <![CDATA[ En este artículo, veremos las razones por la cual los desarrolladores aman Linux para que puedas decidir si es ideal para ti.  Mejoras constantes y eficientes Las actualizaciones de Linux se realizan por colaboradores de todo el mundo. Con este tipo de soporte, los bugs se documentan y se ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/11-razones-por-las-que-linux-es-increible/</link>
                <guid isPermaLink="false">5ff2191b8c7cd154bb98393e</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mailén Hernández ]]>
                </dc:creator>
                <pubDate>Thu, 11 Feb 2021 04:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/02/photo-1452697620382-f6543ead73b5-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>En este artículo, veremos las razones por la cual los desarrolladores aman Linux para que puedas decidir si es ideal para ti. </p><h2 id="mejoras-constantes-y-eficientes"><strong>Mejoras constantes y eficientes</strong></h2><p>Las actualizaciones de Linux se realizan por colaboradores de todo el mundo. Con este tipo de soporte, los <em>bugs</em> se documentan y se resuelven rápidamente. Además, ya que los desarrolladores también son usuarios, tienen la motivación adecuada para asegurarse que las actualizaciones satisfacen las necesidades de los usuarios y que estén diseñadas para funcionar de forma óptima. </p><h2 id="menor-riesgo">Menor riesgo</h2><p>El programa<em> </em>es tan bueno como su soporte. Imagínate que una parte del programa<em> </em>es creado por la compañía XYZ y que después la misma quiebra u otra compañía la compra y decide dejar de brindar soporte. El programa no tendría más mejoras ni arreglos y, por lo tanto, su utilidad se perdería con el tiempo. Ninguna entidad o compañía es dueña de Linux por lo que esto nunca ocurriría. Cualquiera puede contribuir con Linux. Perder soporte es poco probable debido a su inmensa popularidad y uso. </p><h2 id="es-ligero">Es ligero</h2><p>Los requisitos de Linux para correr en un sistema son mucho más bajos que los requisitos de Windows o Mac. Con la distribución adecuada de Linux, un usuario puede tener una computadora modesta y Linux le brindará el valor del sistema. El espacio del disco y la memoria utilizada también pueden ser bajos. Algunas distribuciones son adecuadas las CPU que se remontan a la familia <em>pentium</em>, otras tienen un requisito de tan solo 128 MB de memoria RAM y más o menos la misma cantidad para el espacio del disco. </p><h2 id="altamente-documentado-tanto-para-usuarios-principiantes-como-para-avanzados">Altamente documentado tanto para usuarios principiantes como para avanzados</h2><p>Linux tiene una comunidad activa compuesta por desarrolladores que están dispuestos a compartir su conocimiento (¡Como FreeCodeCamp!). Hay utilidades de líneas de comando incorporadas en Linux que brindan documentación en los comandos, librerías, estándares, entre otros (Páginas de <a href="https://en.wikipedia.org/wiki/Man_page">man</a> e <a href="https://en.wikipedia.org/wiki/Info_(Unix">info</a>) y hay documentaciones disponibles en línea en una variedad de formatos entre los que se incluye el <a href="https://tldp.org/">Proyecto de documentación de Linux</a>, <em><a href="https://www.linuxquestions.org/">LinuxQuestions</a>, <a href="https://serverfault.com/">ServerFault</a> </em>y <a href="https://wiki.archlinux.org/">The Arch Wiki</a>. </p><p>Además de la documentación, hay muchas comunidades de ayuda y de bienvenida para que los nuevos usuarios pregunten tales como <a href="https://askubuntu.com/" rel="nofollow">Ask Ubuntu</a> y <a href="https://www.reddit.com/r/linuxquestions/" rel="nofollow">Reddit’s r/linuxquestions</a>.</p><p>Hay certificaciones que pueden realizarse a un ritmo propio y que son reconocidas en la industria de TI (<a href="https://certification.comptia.org/certifications/linux" rel="nofollow">CompTIA’s Linux+</a> y <a href="https://www.lpi.org/" rel="nofollow">LPI’s LPIC tests</a>). Aunque no sea un requisito, al aprender <a href="https://en.wikipedia.org/wiki/C_(programming_language" rel="nofollow">C</a>, el usuario podrá revisar el código de Linux para ver qué está ejecutando. </p><h2 id="soporte-empresarial">Soporte empresarial</h2><p>El mundo depende del soporte de Linux a los sistemas críticos por lo que la demanda no desaparecerá. Es importante no solo para aquellos que contribuyen con Linux sino que también para aquellos que lo apoyan (¡Trabajos!). El soporte de Linux es cada vez más crítico en TI y también tener conocimiento como desarrollador hará que estén más capacitados y sean más útiles (es decir <a href="https://medium.com/chris-messina/the-full-stack-employee-ed0db089f0a1#.ubttrv255" rel="nofollow"><em>Full stack developers</em></a>). </p><h2 id="interoperabilidad-con-otros-sistemas-operativos">Interoperabilidad con otros sistemas operativos</h2><p>Linux tiene soporte de controladores para los sistemas de archivos NTFS y HFS+ (utilizados en Windows y Mac) y también <a href="https://www.samba.org/" rel="nofollow">Samba</a> para el soporte de servicio de archivos/impresión en Windows. </p><h2 id="mejor-soporte-para-hardware">Mejor soporte para <em>hardware</em></h2><p>Con otros sistemas operativos, un usuario por lo general tendría que ir al sitio <em>web </em>del fabricante para obtener soporte de controladores para diferentes tipos de <em>hardware. </em>El núcleo de Linux soporta a una mayoría de <em>hardwares</em> automáticamente a través de <em>plug-and-play </em>(mayormente gracias a la comunidad de <em>software </em>libre). Algunos fabricantes también desarrollaron versiones de Linux de sus controladores por lo que se pueden instalar fácilmente por medio del repositorio del programa de una distribución o instalando de forma manual los binarios proporcionados. </p><h2 id="habilidad-y-compatibilidad-del-programa">Habilidad y compatibilidad del programa</h2><p>Linux tiene una rica lista de aplicaciones disponibles. Tiene aplicaciones de <a href="https://blog.documentfoundation.org/blog/2020/02/04/libreoffice-openoffice-org-and-staroffice-timeline/">LibreOffice</a>, navegadores <em>web </em>(<a href="https://www.google.com/chrome/">Google Chrome</a> y <a href="https://www.mozilla.org/en-US/firefox/new/">Mozilla Firefox</a>), <a href="http://www.videolan.org/vlc/">reproductores multimedia</a>, <a href="https://www.gimp.org/">imágenes</a>/<a href="https://www.openshot.org/">procesadores de video</a>, etc. Para video juegos, <a href="http://store.steampowered.com/about/" rel="nofollow">Steam</a> corre en Linux y tiene muchos juegos compatibles. Las aplicaciones de Windows también pueden correr en Linux (lee <a href="https://www.winehq.org/" rel="nofollow">Wine</a> para obtener más información).</p><h2 id="creado-para-el-desarrollo"><strong>Creado para el desarrollo</strong></h2><p>Debido a que Linux originalmente fue creado por desarrolladores para desarrolladores, los mismos han dedicado muchísimo tiempo y esfuerzo para perfeccionar las herramientas que utilizarían. Tiene una consola poderosa que puede utilizarse para realizar una variedad de tareas de programación y de administración (<a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell" rel="nofollow">Bash</a> es el más popular y es la opción predeterminada para Linux). Mientras que Linux tiene un "bloc de notas" &nbsp;equivalente a <a href="https://en.wikipedia.org/wiki/Gedit">gedit</a>, también provee una variedad de editores basados en textos poderosos y personalizables como <a href="https://en.wikipedia.org/wiki/Vim_(text_editor)" rel="nofollow">Vim</a> y <a href="https://en.wikipedia.org/wiki/Emacs" rel="nofollow">Emacs</a> (se recomienda que los usuarios de Linux conozcan al menos uno de estos editores). También están los IDE disponibles para desarrollo web como <a href="https://atom.io/">Atom</a>, <a href="http://www.aptana.com/" rel="nofollow">Aptana</a>/<a href="https://eclipse.org/" rel="nofollow">Eclipse</a>, <a href="https://www.sublimetext.com/" rel="nofollow">Sublime</a>, <a href="http://komodoide.com/" rel="nofollow">KomodoIDE</a>, entre otros. Linux también puede utilizar programas como <a href="https://httpd.apache.org/" rel="nofollow">Apache</a> para configurar servidores locales para pruebas, <a href="https://git-scm.com/" rel="nofollow">Git</a> para control de versiones, entre otras herramientas/lenguajes como <a href="https://nodejs.org/en/" rel="nofollow">Node.js</a>/<a href="https://www.ruby-lang.org/en/" rel="nofollow">Ruby</a>/<a href="http://sass-lang.com/" rel="nofollow">SaSS</a>/<a href="https://www.heroku.com/" rel="nofollow">Heroku</a> ya que todos tienen soporte en Linux y tiene herramientas de líneas de comando que pueden utilizarse en lugar de una interfaz gráfica de usuario (GUI). </p><h2 id="personalizable">Personalizable</h2><p>Con Linux, el usuario puede cambiar el diseño del escritorio y los temas, añadir <em>widgets</em> y más. Estos cambios se pueden realizar con entornos de escritorios. Los diferentes entornos tienen diferentes opciones. Algunos populares son: KDE, GNOME, XFCE, Pantheon. </p><h2 id="es-gratuito">Es gratuito</h2><p>¿Cómo se le gana a eso?</p><h2 id="para-obtener-m-s-informaci-n-sobre-linux-visita-">Para obtener más información sobre Linux visita: </h2><ul><li><a href="https://www.freecodecamp.org/news/basic-linux-commands-bash-tips-you-should-know/">Los comandos básicos de Linux que deberías saber</a></li><li><a href="https://www.freecodecamp.org/news/the-best-linux-tutorials/">Los mejores tutoriales para Linux</a></li></ul><p>Traducido del artículo<strong> - <a href="https://www.freecodecamp.org/news/why-use-linux-11-reasons-linux-is-awesome/">Why Use Linux? 11 Reasons Linux is Awesome</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Por qué JavaScript es el lenguaje del futuro? ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript fue una de los primeros lenguajes de programación que aprendí. Bueno, en realidad, empecé con HTML y CSS. Como la mayoría de desarrolladores web, empezamos a aprender JavaScript sin pensarlo dos veces. Esto sucede porque se integra bien con HTML y con CSS y (a la vez) mejora tus ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/por-que-javascript-es-el-lenguaje-del-futuro/</link>
                <guid isPermaLink="false">5fdf9a878c7cd154bb97bb35</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mailén Hernández ]]>
                </dc:creator>
                <pubDate>Wed, 10 Feb 2021 04:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/02/jsposter-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>JavaScript fue una de los primeros lenguajes de programación que aprendí. Bueno, en realidad, empecé con HTML y CSS. Como la mayoría de desarrolladores <em>web</em>, empezamos a aprender JavaScript sin pensarlo dos veces. Esto sucede porque se integra bien con HTML y con CSS y (a la vez) mejora tus habilidades con HTML/CSS. Desarrollé aplicaciones y juegos en varios lenguajes de programación como Java, Swift, C++ y Dart. Sin embargo, la flexibilidad que nos brinda JavaScript es inigualable (aunque se lo puede considerar malo para los principiantes ya que se requieren más opciones para realizar tareas sencillas). </p><p>Hoy, JavaScript es uno de los lenguajes de programación más poderosos del mundo por su rendimiento y omnipresencia. </p><p>En lo personal, creo que JavaScript tiene el potencial de utilizarse en industrias reconocidas como Aprendizaje automático y Análisis de datos, donde todavía se usa muchísimo Python. ¡Ya está pasando con herramientas como Tensorflow.js!</p><p>Sin embargo, este fenómeno no se daba antes. Antes, JavaScript era un lenguaje débil e inadecuado por lo que era mal visto. JavaScript era para "perdedores".</p><p>Pero esto ya no sucede. Veamos cómo JavaScript cambió el juego en los últimos 10 años, por qué se volvió más fuerte que nunca y por qué está aquí para quedarse. </p><h1 id="v8-la-bestia-que-impulsa-javascript"><strong>V8: La bestia que impulsa JavaScript</strong></h1><p>V8 es un motor de JavaScript. ¿Qué es un motor de JavaScript? Un motor de JavaScript es un intérprete que ejecuta el código de JavaScript. Un motor de JavaScript puede ser implementado como un intérprete estándar o un compilador <em>just-in-time</em> (JIT) que compila JavaScript en códigos de <em>bytes</em> en alguna forma. </p><p>V8 es un motor de JavaScript y WebAssembly JIT de código abierto de Google de alto rendimiento que está escrito en C++. Se utiliza en Chrome y en Node.js entre otros. V8 puede ejecutarse independientemente o puede incrustarse en cualquier aplicación de C++.</p><p>Ésta es una parte de programa que optimiza el código JS y lo convierte en código máquina para la CPU y para ejecutarse. Algunas de las tareas que se pueden realizar con V8 incluyen:</p><ol><li>Recolección de basura</li><li>Compilación al código de máquina</li><li><em>Inline caching</em></li><li><em>Pointer compression</em></li><li>Y mucha más optimización</li></ol><p>De hecho, el <em>pointer compression </em>es una técnica reciente en V8 para mejorar la optimización de memoria sin tener ningún efecto en el rendimiento. Si eres <em>geek</em>, puedes leer información detallada sobre cómo se implementa en el blog oficial de V8.</p><p>En resumen, puedes escribir JavaScript y dormir tranquilo porque tu código está en buenas manos.</p><h1 id="ecosistema-maduro-y-comunidad"><strong>Ecosistema maduro y comunidad</strong></h1><p></p><p>JavaScript tiene uno de los ecosistemas más maduros que un lenguaje podría tener (si es que no es el más maduro). La comunidad de JavaScript es grande y la barrera de ingreso está muy baja. </p><p>Puedes abrir un navegador (están en todas las computadoras personales), abrir la consola y encontrarás un motor de JS esperando a que ejecutes el código. Esto nunca sucedía con otro lenguaje de programación de tal complejidad. </p><p>Y como si la comunidad no fuese lo suficiente amplia, tenemos sistemas de paquetes npm y yarn. Hay un paquete para todo en el registro npm (desde creación de cadenas al azar hasta manejo de <em>streams</em> y búfers en JavaScript). Como dicen los desarrolladores de JavaScript:</p><p>"Lo que se puede hacer en JavaScript, se hará en JavaScript".</p><p>Creo que es gracioso pero discreto. </p><p>Si empiezas como principiante, es muy poco probable que te topes con un problema que nadie más se haya topado antes. Esto sucede porque todos los problemas posibles en JavaScript básico ya han sido consultados y archivados en sitios como Stack Overflow. </p><p>Los marcos y las librerías como React, Angular y Vue están construyendo el camino para el desarrollo de futuras aplicaciones. Están cambiando la perspectiva hacia la programación declarativa en vez de la programación imperativa. Lo que sería el "qué en vez del cómo". Esto le permite a los desarrolladores desarrollar aplicaciones de calidad sin tener que preocuparse de que el código sea de alto rendimiento. </p><h2 id="omnipresencia">Omnipresencia </h2><p>JavaScript se utiliza para:</p><ol><li><em>Front end</em> (navegadores)</li><li><em>Back end</em> (Node, Deno)</li><li>Android/iOs (React Native, NativeScript, etc.)</li><li>Escritorio (Electron)</li><li>Híbridos (Ionic)</li></ol><p>¿Por qué esto es posible? Los motores de JS como el V8 están escritos en C/C++ y se pueden compilar en sistemas incrustados. Para otras plataformas, ya que los navegadores siempre están presentes (como en Android/ iOS), se envían con motores JS y después pueden ser utilizado para ejecutar cualquier código JS, incluso con aplicaciones nativas como es el caso de React Native. </p><p><strong>Características novedosas y avances<br></strong>Los estándares de JavaScript están encabezados por la comunidad ECMA-262 TC39 y trabajan bastante duro. ECMAScript publica estándares nuevos de JavaScript todos los años (lee las nuevas características ECMAScript2020). Como desarrollador, puedes pedir que se añadan nuevas características al lenguaje. </p><p>Por ejemplo, en la imagen de abajo se muestran las características novedosas pendientes que pueden estar en los estándares de JavaScript en un futuro cercano: </p><p>En el siguiente enlace, puedes leer todas las propuestas: <a href="https://github.com/tc39/proposals">TC39 Proposals</a>.</p><p><strong>JavaScript es RÁPIDO y AMPLIABLE</strong></p><p>Claro, en realidad, nadie le gana a C/C++/Rust pero JavaScript es rápido, ya que V8 genera código altamente optimizado al monitorear cómo tu código se ejecuta, retrasar <em>bits </em>de ejecución que no se utilizan y optimizar los segmentos de código que se utilizan una y otra vez. Especialmente, al comparar con los competidores más cercanos como Python, con los avances en V8, JavaScript tiene mayor rendimiento y memoria eficiente. </p><p>JavaScript (Node) se puede ampliar (con superconjuntos como TypeScripts). Ya que se ejecuta en una arquitectura de un solo hilo, las personas suelen criticar a Node al no tener un ambiente de hilos pero, en realidad, esto no tiene mucha importancia. </p><p>La forma en la que se amplían las aplicaciones de Node no es la misma que la forma en la que se amplía una aplicación multihilo. Node en inglés significa "nodo" (un único nodo en un árbol de procesos). Node se amplía al ejecutar múltiples instancias del mismo y gestionar el grupo. </p><p>JavaScript lidera el evento asincrónico impulsado por el modelo de programación de la industria y no necesita ningún hilo para amplíarse. En cambio, los procesos individuales de Node<em> </em>se podrían crear para gestionar y utilizar el núcleo completo de la CPU. Más adelante, brindaré más información sobre la ampliación de Node<em>. </em></p><h2 id="en-conclusi-n">En conclusión</h2><p>Adoro JavaScript y utilizándolo cree una plataforma de desarrolladores para desarrolladores como tú. En la misma, no solo puedes aprender JavaScript sino que también otros lenguajes como C, C++, Node, Python, entre otros. Únete sin costo alguno y aprende junto a otros desarrolladores desde tu navegador. </p><p>JavaScript está aquí para quedarse y liderar la industria de esta época. ¿Piensas igual? Cuéntame en mi Twitter e Instagram - conectémonos. </p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/mehulmpt/">Mehul Mohan</a> - <a href="https://www.freecodecamp.org/news/future-of-javascript/">Why JavaScript Is the Programming Language of the Future</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Operadores lógicos de JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Los operadores lógicos comparan valores booleanos y devuelven respuestas booleanas. Hay dos tipos de operadores lógicos AND y OR. Estos operadores por lo general se escriben && (AND) y || (OR).  Operador lógico AND (&&) Este operador lógico compara dos expresiones. Si la primera se evalúa como "verdadera" (truthy), ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/operadores-logicos-javascript/</link>
                <guid isPermaLink="false">5fdba7a08c7cd154bb97903e</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mailén Hernández ]]>
                </dc:creator>
                <pubDate>Sat, 26 Dec 2020 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1528724747537-1634153aa3c8.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Los operadores lógicos comparan valores booleanos y devuelven respuestas booleanas. Hay dos tipos de operadores lógicos AND y OR. Estos operadores por lo general se escriben <code>&amp;&amp;</code> (AND) y <code>||</code> (OR). </p><h2 id="operador-l-gico-and-">Operador lógico AND (&amp;&amp;)</h2><p>Este operador lógico compara dos expresiones. Si la primera se evalúa como "verdadera" (truthy), la sentencia devolverá el valor de la segunda expresión. Si la primera expresión se evalúa como "falsa"(falsy), la sentencia devolverá el valor de la primera expresión. </p><p>Cuando solo se incluyen valores booleanos (true o false), se devuelve verdadero si las dos expresiones son verdaderas. Si una o ambas expresiones son falsas, la sentencia completa se devolverá como falsa. </p><pre><code class="language-js">true &amp;&amp; true //devuelve el segundo valor, verdadero
true &amp;&amp; false //devuelve el segundo valor, falso
false &amp;&amp; false //devuelve el primer valor, falso
123 &amp;&amp; 'abc' // devuelve el segundo valor, 'abc'
'abc' &amp;&amp; null //devuelve el segundo valor, nulo
undefined &amp;&amp; 'abc' //devuelve el primer valor, indefinido
0 &amp;&amp; false //devuelve el primer valor, 0</code></pre><h2 id="operador-l-gico-or-">Operador lógico OR ( || )</h2><p>Este operador lógico compara dos expresiones. Si la primera se evalúa como "falsa", la sentencia devolverá el valor de la segunda expresión. Si la primera se evalúa como "verdadera", la sentencia devolverá el valor de la primera expresión. </p><p>Cuando solo se incluyen valores booleanos (true o false), se devuelve como <em>true </em>si cualquiera de las dos expresiones son verdaderas. Ambas expresiones pueden ser verdaderas, pero solo se necesita una para que el resultado sea verdadero. </p><pre><code class="language-js">true || true //devuelve el primer valor, verdadero
true || false //devuelve el primer valor, verdadero
false || false //devuelve el segundo valor, falso
123 || 'abc' //devuelve el primer valor, 123
'abc' || null //devuelve el primer valor, 'abc'
undefined || 'abc' //devuelve el segundo valor, 'abc'
0 || false //devuelve el segundo valor, falso</code></pre><h2 id="evaluaci-n-de-corto-circuito"><br>Evaluación de "corto circuito"</h2><p><code>&amp;&amp;</code> y <code>||</code> funcionan como operadores de corto circuito. </p><p>Con el operador lógico AND, si el primer operando se devuelve como falso, el segundo nunca será evaluado y se devolverá el primer operando. </p><p>Con el operador lógico OR, si el primer valor se devuelve como verdadero, el segundo nunca será evaluado y el primer operando será devuelto.</p><h2 id="operador-l-gico-not-">Operador lógico NOT (!)</h2><p>El operador lógico NOT no realiza ninguna comparación como lo hacen los operadores AND y OR. Además, se opera en solo un operando.</p><p>Se utiliza un símbolo "!" (signo de exclamación) para representar un operador NOT.</p><h2 id="usos-del-operador-not">Usos del operador NOT </h2><ol><li>Convertir la expresión en un booleano.</li><li>Devolver el valor contrario del booleano obtenido en el último paso.</li></ol><pre><code class="language-js">var spam = 'rinki'; //spam puede ser igual a cualquiera de las cadenas de texto no vacías
var booSpam = !spam;
/*devuelve falso
  porque la string vacía al convertirse en un booleano se devuelve como verdadera y lo contrario se devuelve como falso 
*/

var spam2 = ''; //spam2 es igual a una cadena de texto vacía
var booSpam2 = !spam2;
/*devuelve verdadero
  porque la cadena de texto vacia al convertirse en un booleano se devuelve como falsa y lo contrario se devuelve como verdadero.
*/</code></pre><p><strong>Consejo:</strong></p><p>Ambos operadores lógicos devolverán el valor de la última expresión. Por ejemplo:</p><pre><code class="language-js">"gato" &amp;&amp; "perro" //devuelve "perro"
"gato" &amp;&amp; false //devuelve falso
0 &amp;&amp; "gato"  //devuelve 0 (que es un valor falso)

"gato" || "perro" //devuelve "gato"
"gato" || false //devuelve "gato"
0 || "gato" //devuelve "gato"</code></pre><p>Ten en cuenta que <code>&amp;&amp;</code> devuelve el primer valor, mientras que <code>||</code> devuelve el segundo valor y vice versa. </p><p>Traducido del artículo de <strong><strong><a href="https://www.freecodecamp.org/news/javascript-logical-operators/">JavaScript Logical Operators</a></strong></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo crear el juego de la serpiente en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ En este artículo, aprenderás a crear un juego de la serpiente con JavaScript. El juego de la serpiente es un juego sencillo en el que una serpiente se mueve adentro de una caja y trata de comerse una manzana. Una vez que se come la manzana, la serpiente crece de ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/juego-de-la-serpiente-como-crearlo-con-javascript/</link>
                <guid isPermaLink="false">5fd7653a8c7cd154bb9762b9</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mailén Hernández ]]>
                </dc:creator>
                <pubDate>Thu, 24 Dec 2020 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1468070454955-c5b6932bd08d-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>En este artículo, aprenderás a crear un juego de la serpiente con JavaScript.</p><p>El juego de la serpiente es un juego sencillo en el que una serpiente se mueve adentro de una caja y trata de comerse una manzana. Una vez que se come la manzana, la serpiente crece de largo y se mueve más rápido. </p><p>El juego termina una vez que la serpiente se choca con sí misma o con cualquiera de las cuatro paredes. </p><p>Bueno, comencemos con HTML y CSS (los cimientos de nuestro juego).</p><h2 id="html">HTML</h2><pre><code>
&lt;h1&gt;Nokia 3310 snake&lt;/h1&gt;
&lt;div class="muestraPuntaje"&gt;&lt;/div&gt;
&lt;div class="cuadrilla"&gt;&lt;/div&gt;
&lt;div class="boton"&gt;
    &lt;button class="superior"&gt;superior&lt;/button&gt;
    &lt;button class="fondo"&gt;fondo&lt;/button&gt;
    &lt;button class="izquierda"&gt;izquierda&lt;/button&gt;
    &lt;button class="derecha"&gt;derecha&lt;/button&gt;
&lt;/div&gt;
&lt;div class="popup"&gt;
    &lt;button class="juegaDeNuevo"&gt;Inténtelo de nuevo&lt;/button&gt;     
&lt;/div&gt;</code></pre><p>Este código de HTML es sencillo y tiene: </p><ul><li>Un div de clase <code>muestraPuntaje</code> que mostrará nuestro puntaje.</li><li>Un div de clase <code>cuadrilla</code> en el que se desarrollará el juego (<em>la cuadrilla</em> sería de 10 por 10).</li><li>Una clase <code>buton</code> que contiene un botón para los usuarios que juegan en el teléfono (lo automatizaremos con el teclado para los usuarios de computadora). </li><li>Una clase <code>popup</code> que mostrará el botón "Inténtelo de nuevo".</li></ul><p>Ahora le añadiremos un poco de estilo con CSS.</p><p><strong>CSS</strong></p><pre><code>      body {
        background: rgb(212, 211, 211);
      }
     .cuadrilla {
        width: 200px;
        height: 200px;
        border: 1px solid red;
        margin: 0 auto;
        display: flex;
        flex-wrap: wrap;
      }
      .cuadrilla div {
        width: 20px;
        height: 20px;
        /*border:1px black solid;
box-sizing:border-box*/
      }
      .serpiente {
        background: blue;
      }
      .manzana {
        background: yellow;
        border-radius: 20px;
      }
      .popup {
        background: rgb(32, 31, 31);
        width: 100px;
        height: 100px;
        position: fixed;
        top: 100px;
        left: 100px;
        display: flex;
        justify-content: center;
        align-items: center;
      }</code></pre><p>En CSS, la <code>cuadrilla</code>, que es el tablero del juego, tiene una dimensión establecida y un <em><code>display</code> </em>de<em> </em><code>flex</code>. Esto permite que los contenidos (div) de esta cuadrilla estén alineados de forma horizontal como si fuesen elementos en línea en lugar de la disposición normal de los bloques. </p><p>La propiedad <code>flex wrap</code> mueve los divs hacia la próxima línea para que no traspasen la dimensión del elemento padre establecida (<em>cuadrilla</em>). </p><p>Crearemos de forma dinámica los contenidos del tablero del juego desde JS pero podemos darle anchura y altura desde CSS (con el <code>.cuadrilla div</code>). En el ejemplo, incluí comentarios para ayudarte a ver los divs; por lo que, a medida que avancemos dejaremos el código sin comentarios. </p><p>Las clases <code>serpiente</code> y <code>manzana</code> nos muestran donde está la serpiente y el <em>bonus </em>en el juego, mientras que la clase <code>popup</code> es un div fijo que alberga el botón <code>juegaDeNuevo</code>. </p><p>En este punto, obtendrás lo siguiente: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/12/Screenshot--1710-.png" class="kg-image" alt="Screenshot--1710-" width="600" height="400" loading="lazy"></figure><p><br>Ahora estamos listo para empezar con JavaScript. </p><h2 id="javascript">JavaScript</h2><p>Lo primero que tenemos que hacer es definir las variables:</p><pre><code>let cuadrilla = document.querySelector(".cuadrilla") 
let popup = document.querySelector(".popup"); 
let juegaDeNuevo = document.querySelector(".juegaDeNuevo"); 
let muestraPuntaje = document.querySelector(".muestraPuntaje") 
let izquierda = document.querySelector(".izquierda") 
let fondo = document.querySelector(".fondo") 
let derecha = document.querySelector(".derecha") 
let arriba = document.querySelector(".superior") 
let ancho = 10; 
let indiceActual = 0 
let indiceManzana = 0 
let serpienteActual = [2,1,0] 
let direccion = 1 
let puntaje = 0 
let velocidad = 0.8 
let tiempoInterval = 0 
let interval = 0</code></pre><p>La variable ancho es la anchura de la cuadrilla<em> </em>(10). Las otras variables tendrán más sentidos a medida que avancemos. Sin embargo, aunque no lo creas, nuestra serpiente en realidad es un arreglo<em> </em>llamado <code>serpienteActual</code>. </p><p>Ahora veamos las funciones:</p><pre><code>document.addEventListener("DOMContentLoaded",function(){ 
    document.addEventListener("keyup",control) 
    crearTablero() 
    comiezaJuego() 
    juegaDeNuevo.addEventListener("click", repeticion); 
})</code></pre><p>Hay un <code>eventListener</code> en el objeto del documento llamado <code>DomContentLoaded</code> y este evento se ejecutará una vez que el contenido del HTML se cargue en la pantalla. </p><p>Una vez que esto sucede, establecemos un <code>eventListener</code> en el documento para esperar clics del teclado (después veremos esto con más detalles). Luego, queremos crear el juego de mesa, empezar el juego y prestarle atención a los clics en el botón de <code>juegaDeNuevo</code>.</p><h2 id="funci-n-creartablero">Función crearTablero</h2><pre><code>function crearTablero(){ 
    popup.style.display = "none"; 
    for(let i=0;i&lt;100;i++){
        let div = document.createElement("div") 
        cuadrilla.appendChild(div) 
    }
} </code></pre><p>Como mencioné antes, este es un cuadrilla de 10 por 10 por lo cual vamos a necesitar 100 divs. Entonces, co el fragmento anterior, cerramos el div popup, creamos un nuevo div con un bucle de 100 iteraciones y insertamos a la cuadrilla (juego de meza).</p><p>Inmediatamente se añadirán algunos de los estilos creados en un principio (el .cuadrilla div). Puedes remover los <code>/* *<em>/</em></code><em>del estilo CSS y observarás los divs creados (vuelve agregar los </em><code><em>/</em>* */</code>). </p><p> <strong>Función comenzaJuego</strong></p><pre><code>function comenzaJuego(){ 
let cuadrados = document.querySelectorAll(".cuadrilla div") 
manzanaAlAzar(cuadrados) 
// manzana al azar
direccion = 1 
mostrarPuntaje.innerHTML = puntaje 
tiempoInterval = 1000 
serpienteActual = [2,1,0] 
indiceActual = 0 
serpienteActual.forEach(index =&gt; cuadrados[index].classList.add("serpiente")) 
interval = setInterval(moverResultado,tiempoInterval) 
} </code></pre><p>La función <code>comenzaJuego</code><strong> </strong>primero toma todos los divs (ya que estamos creando los divs en el tiempo de ejecución, no podemos incluirlos en la parte superior del código). </p><p>El siguiente paso es seleccionar un lugar dónde ubicar la manzana. Esto se realizará más abajo dentro de la función <code>manzanaAlAzar</code>. La variable <code>direccion</code> se refiere hacia donde se dirige la serpiente -1 para la derecha, -1 para la izquierda y así. </p><p>Con <code>tiempoInterval</code> se establece el tiempo que le toma a la serpiente moverse, mientras que <code>serpienteActual</code> define la ubicación exacta de la serpiente en el <em>cuadrilla </em>(ten en cuenta que básicamente la serpiente está formada por un par de divs con un color particular). </p><p>Para mostrar a nuestra serpiente en la pantalla, realizaremos bucles sobre el arreglo<code>serpienteActual</code> con un <code>forEach</code>. Cada valor obtenido, se utilizará con <code>cuadrados</code>. Recuerda que debes utilizar <code>querySelectorAll</code> para acceder a los cuadrilla divs y, después, podemos tener acceso a ellos como un arreglo que está utilizando números. En este caso, estos son los valores de <code>serpienteActual</code>. </p><p>El siguiente paso insertar el método <code>setInterval</code> (moverResultado, tiempoInterval) en la variable <code>interval</code>. Con esto podemos llamar fácilmente a <code>clearInterval</code> en esa variable.</p><p><code>moverResultado</code> se ejecuta cada 1000ms (1s) y básicamente define qué sucede cuando mueves la serpiente. </p><p><strong>Función moverResultado</strong></p><pre><code>function moverResultado() { 
let cuadrados = document.querySelectorAll(".cuadrilla div") 
if(compruebaPorGolpes(squares)) {
alert("golpeaste algo") 
popup.style.display="flex" 
return clearInterval(interval) 
} else { 
mueveSerpiente(cuadrados) 
}
} </code></pre><p>Como con la función <code>comenzaJuego</code> mencionada previamente, &nbsp;primero obtenemos todos los cuadrilla divs y luego verificamos si la función <code>compruebaPorGolpes</code> devuelve <em>true</em> (verdadero). </p><p>Si lo hace, quiere decir que la serpiente se chocó con algo y aparece el botón "Inténtelo de nuevo" y borra el interval. Si la función devuelve false (falso), la serpiente no chocó con nada y podemos mover la serpiente con la función <code>mueveSerpiente</code>.</p><p>Por lo tanto, cada 1 segundo el juego termina si <code>compruebaPorGolpes</code> &nbsp;es <em>true</em> o la serpiente realiza un movimiento más si <code>compruebaPorGolpes</code> es false. Primero explicaré la función <code>mueveSerpiente</code>. &nbsp;</p><p><strong>Función mueveSerpiente</strong></p><pre><code>function mueveSerpiente(cuadrados){
let cola = serpienteActual.pop()  
cuadrados[cola].classList.remove("serpiente") 
serpienteActual.unshift(serpienteActual[0]+direccion)  
// movimiento termina aquí
comeManzanas(cuadrados,cola)  
cuadrados[serpienteActual[0]].classList.add("serpiente")  
} </code></pre><p>La función <code>mueveSerpiente</code> recibe un argumento llamado cuadrados lo que no es necesario obtener de nuevo el <code>.cuadrilla div</code> en esta función.</p><p>Lo primeo que necesitamos hacer es quitar el último elemento del arreglo <code>serpienteActual</code> con un pop (este sería la cola y el primer elemento del arreglo sería la cabeza). Básicamente, la serpiente se mueve un paso hacia adelante y sale de la posición en la que estaba anteriormente. Después de esto, insertamos un nuevo valor al principio del arreglo con unShift. </p><p>Supongamos que nuestra serpiente empezó a moverse y se dirige hacia la derecha (direccion = 1). La dirección se añadirá a cabeza <code>serpienteActual</code> y la suma se colocará como el nuevo <code>cabezaDeSerpiente</code>. </p><p>Por ejemplo, si la serpiente estaba en posición <strong><strong>[2,1,0]</strong>, </strong>eliminamos el último elemento y dejamos la posición [2,1]. Luego, tomamos la cabeza que sería el elemento 2, le añadimos la dirección que es el elemento 1 y hacemos que este valor sea el nuevo valor <strong><strong>[3,2,1]</strong> </strong>que mueve nuestra serpiente un paso hacia a la derecha después de un segundo. </p><p>Si queremos mover la serpiente hacia abajo, la dirección se establecerá a el ancho (que es 10) y se insertará en el primer elemento (que es 12 y se pondrá al principio del arreglo) <strong><strong>[12,2,1]</strong></strong>.</p><p>Después, verificamos si la serpiente se comió la manzana y si se visualiza la nueva cabeza de la serpiente en el DOM.</p><p><strong>Función compruebaPorGolpes </strong></p><pre><code>function compruebaPorGolpes(cuadrados) {  
    if (  
    (serpienteActual[0] + ancho &gt;=(ancho * ancho) &amp;&amp; direccion === ancho) ||
    (serpienteActual[0] % ancho === ancho -1 &amp;&amp; direccion ===1) ||   
    (serpienteActual[0] % ancho === 0 &amp;&amp; direccion === -1) ||   
    (serpienteActual[0] - ancho &lt;= 0 &amp;&amp; direccion === -ancho) ||
    cuadrados[serpienteActual[0] + direccion].classList.contains("serpiente") 
    ) { 
        return true  
    } else {  
    	return false 
    }
}   </code></pre><p>La función <code>compruebaPorGolpes</code> tiene una sentencia <em>if</em>. Según la condición definida, podría devolver <em>true</em> (la serpiente se chocó con algo) o <em>false</em>. </p><p>La primera condición es si serpienteActual [0] (la cabeza de la serpiente) + ancho (10) es igual al total del área del ancho (que es ancho * ancho = 100) y la dirección es igual al ancho. </p><p>Ahora asumamos que la cabeza de la serpiente está en posición 97 que es la última capa de nuestro <em>cuadrilla</em>. Si añadieses 10 a 97 (= 107), superaría al total de la <em>cuadrilla </em>que es de 100. Si la dirección de la serpiente continúa hacia abajo, quiere decir que la serpiente se chocó con el borde inferior. </p><p>Si la serpiente estaba en 97 (97 + 10= 107) pero el jugador pudo cambiar la dirección a 1 (tocando la tecla izquierda), no se chocará con nada. </p><p>Si la cabeza de la serpiente está en posición 39 y la dirección todavía es 1 (la serpiente sigue dirigiéndose hacia la pared) y se chocará con el borde derecho. </p><p>Cualquier otra condición es prácticamente lo contrario de las dos condiciones anteriores. La última condición permite que si la cabeza de la serpiente se dirige hacia otro elemento que ya contiene la clase serpiente, la serpiente se chocará con sí misma. </p><p>Por lo que si una de las condiciones mencionadas previamente se cumple, significa que la serpiente se chocó con algo y se devolverá <strong><em>true</em> </strong>(sino <strong><em>false</em></strong>). Y en ese caso, el juego se terminó. Pero si es falso, con <code>mueveSerpiente</code> mueves la serpiente realiza otro movimiento. </p><p><strong>Function comeManzanas</strong></p><pre><code>function comeManzanas(cuadrados,cola){ 
    if(cuadrados[serpienteActual[0]].classList.contains("manzanas")){ 
        cuadrados[serpienteActual[0]].classList.remove("manzanas") 
        cuadrados[cola].classList.add("serpiente") 
        serpienteActual.push(cola)
        manzanaAlAzar(cuadrados) 
        puntaje++ 
        muestraPuntaje.textContent = puntaje 
        clearInterval(interval) 
        tiempoInterval = tiempoInterval * velocidad 
        interval = setInterval(moverResultado, tiempoInterval) 
    }
} </code></pre><p>A la función <code>comeManzana</code> se la llama desde la función <code>mueveSerpiente</code> cada vez que la serpiente realiza un movimiento. </p><p>Recibe dos argumentos cuadrados, <code>.cuadrilla div</code> y cola, básicamente es el valor que apareció de la serpiente en <code>moverResultado</code>. Luego verifica si la próxima posición del movimiento de la serpiente contiene una manzana. </p><p>Si lo hace, simplemente añade la cola que sacamos devuelta al arreglo. Esto sucede porque cada vez que nuestra serpiente se come una manzana, su largo incrementa un valor. </p><p>Después solo tenemos que seleccionar una nueva posición para nuestra manzana con <code>manzanaAlAzar</code> (ver más adelante). Y insertamos un valor de <strong>uno</strong> a nuestra puntuación, se lo mostramos al usuario, y borramos el <code>tiempoInterval</code> (para poder incrementar la velocidad de la serpiente). Por último, establecemos el intervalo de nuevo.</p><p><strong>Función manzanaAlAzar</strong></p><pre><code>function manzanaAlAzar(cuadrados){ 
do { 
    appleIndex = Math.floor(Math.random() * cuadrados.length) 
} while(cuadrados[appleIndex].classList.contains("serpiente")) 
    cuadrados[appleIndex].classList.add("manzana") 
} </code></pre><p>Lo que hace <code>manzanaAlAzar</code> es seleccionar un lugar donde ubicar a nuestra manzana al utilizar un bucle <strong>do while. </strong>Primero selecciona una posición al azar con Math.random() en el bucle do y verifica si el lugar seleccionado ya contiene la clase serpiente. </p><p>Esto quiere decir que la condición en la sentencia do se ejecutará hasta que encuentre un lugar en el que no esté la serpiente (esto se continua ejecutando hasta que sea <em>true</em>). Una vez que encuentre un lugar, le da a ese lugar la clase manzana. </p><h2 id="establecer-controles">Establecer controles</h2><p>Ahora tenemos que establecer nuestros controles. Vamos a empezar con los usuarios del teclado.</p><pre><code>function control(e){ 
    if (e.keycode === 39){
        direccion = 1 // derecha 
    } else if (e.keycode === 38){ 
        direccion = -ancho // si presionamos la flecha de arriba, la serpiente irá 10 divs hacia arriba
    }else if (e.keycode === 37){ 
        direccion = -1 // izquierda, la serpiente irá un div a la izquierda
    }else if (e.keycode === 40){
        direccion = +ancho // la serpiente irá 10 divs hacia abajo desde el div actual
    } 
} </code></pre><p>Recuerda que establecimos un eventListener para <strong>keyup. </strong>Esta función se ejecuta inmediatamente al presionar y soltar una tecla. </p><p>Ahora cada botón del teclado tiene un valor llamado keycode (numeros) desde el cual tenemos acceso y nos permite saber qué numero se cliqueó. Básicamente, estaremos atentos a las flechas con sus respectivos valores (keycodes<em>). </em>Gracias a esto, cambiamos la dirección, por ejemplo <strong>-1, 10 </strong>y así. </p><p>Espero que hayan comprendido cómo ahora se podrá mover a la serpiente.</p><p>El siguiente conjunto de botones es para dispositivos móviles y básicamente estamos haciendo lo mismo:</p><pre><code>arriba.addEventListener("click",() =&gt; direccion = -ancho ) 
fondo.addEventListener("click",() =&gt; direccion = +ancho ) 
izquierda.addEventListener("click",() =&gt; direccion = -1 ) 
derecha.addEventListener("click",() =&gt; direccion = 1 )</code></pre><p>Por último, necesitamos crear el div repetición que aparecerá cuando la serpiente se choque con algo. Con este botón, podremos borrar el juego. &nbsp;</p><h2 id="funci-n-repetici-n">Función repetición</h2><pre><code> function repetición() { 
 cuadrilla.innerHTML="" 
 crearTablero()   
 comiezaJuego()  
 popup.style.display = "none"; 
 }  </code></pre><p>Con este fragmento, borramos la cuadrilla (juego de mesa) y ejecutamos las funciones previas.</p><p>¡Felicidades! Llegaste al final. Aquí tenemos el resultado final:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/12/Screenshot--1709-.png" class="kg-image" alt="Screenshot--1709-" width="600" height="400" loading="lazy"></figure><p>Espero que hayas podido seguir el código y lo hayas disfrutado. </p><p>En este tutorial, aprendimos a crear juego de la serpiente con JavaScript. Algunos de los conceptos importantes que vimos incluyen <strong>push, pop, setInterval, clearInterval </strong>y <strong>eventListener. </strong></p><p>Para jugar al juego haz clic <a href="https://codepen.io/Fako29/pen/dyppXZG">aqui</a>:</p><p>Gracias por leer el artículo. Sigueme en <a href="https://twitter.com/fakoredeDami">Twitter</a>:</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/fakorede/"><strong>Fakorede Damilola</strong></a><strong><strong> - </strong><a href="https://www.freecodecamp.org/news/how-to-build-a-snake-game-in-javascript/">How to Build a Snake Game In JavaScript</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo jugar al juego del dinosaurio de Chrome - con o sin Internet ]]>
                </title>
                <description>
                    <![CDATA[ Hace varios años, Google añadió un jueguito a Chrome: si te quedabas sin Internet y querías entrar a un sitio web, aparecía un cartel que leía "No se ha podido establecer conexión con Internet" o "Sin conexión" con un pequeño dinosaurio pixelado al lado. Dino dice no hay conexiónMuchas personas ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-jugar-al-juego-del-dinosaurio-de-chrome-de-forma-online-y-offline/</link>
                <guid isPermaLink="false">5fda487a8c7cd154bb977e4b</guid>
                
                    <category>
                        <![CDATA[ Chrome ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mailén Hernández ]]>
                </dc:creator>
                <pubDate>Mon, 21 Dec 2020 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-27-1-1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Hace varios años, Google añadió un jueguito a Chrome: si te quedabas sin Internet y querías entrar a un sitio web, aparecía un cartel que leía "No se ha podido establecer conexión con Internet" o "Sin conexión" con un pequeño dinosaurio pixelado al lado.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-26-1-.png" class="kg-image" alt="image-26-1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/image-26-1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-26-1-.png 653w" width="653" height="410" loading="lazy"><figcaption>Dino dice no hay conexión</figcaption></figure><p>Muchas personas pensaron que el dinosaurio solo era un lindo ícono pequeño para brindarles compañía mientras no había conexión. Después, alguien presionó la barra espaciadora y el dinosaurio empezó a correr.</p><p>Este jueguito se convirtió en furor. Pero ¿qué sucede si lo quieres jugar (cuidado que es adictivo) cuando tienes internet y necesitas un descanso? En este artículo, aprenderás a cómo jugar al juego cuando estás con o sin conexión a Internet.</p><h2 id="c-mo-jugar-al-juego-de-chrome-sin-conexi-n">Cómo jugar al juego de Chrome sin conexión</h2><p>Si no tienes Internet, solo tienes que abrir Chrome y visitar un sitio web. Notarás que hay un pequeño dinosaurio al lado del mensaje de error.</p><p>Sólo tienes que presionar la barra espaciadora y el dinosaurio comenzará a saltar. Presiona la flecha de arriba para saltar sobre los obstáculos (como los cactus) que hay en el camino. Si mantienes la fecha presionada más tiempo, el dinosaurio saltará por más tiempo.</p><p>Presiona la flecha de abajo para evitar los obstáculos que están en el aire.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-27-1-.png" class="kg-image" alt="image-27-1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/image-27-1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/image-27-1-.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-27-1-.png 1238w" sizes="(min-width: 720px) 720px" width="1238" height="619" loading="lazy"><figcaption>¡Prepárate para saltar sobre cactus!</figcaption></figure><p>Cuánto más juegues, más rápido corre el dinosaurio. Una vez que te choques con algún obstáculo, se acabó el juego y tienes que volver a empezar. Para jugar otra vez, presiona la barra espaciadora. </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-28-1-.png" class="kg-image" alt="image-28-1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/image-28-1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/image-28-1-.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-28-1-.png 1396w" sizes="(min-width: 720px) 720px" width="1396" height="713" loading="lazy"></figure><h2 id="c-mo-jugar-si-tienes-conexi-n-a-internet"><strong>Cómo jugar si tienes conexión a Internet</strong></h2><p>Genial, tuviste algo para entretenerte mientras esperabas a que regresara tu conexión. Pero ¿y si lo quiero seguir jugando? A continuación te enseñaré cómo puedes hacerlo:</p><h3 id="visita-la-url-del-dino">Visita la URL del dino</h3><p>La forma más fácil de jugar a este juego es visitando esta URL: chrome://dino/ y ¡listo! Puedes ver al pequeño dinosaurio y al cartel que dice "Sin conexión".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-29-1-.png" class="kg-image" alt="image-29-1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/image-29-1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-29-1-.png 926w" sizes="(min-width: 720px) 720px" width="926" height="645" loading="lazy"></figure><p>Una vez que veas este mensaje, solo presiona la barra espaciadora y empieza a saltar cactus.</p><h2 id="bonus-otra-forma-de-encontrar-el-juego">Bonus: otra forma de encontrar el juego</h2><p>Quizás no te apareció el mensaje de error con el dinosaurio cuando te quedaste sin conexión. O quizás no quieres apagar tu wifi a propósito.</p><p>Entonces, si tienes Internet pero quieres desconectar la conexión en las herramientas de desarrollador de Chrome, presiona F12 para abrir las herramientas de desarrollador.</p><p>Haz clic en la pestaña "Network" arriba a la derecha y busca la pestaña "Online"/"Offline" en la segunda fila de abajo:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-30-1-.png" class="kg-image" alt="image-30-1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/image-30-1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/image-30-1-.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-30-1-.png 1420w" sizes="(min-width: 720px) 720px" width="1420" height="824" loading="lazy"><figcaption>Busca la flechita hacia abajo al lado de donde dice "online".</figcaption></figure><p>Busca la flechita hacia abajo, haz clic y selecciona "Offline" (debería estar establecido como "Online" si tienes conexión).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-31-1-.png" class="kg-image" alt="image-31-1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/image-31-1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/image-31-1-.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-31-1-.png 1424w" sizes="(min-width: 720px) 720px" width="1424" height="824" loading="lazy"><figcaption>Cámbialo a "Offline".</figcaption></figure><p>Una vez que lo hayas hecho, si intentas visitar la página ¡te aparecerá el dinosaurio! Puedes salir de las herramientas de desarrollador y presionar la barra espaciadora, como siempre, para empezar a jugar.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-32-1-.png" class="kg-image" alt="image-32-1-" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/image-32-1-.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2020/12/image-32-1-.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/image-32-1-.png 1420w" sizes="(min-width: 720px) 720px" width="1420" height="824" loading="lazy"><figcaption>¡Juega todo lo que quieras!</figcaption></figure><p>Ahora sabes cómo encontrar el juego sin o con conexión a Internet ¡Pásala bien!</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/abbey/"><strong>Abbey Rennemeyer</strong></a><strong> -</strong> <strong><a href="https://www.freecodecamp.org/news/how-to-play-the-no-internet-google-chrome-dinosaur-game-both-online-and-offline/">How to Play the No Internet Google Chrome Dinosaur Game - Both Online and Offline</a></strong><br></p><p> </p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript ejemplos de codificación URL - Cómo utilizar encodeURIcomponent() y encode URI() ]]>
                </title>
                <description>
                    <![CDATA[ Quizás pienses que encodeURI y encodeURIComponent hacen lo mismo ya que sus nombres son similares. ¿Cuándo y cómo utilizarlos? En este artículo, desmitificaré la diferencia entre encodeURI y  encodeURIComponent. ¿Qué es una URI y cómo se diferencia de una URL?  URI significa Identificador de Recurso Uniforme (Uniform Resourse ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/url-codificacion-como-utilizar-encodeuricomponent-javascript/</link>
                <guid isPermaLink="false">5fd626608c7cd154bb975ac5</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mailén Hernández ]]>
                </dc:creator>
                <pubDate>Wed, 16 Dec 2020 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1590595906931-81f04f0ccebb-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Quizás pienses que <code>encodeURI</code> y <code>encodeURIComponent</code> hacen lo mismo ya que sus nombres son similares. ¿Cuándo y cómo utilizarlos?</p><p>En este artículo, desmitificaré la diferencia entre <code>encodeURI</code> y <code>encodeURIComponent</code>.</p><h2 id="-qu-es-una-uri-y-c-mo-se-diferencia-de-una-url">¿Qué es una URI y cómo se diferencia de una URL? </h2><p>URI significa Identificador de Recurso Uniforme (Uniform Resourse Identifier).</p><p>URL significa Localizador de Recurso Uniforme (Uniform Resource Locator).</p><p>Cualquier cosa que excepcionalmente identifique un recurso es su URI como id, nombre, o número ISBN. Un URL especifica un recurso y cómo se puede evaluar (el protocolo). Todas las URL pero no todas las URI son URL. </p><h2 id="-por-qu-necesitamos-codificar">¿Por qué necesitamos codificar?</h2><p>Las URL solo pueden tener ciertos caracteres de los 128 set de caracteres estándar ASCII. Se debe codificar los caracteres reservados que no pertenezcan a este set. </p><p>Esto significa que es necesario codificar los caracteres cuando pasan a una URL. Cuando los caracteres especiales como &amp;, space, ! entran en una URL, se tienen que escapar ya que sino pueden causar situaciones impredecibles. </p><p>Ejemplos de uso:</p><ol><li>El usuario envió valores en un formulario que puede estar en un formato de <em>string </em>y se deben pasar, tal como los campos URL. </li><li>Es necesario aceptar parámetros de cadena de consulta (<em>query string parameter</em>) para realizar una solicitud GET. </li></ol><h2 id="-cual-es-la-diferencia-entre-encodeuri-y-encodeuricomponent">¿Cual es la diferencia entre encodeURI y encodeURIComponent?</h2><p><code>encodeURI</code> y <code>encodeURIComponent</code> se utilizan para codificar Identificadores de Recurso Uniforme (URI) al remplazar cierto caracter por uno, dos, tres o cuatro secuencias de escape que representen la codificación UTF-8 de los caracteres. </p><p>El <code>encodeURIComponent</code> se debe utilizar para codificar un <strong>URI Component</strong> &nbsp;(una <em>string </em>que supuestamente debe ser parte de una <strong>URL</strong>). </p><p>El <code>encodeURI</code> se debe utilizar para codificar una <strong>URI</strong> o una <strong>URL</strong> existente. </p><p>Tabla útil de las diferencias en la codificación de caracteres.</p><h2 id="-qu-caracteres-est-n-codificados">¿Qué caracteres están codificados?</h2><p><code>encodeURI()</code> no codificará: <code>~!@#$&amp;*()=:/,;?+'</code></p><p><code>encodeURIComponent()</code> no codificará: <code>~!*()'</code></p><p>Los caracteres <code>A-Z a-z 0-9 - _ . ! ~ * ' ( )</code> no se escapan.</p><p><strong>Ejemplos</strong></p><pre><code class="language-js">const url = 'https://www.twitter.com'

console.log(encodeURI(url))             //https://www.twitter.com
console.log(encodeURIComponent(url))    //https%3A%2F%2Fwww.twitter.com


const paramComponent = '?q=search'
console.log(encodeURIComponent(paramComponent)) //"%3Fq%3Dsearch"
console.log(url + encodeURIComponent(paramComponent)) //https://www.twitter.com%3Fq%3Dsearch
</code></pre><p><strong>Cuándo codificar</strong></p><ol><li>Cuando se acepta una entrada (<em>input</em>) que puede tener espacios. </li></ol><pre><code class="language-js">encodeURI("http://www.mysite.com/a file with spaces.html"</code></pre><p>2. Cuando se crea una URL desde un parámetro de solicitud <em>(query parameter)</em>. </p><pre><code class="language-js"> let param = encodeURIComponent('mango')
 let url = "http://mysite.com/?search=" + param + "&amp;length=99"; //http://mysite.com/?search=mango&amp;length=99
</code></pre><p>3. Cuando se aceptan parámetros de solicitud que puede que tengan caracteres reservados. </p><pre><code class="language-js">let params = encodeURIComponent('mango &amp; pineapple')
   let url = "http://mysite.com/?search=" + params; //http://mysite.com/?search=mango%20%26%20pineapple
</code></pre><h2 id="resumen">Resumen</h2><p>Si tienes una URL completa, utiliza encodeURI. Pero si tienes una parte de una URL, utiliza encodeURIComponent. <br></p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/shrutikapoor08/"><strong>Shruti Kapoor</strong></a><strong> - <a href="https://www.freecodecamp.org/news/javascript-url-encode-example-how-to-use-encodeuricomponent-and-encodeuri/">JavaScript URL Encode Example – How to Use encodeURIcomponent() and encodeURI(</a>)</strong></p><p></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
