<?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[ Luis Delgado - 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[ Luis Delgado - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 13:55:47 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/luis-delgado/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Contador de palabras en Excel: cómo verificar el número de palabras escritas ]]>
                </title>
                <description>
                    <![CDATA[ Excel no tiene su propia herramienta que le permita simplemente ver la cantidad de palabras en un documento (como hace Word). Pero, ¿es posible averiguarlo de todos modos? Sí, lo es, pero es un poco complicado y también solo funciona en una celda a la vez. Sin embargo, no se ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/contador-de-palabras-en-excel-como-verificar-el-numero-de-palabras-escritas/</link>
                <guid isPermaLink="false">609855edeaa00507666606fc</guid>
                
                    <category>
                        <![CDATA[ Excel ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Fri, 09 Jul 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/05/brett-jordan-POMpXtcVYHo-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Excel no tiene su propia herramienta que le permita simplemente ver la cantidad de palabras en un documento (como hace Word). Pero, ¿es posible averiguarlo de todos modos?</p><p>Sí, lo es, pero es un poco complicado y también solo funciona en una celda a la vez. Sin embargo, no se preocupe, veremos al final cómo hacer que funcione en un grupo de celdas. Exploremos cómo contar palabras en Excel.</p><h1 id="las-funciones-de-excel-que-usaremos-para-contar-caracteres">Las funciones de Excel que usaremos para contar caracteres</h1><p>Necesitamos aprender sobre tres funciones de Excel, <code>LEN()</code>, <code>TRIM()</code> y <code>SUBSTITUTE()</code>, antes de poder usarlas en la fórmula.</p><h2 id="c-mo-usar-la-funci-n-len-en-excel">Cómo usar la función <code>LEN()</code> en Excel</h2><p>La función <code>LEN()</code> toma una celda con contenido de texto y devuelve el número de caracteres en esa celda.</p><p>Por ejemplo, si escribimos <code>The horse under the three</code> en una celda, y usamos la función LEN () para calcular el número de caracteres en esa oración en otra celda, obtendremos 25. Puedes ver cómo funciona aquí:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/05/excel3.png" class="kg-image" alt="excel3" width="272" height="130" loading="lazy"></figure><p>Al especificar que queremos el <code>LEN()</code> de la celda B1 (<code>LEN(B1)</code> , en la celda B2 anterior), Excel hace este cálculo por nosotros.</p><p>Nota: Explicaré por qué incluí el error de ortografía ("three" en lugar de "tree") a continuación. </p><h2 id="c-mo-usar-la-funci-n-trim-en-excel">Cómo usar la función <code>TRIM()</code> en Excel</h2><p>La función <code>TRIM()</code> toma una celda con contenido de texto y devuelve el mismo texto sin ningún espacio en blanco al principio o al final.</p><p>Por ejemplo, digamos que tenemos una celda que se ve así: <code> &nbsp; &nbsp; &nbsp; The horse under the three </code> &nbsp; (con 7 espacios antes del texto y 2 al final. Tiene una longitud total de 34 caracteres, incluidos los espacios.</p><p>La función <code>TRIM()</code> nos devolverá <code>The horse under the three</code> (con solo los 25 caracteres originales) sin los espacios al principio o al final. Así es como se ve:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/06/excel4.png" class="kg-image" alt="excel4" width="364" height="252" loading="lazy"></figure><p>Puedes ver que, similar al ejemplo anterior con <code>LEN()</code>, cuando colocamos las instrucciones <code>TRIM()</code> en la celda B4, Excel calcula el valor correcto en la celda B5. </p><h2 id="c-mo-utilizar-la-funci-n-substitute-en-excel">Cómo utilizar la función <code>SUBSTITUTE()</code> en Excel</h2><p>La función <code>SUBSTITUTE()</code> reemplazará un fragmento del texto con otro fragmento de texto. Por ejemplo, en el texto que hemos estado usando hay un error de ortografía (en lugar de <code>tree</code> tenemos <code>three</code>). Podemos arreglarlo usando la función <code>SUBSTITUTE()</code>.</p><p>La sintaxis es <code>SUBSTITUTE (text, old_text, new_text, [instance_num])</code>, siendo <code>text</code> el texto que vamos a cambiar. En este caso, tendremos el texto que queremos cambiar, y el <code>old_text</code> y la parte que queremos cambiar (<code>tree</code>) que serán reemplazados por el <code>new_text</code> (<code>three</code>).</p><p>La fórmula completa es <code>SUBSTITUTE (B4, "three", "tree")</code>. Tenga en cuenta que el texto de una fórmula siempre debe estar entre comillas. Así es como funciona:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/06/excel5-2.png" class="kg-image" alt="excel5-2" width="364" height="247" loading="lazy"></figure><p>En caso de que necesite saberlo, <code>instance_num</code> es un parámetro opcional que usa en caso de que haya varias instancias de <code>old_text</code> en el texto y desee cambiar solo una de ellas. Pero no lo estamos usando aquí.</p><h1 id="c-mo-contar-palabras-en-excel">Cómo contar palabras en Excel</h1><p>Hemos aprendido a usar las funciones individuales anteriores, ahora necesitamos usarlas juntas de una manera algo complicada.</p><p>Antes de juntarlas, intentemos entender cómo los estamos usando, y luego construiremos juntos la fórmula completa.</p><h2 id="c-mo-funciona-el-contador-de-palabras-en-excel-">Cómo funciona el contador de palabras en Excel.</h2><p>Excel no tiene una fórmula o herramienta de conteo de palabras adecuada, pero hay una cosa que podemos contar, y son los caracteres, como aprendimos anteriormente. Específicamente, vamos a contar el número de espacios dentro de la cadena. Y de eso, vamos a derivar el número de palabras simplemente agregando 1 al número de espacios.</p><p>Cuando miramos nuestro ejemplo, podemos ver que la cuerda <code>The horse under the tree</code> tiene cuatro espacios. Si sumamos uno, obtenemos cinco, el número total de palabras en la oración.</p><p>Contar espacios tampoco es una tarea trivial. Dado que no existe una herramienta o fórmula específica que pueda contar solo espacios, debemos ser un poco creativos.</p><p>Lo que vamos a hacer es contar el número de caracteres en la cadena y luego contar el número de caracteres en la cadena cuando se hayan eliminado los espacios (podemos usar <code>SUBSTITUTE (text, "", "")</code> para esto). Luego tomaremos la diferencia entre los dos.</p><p><code>The horse under the three</code> tiene 24 caracteres, mientras que <code>Thehorseunderthetree</code> tiene 20 caracteres. La diferencia es 4, que es el número de espacios en la cadena original. Si sumamos 1 obtenemos 5, el número de palabras.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/06/excel6.png" class="kg-image" alt="excel6" width="366" height="377" loading="lazy"></figure><h2 id="poni-ndolo-en-pr-ctica">Poniéndolo en práctica</h2><p>Ahora necesitamos poner una fórmula única que hemos visto en el último párrafo. Esta fórmula tiene tres componentes:</p><ul><li>La longitud de la oración con espacios al principio o al final de la oración eliminada (queremos contar solo los espacios entre las palabras), por lo que usaremos <code>LEN(TRIM (texto))</code></li><li>La longitud de la cadena sin espacios, en este caso, no necesitamos usar <code>TRIM()</code> ya que estamos eliminando todos los espacios, entonces <code>LEN(SUBSTITUTE(text, "", ""))</code></li><li>Luego solo agregamos <code>1</code>.</li></ul><p>La fórmula completa es: <code>LEN(TRIM(text)) - LEN(SUBSTITUTE(text, "", "")) + 1</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/06/excel7.png" class="kg-image" alt="excel7" width="415" height="129" loading="lazy"></figure><h1 id="c-mo-crear-una-funci-n-personalizada-para-contar-palabras-en-excel">Cómo crear una función personalizada para contar palabras en Excel</h1><p>Hemos aprendido a contar palabras en una celda, pero tal vez no queramos escribir todo eso cada vez que necesitamos contar el número de palabras.</p><p>Afortunadamente, podemos resolver esto creando una función personalizada para contar palabras. También podemos tener una función personalizada para contar el número total de palabras en varias celdas.</p><h2 id="c-mo-crear-una-funci-n-personalizada-con-visual-basic-para-aplicaciones">Cómo crear una función personalizada con Visual Basic para aplicaciones</h2><p>Podemos abrir el editor de VBA con <code>Alt + F11</code> ( <code>FN + Alt + F11</code> para Mac). Luego podemos ir a <strong>Insertar&gt; Módulo</strong>, y estamos listos para escribir nuestra función.</p><p>Podemos usar lo que ya hemos escrito como punto de partida, pero necesitamos reemplazar <code>SUBSTITUTE</code>, ya que eso no existe en Visual Basic, con la función <code>REPLACE</code>. Así que ahora tendremos <code>LEN(TRIM (texto)) - LEN(REPLACE (text, "", "")) + 1</code>.</p><p>Nombramos la nueva función que queremos crear. He elegido el nombre <code>WORDCOUNT</code>, pero puede usar el nombre que desee. Simplemente reemplácelo en los dos lugares donde está escrito con el nombre de su elección.</p><pre><code>Function WORDCOUNT(text)
   WORDCOUNT = LEN(TRIM(text)) - LEN(REPLACE(text, " ", "")) + 1
End Function
</code></pre><p>Una vez que agregue este código en el editor, habrá creado la función. ¡Ahora puedes cerrar el editor y disfrutar de tu nueva función! Pero tenga en cuenta que solo funciona para este libro.</p><p>Así que ahora hagamos que la función funcione con más de una celda, y luego también podemos agregarla permanentemente a Excel.</p><h2 id="c-mo-crear-una-funci-n-de-excel-personalizada-para-contar-el-n-mero-total-de-palabras-en-un-grupo-de-celdas">Cómo crear una función de Excel personalizada para contar el número total de palabras en un grupo de celdas</h2><p>Ahora actualizaremos la función para que funcione con un rango de celdas para que sea un poco más útil. Tomamos el mismo código que el anterior y lo aplicamos a cada celda dentro de un rango, sumando el número de palabras en cada celda.</p><p>Reemplaza el código que escribimos antes con lo siguiente:</p><pre><code>Function WORDCOUNT(rng As Range)
    Count = 0
    For Each cl In rng
        thisCount = LEN(TRIM(cl.Value)) - LEN(REPLACE(cl.Value, " ", "")) + 1
        Count = Count + thisCount
    Next
    WORDCOUNT = Count
End Function
</code></pre><p>Nota: esta versión funciona con un solo rango de celdas y todas las celdas seleccionadas deben contener texto. Si lo desea, puede intentar hacer su propia versión más versátil, ¡simplemente explore VBA por su cuenta!</p><p>Por último, queremos asegurarnos de que nuestra función esté disponible en todos los libros de trabajo de Excel. Para hacer eso, tenemos que cerrar el editor de VBA y guardar el libro en el que estamos trabajando como <code>*.xlam</code>, el tipo de archivo de complemento de Excel.</p><p>Para ello podemos ir a <strong>Archivo&gt; Guardar como</strong>, darle al archivo un nombre que nos permita reconocerlo, como "WordCount", elegir el formato "Complemento de Excel (* .xlam)" del menú desplegable. No cambie la carpeta en la que guarda el archivo, ya que se establece automáticamente en una carpeta <strong>AddIns</strong>.</p><p>Para ello vamos a <strong>Archivo&gt; Opciones&gt; Complementos</strong>. En la parte inferior de la ventana, seleccione "Complementos de Excel" en el menú desplegable y haga clic en <strong>Ir ....</strong> En la nueva ventana use el botón <strong>Examinar ...</strong>, y allí debería abrir la carpeta de Complementos que hemos guardado el archivo. in. Selecciónelo y presione Ok, luego Ok nuevamente. Ahora la función <code>WORDCOUNT()</code> estará disponible cada vez que use Excel.</p><h1 id="conclusi-n">Conclusión</h1><p>En este artículo, hemos aprendido a contar palabras en una cadena en Excel.</p><p>Y aunque Excel no tiene una herramienta preparada para contar palabras, aprendimos cómo crear nuestra propia función personalizada para evitar tener que escribir cada fórmula cada vez que queremos obtener la cantidad de palabras en una cadena.</p><p>Finalmente, también aprendimos cómo expandir nuestra función para que funcione con cualquier número de celdas.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/ilenia/"><strong>Ilenia Magoni</strong></a> - <strong><a href="https://www.freecodecamp.org/news/word-count-in-excel-how-to-check-the-number-of-words/">Word Count in Excel – How to Check the Number of Words</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de HTML en cursiva: cómo hacer que el texto en cursiva con la etiqueta <i> ]]>
                </title>
                <description>
                    <![CDATA[ En este artículo, aprenderemos cómo usar la etiqueta <i> y en qué se diferencia de la etiqueta <em>. En versiones anteriores de HTML, la etiqueta <i> se usaba para mostrar texto en cursiva. Pero en HTML 5, la definición ha cambiado. Exploraremos esa nueva definición y aprenderemos sobre otras formas ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-de-html-en-cursiva-como-hacer-que-el-texto-en-cursiva-con-la-etiqueta/</link>
                <guid isPermaLink="false">606b44c4669b0108f64b77ca</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Tue, 22 Jun 2021 05:12:44 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/arif-riyanto-vJP-wZ6hGBg-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>En este artículo, aprenderemos cómo usar la etiqueta &lt;i&gt; y en qué se diferencia de la etiqueta &lt;em&gt;.</p><p>En versiones anteriores de HTML, la etiqueta &lt;i&gt; se usaba para mostrar texto en cursiva. Pero en HTML 5, la definición ha cambiado. Exploraremos esa nueva definición y aprenderemos sobre otras formas de aplicar estilo al texto en cursiva usando CSS.</p><h2 id="-qu-es-la-etiqueta-i">¿Qué es la etiqueta &lt;i&gt;?</h2><p>La etiqueta &lt;i&gt;, o elemento de texto idiomático, es un espacio de texto que representa un cambio en el estado de ánimo o la calidad del texto. Este texto se muestra en cursiva.</p><p>Veamos algunas razones por las que es posible que quieras utilizar la etiqueta &lt;i&gt;.</p><h3 id="usar-la-etiqueta-i-para-marcar-frases-en-un-idioma-diferente">Usar la etiqueta &lt;i&gt; para marcar frases en un idioma diferente</h3><p>Puede utilizar la etiqueta &lt;i&gt; para marcar un espacio de texto en un idioma diferente. Este ejemplo pone en cursiva una frase latina.</p><pre><code class="language-html">&lt;p&gt;Stacy se acaba de tatuar la frase &lt;i&gt;Audentes fortuna iuvat&lt;/i&gt; que significa "La fortuna favorece a los valientes".&lt;/p&gt; 
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-10-10-15-Untitled-document---Google-Docs.png" class="kg-image" alt="Screenshot-2021-04-25-at-10-10-15-Untitled-document---Google-Docs" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/04/Screenshot-2021-04-25-at-10-10-15-Untitled-document---Google-Docs.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-10-10-15-Untitled-document---Google-Docs.png 783w" sizes="(min-width: 720px) 720px" width="783" height="21" loading="lazy"></figure><p>También puede usar el atributo lang en la etiqueta &lt;i&gt; para representar frases que están en un idioma diferente al del texto que las rodea.</p><pre><code class="language-html">&lt;p&gt;La primera frase que Matt aprendió en italiano es &lt;i lang="it"&gt;Vorrei una birra&lt;/i&gt;, que se traduce como "Me gustaría una cerveza". &lt;/p&gt; </code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/04/Captura-de-pantalla-2021-04-25-102331-1.png" class="kg-image" alt="Captura-de-pantalla-2021-04-25-102331-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/04/Captura-de-pantalla-2021-04-25-102331-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/04/Captura-de-pantalla-2021-04-25-102331-1.png 849w" sizes="(min-width: 720px) 720px" width="849" height="33" loading="lazy"></figure><h3 id="usar-la-etiqueta-i-para-mostrar-los-pensamientos-de-alguien">Usar la etiqueta &lt;i&gt; para mostrar los pensamientos de alguien</h3><p>También puede usar la etiqueta &lt;i&gt; para resaltar los pensamientos internos de una persona.</p><pre><code class="language-html">&lt;p&gt;Después de que Ben conoció a los padres de su novia, pensó para sí mismo: &lt;i&gt;Realmente espero que les haya agradado&lt;/i&gt;.&lt;/p&gt; 
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/04/Captura-de-pantalla-2021-04-25-104557.png" class="kg-image" alt="Captura-de-pantalla-2021-04-25-104557" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/04/Captura-de-pantalla-2021-04-25-104557.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/04/Captura-de-pantalla-2021-04-25-104557.png 862w" sizes="(min-width: 720px) 720px" width="862" height="31" loading="lazy"></figure><h3 id="usando-la-etiqueta-i-para-el-nombre-de-un-barco">Usando la etiqueta &lt;i&gt; para el nombre de un barco</h3><p>Si desea utilizar el nombre de un barco, puede envolver ese nombre en etiquetas &lt;i&gt;.</p><pre><code class="language-html">&lt;p&gt;El &lt;i&gt;USS Arizona&lt;/i&gt; era un acorazado de la Armada de los Estados Unidos construido en la década de 1910.&lt;/p&gt; </code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-11-05-34-Untitled-document---Google-Docs.png" class="kg-image" alt="Screenshot-2021-04-25-at-11-05-34-Untitled-document---Google-Docs" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/04/Screenshot-2021-04-25-at-11-05-34-Untitled-document---Google-Docs.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-11-05-34-Untitled-document---Google-Docs.png 782w" sizes="(min-width: 720px) 720px" width="782" height="27" loading="lazy"></figure><h3 id="uso-de-la-etiqueta-i-para-descripciones-taxon-micas">Uso de la etiqueta &lt;i&gt; para descripciones taxonómicas</h3><p>Según el Convenio de Diversidad Biológica,</p><blockquote>La taxonomía es la ciencia de nombrar, describir y clasificar organismos e incluye todas las plantas, animales y microorganismos del mundo.</blockquote><p>Este sería un ejemplo del uso de la etiqueta &lt;i&gt; para el término Felis catus.</p><pre><code class="language-html">&lt;p&gt;Otro término para el gato doméstico sería &lt;i&gt;Felis catus&lt;/i&gt;.&lt;/p&gt;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-11-05-12-Untitled-document---Google-Docs-1.png" class="kg-image" alt="Screenshot-2021-04-25-at-11-05-12-Untitled-document---Google-Docs-1" width="587" height="40" loading="lazy"></figure><h2 id="diferencias-entre-la-etiqueta-i-y-la-etiqueta-em-en-html">Diferencias entre la etiqueta &lt;i&gt; y la etiqueta &lt;em&gt; en HTML</h2><p>Puedes pensar que las etiquetas <code>&lt;i&gt;</code> y <code>&lt;em&gt;</code> tienen el mismo significado porque tienen el mismo aspecto en el navegador. Pero las dos etiquetas tienen significados diferentes entre sí.</p><p>La etiqueta <code>&lt;em&gt;</code>, o elemento de énfasis, debe usarse cuando desee poner énfasis en una palabra o un espacio de texto.</p><p>A continuación, se muestra un ejemplo con la etiqueta <code>&lt;em&gt;</code>.</p><pre><code class="language-html"> &lt;p&gt;¡Deja de ser un bebé y &lt;em&gt;hazlo&lt;/em&gt; ya!&lt;/p&gt; 
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-11-36-51-Untitled-document---Google-Docs.png" class="kg-image" alt="Screenshot-2021-04-25-at-11-36-51-Untitled-document---Google-Docs" width="550" height="60" loading="lazy"></figure><p>Los seres humanos y los lectores de pantalla pondrán énfasis verbal en la palabra "hacer". Esto difiere de la etiqueta &lt;i&gt; donde no se puso énfasis adicional en el texto.</p><h2 id="-deber-a-utilizar-la-etiqueta-i-para-dise-ar">¿Debería utilizar la etiqueta &lt;i&gt; para diseñar?</h2><p>No debe utilizar la etiqueta &lt;i&gt; con fines de estilo. Si desea aplicar estilo al texto en cursiva, debe usar la propiedad de estilo de fuente CSS.</p><pre><code class="language-html">&lt;p class="demo-para"&gt;Estoy usando CSS para darle estilo a este texto en cursiva.&lt;/p&gt; </code></pre><pre><code class="language-css">.demo-para {
  font-style: italic;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-11-13-19-Untitled-document---Google-Docs.png" class="kg-image" alt="Screenshot-2021-04-25-at-11-13-19-Untitled-document---Google-Docs" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/04/Screenshot-2021-04-25-at-11-13-19-Untitled-document---Google-Docs.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/04/Screenshot-2021-04-25-at-11-13-19-Untitled-document---Google-Docs.png 936w" sizes="(min-width: 720px) 720px" width="936" height="46" loading="lazy"></figure><h2 id="-deber-a-utilizar-la-etiqueta-i-o-span-para-los-iconos">¿Debería utilizar la etiqueta &lt;i&gt; o &lt;span&gt; para los iconos?</h2><p>A lo largo de los años, se ha debatido si es "correcto" utilizar etiquetas <code>&lt;i&gt;</code> o etiquetas <code>&lt;span&gt;</code> para agregar iconos a su sitio web.</p><p>Algunos argumentarán que no tiene nada de malo y que es una práctica bastante común, mientras que otros piensan que es un mal uso de la etiqueta <code>&lt;i&gt;</code> y que debería usar la etiqueta <code>&lt;span&gt;</code> en su lugar.</p><p>Aquí hay una respuesta de <a href="https://fontawesome.com/how-to-use/on-the-web/referencing-icons/basic-use">Font Awesome</a> con respecto al uso de <code>&lt;i&gt;</code> para sus íconos:</p><blockquote>Nos gusta la etiqueta <code>&lt;i&gt;</code> por brevedad y porque la mayoría de la gente usa <code>&lt;em&gt; &lt;/em&gt;</code> para texto semántico enfatizado / en cursiva en estos días. Si esa no es tu taza de té, usar un <code>&lt;span&gt;</code> es semánticamente más correcto.</blockquote><p>Mi objetivo no es hacer que elija un lado sobre el otro en este debate, sino más bien hacer que esté al tanto de esta discusión en curso.</p><h2 id="conclusi-n">Conclusión</h2><p>La etiqueta <code>&lt;i&gt;</code> es un espacio de texto que representa un cambio en el estado de ánimo o la calidad del texto. Si desea poner énfasis en el texto, la etiqueta apropiada sería la etiqueta <code>&lt;em&gt;</code>.</p><p>La etiqueta <code>&lt;i&gt;</code> no debe usarse con fines de estilo. La forma correcta de aplicar estilo al texto en cursiva es utilizar la propiedad de <code>font-style</code> CSS.</p><p>Espero que haya disfrutado de este artículo y haya aprendido a utilizar la etiqueta <code>&lt;i&gt;</code>.</p><p>Traducido del artículo de <strong><a href="https://www.freecodecamp.org/news/author/jessica-wilkins/">Jessica Wilkins</a></strong> - <a href="https://www.freecodecamp.org/news/html-italics-tutorial-how-to-make-text-italic-with-the-i-tag/"><strong>HTML Italics Tutorial – How to Make Text Italic with the &lt;i&gt; tag</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo escribir HTML / CSS más rápido con atajos de Emmet ]]>
                </title>
                <description>
                    <![CDATA[ Emmet es una de mis funciones integradas favoritas de VS Code. También está disponible como una extensión en otros editores de código. Piense en Emmett como una taquigrafía. Con él, puede escribir fácilmente una gran cantidad de código rápidamente. Acelera drásticamente su flujo de trabajo HTML y CSS. Entender cómo ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/untitled-11/</link>
                <guid isPermaLink="false">605b3a95540cd708b5738a51</guid>
                
                    <category>
                        <![CDATA[ Productividad ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Mon, 31 May 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/03/fCC_-Emmet.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Emmet es una de mis funciones integradas favoritas de VS Code. También está disponible como una extensión en otros editores de código.</p><p>Piense en Emmett como una taquigrafía. Con él, puede escribir fácilmente una gran cantidad de código rápidamente. Acelera drásticamente su flujo de trabajo HTML y CSS.</p><p>Entender cómo usar Emmet es literalmente una superpotencia. ¿Algunos incluso lo han llamado un código de trucos para programar. </p><p>Y es solo una de las muchas características asombrosas integradas de VS Code.</p><p>Recientemente, lancé un curso completo y detallado llamado <strong><a href="https://courses.codestackr.com/vs-code-superhero?coupon=LAUNCH">Become A VS Code SuperHero. </a></strong>(Conviértete en un superheroe de VS Code). Cubre todos los aspectos de VS Code en gran profundidad.</p><p>Este artículo se basa en una de las 11 secciones del curso: <strong>escritura y formato de código.</strong></p><h2 id="html">HTML</h2><p>Con Emmet puede crear rápidamente una plantilla HTML en un abrir y cerrar de ojos. En un archivo HTML, simplemente escriba <code>!</code> y verá que Emmet ha aparecido como sugerencia. Ahora presiona <code>Enter</code>. Ahí lo tiene, una página web HTML básica en blanco lista para usar. </p><p>Si nunca antes ha visto HTML y no tiene idea de qué es todo esto, no se preocupe. Solo estoy demostrando las capacidades de VS Code y Emmet. No es necesario que sepas qué significa todo esto en este momento.</p><h3 id="etiquetas-b-sicas">Etiquetas Básicas</h3><p>Para crear etiquetas HTML básicas, simplemente escriba el nombre de la etiqueta y presione <code>Enter</code>. Observe cómo Emmet coloca su cursor dentro de la etiqueta. Ahora está configurado para continuar escribiendo dentro de la etiqueta.</p><ul><li>Intente escribir: <code>div</code> y luego <code>Enter</code>, o <code>h1 Enter</code>, o <code>p Enter</code>.</li><li>Estos también funcionan: <code>bq</code> para un <code>&lt;blockquote&gt;,</code> <code>hdr</code> para un <code>&lt;header&gt;</code>, <code>ftr</code> para un <code>&lt;footer&gt;</code>, <code>btn</code> para un <code>&lt;button&gt;</code> y <code>sect</code> para una sección.</li></ul><h3 id="clases">Clases</h3><p>Si está familiarizado con CSS, Emmet usa la misma forma para referirse a las clases usando un <code>.</code>. Para definir una clase junto con la etiqueta, simplemente agréguela así:</p><ul><li><code>div.wrapper</code> —&gt; <code>&lt;div class="wrapper"&gt;&lt;/div&gt;</code></li><li><code>h1.header.center</code> —&gt; <code>&lt;h1 class="header center"&gt;&lt;/h1&gt;</code></li></ul><h3 id="id-s">ID’s</h3><p>Los Id funcionan de manera muy similar:</p><ul><li><code>div#hero</code> —&gt; <code>&lt;div id="hero"&gt;&lt;/div&gt;</code></li></ul><h3 id="combinatoria">Combinatoria</h3><p>Puede combinar estos juntos:</p><ul><li><code>div#hero.wrapper</code> —&gt; <code>&lt;div id="hero" class="wrapper"&gt;&lt;/div&gt;</code></li></ul><h3 id="atributos">Atributos</h3><p>También podemos especificar atributos para las etiquetas:</p><ul><li><code>img[src="cat.jpg"][alt="foto de gato"]</code> —&gt; <code>&lt;img src="cat.jpg" alt="foto de gato" /&gt;</code></li></ul><h3 id="contenido">Contenido</h3><p>Para incluir contenido dentro de la etiqueta, simplemente envolvemos el contenido entre llaves, <code>{ }</code>.</p><ul><li><code>p{Esto es un párrafo}</code> —&gt; <code>&lt;p&gt;Esto es un párrafo&lt;/p&gt;</code></li></ul><h3 id="etiquetas-hermanos-e-hijos">Etiquetas hermanos e hijos </h3><p>Cada vez se pone mejor. También podemos especificar etiquetas hermanos e hijos usando los caracteres <code>+</code> y <code>&gt;</code>.</p><ul><li><code>section+section</code> —&gt; <code>&lt;section&gt;&lt;/section&gt;&lt;section&gt;&lt;/section&gt;</code></li><li><code>ul&gt;li</code> —&gt; <code>&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;</code></li></ul><h3 id="escalando">Escalando</h3><p>Tienes que intentar imaginar lo que estás construyendo en tu cabeza mientras escribes la taquigrafía de Emmet. En este ejemplo, "treparemos" por la estructura HTML usando <code>^</code>. </p><p><code>div+div&gt;p&gt;span+em^bq</code></p><p>Resultado:</p><pre><code class="language-html">&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
    &lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
    &lt;blockquote&gt;&lt;/blockquote&gt;
&lt;/div&gt;
</code></pre><p>Aquí, queríamos que la etiqueta en blockquote estuviera al mismo nivel que el párrafo. Por eso, necesitábamos "trepar". De lo contrario, estaría dentro del párrafo.</p><h3 id="agrupar">Agrupar</h3><p>Si su estructura es muy compleja, es posible que desee agrupar etiquetas en lugar de atravesar trepando.</p><p>En este ejemplo, crearemos un encabezado (header) y un pie de página (footer) sin escalar usando paréntesis <code>( )</code>.</p><p><code>div&gt;(header&gt;ul&gt;li&gt;a)+footer&gt;p</code></p><p>Resultado:</p><pre><code class="language-html">&lt;div&gt;
    &lt;header&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/header&gt;
    &lt;footer&gt;
        &lt;p&gt;&lt;/p&gt;
    &lt;/footer&gt;
&lt;/div&gt;
</code></pre><h3 id="multiplicaci-n-y-">Multiplicación y $</h3><p>Podemos generar múltiples etiquetas multiplicando (<code>*</code>) y numerando elementos en secuencia usando un signo de dólar (<code>$</code>).</p><ul><li><code>ul&gt;li*5</code> —&gt; <code>&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;</code></li><li><code>ul&gt;li{Item $}*3</code> —&gt; <code>&lt;ul&gt;&lt;li&gt;Item 1&lt;/li&gt;&lt;li&gt;Item 2&lt;/li&gt;&lt;li&gt;Item 3&lt;/li&gt;&lt;/ul&gt;</code></li></ul><p>Incluso puede personalizar la secuencia de numeración rellenando con ceros, comenzando con un número específico e incluso en la dirección inversa.</p><p>Pad con ceros: <code>u&gt;li.item$$$*5</code></p><p>Resultado:</p><pre><code class="language-html">&lt;ul&gt;
    &lt;li class="item001"&gt;&lt;/li&gt;
    &lt;li class="item002"&gt;&lt;/li&gt;
    &lt;li class="item003"&gt;&lt;/li&gt;
    &lt;li class="item004"&gt;&lt;/li&gt;
    &lt;li class="item005"&gt;&lt;/li&gt;
&lt;/ul&gt;
</code></pre><p>Comience con un número específico: <code>ul&gt;li.item$@3*5</code></p><p>Resultado:</p><pre><code class="language-html">&lt;ul&gt;
    &lt;li class="item3"&gt;&lt;/li&gt;
    &lt;li class="item4"&gt;&lt;/li&gt;
    &lt;li class="item5"&gt;&lt;/li&gt;
    &lt;li class="item6"&gt;&lt;/li&gt;
    &lt;li class="item7"&gt;&lt;/li&gt;
&lt;/ul&gt;
</code></pre><p>Dirección inversa: <code>ul&gt;li.item$@-*5</code></p><p>Resultado:</p><pre><code class="language-html">&lt;ul&gt;
    &lt;li class="item5"&gt;&lt;/li&gt;
    &lt;li class="item4"&gt;&lt;/li&gt;
    &lt;li class="item3"&gt;&lt;/li&gt;
    &lt;li class="item2"&gt;&lt;/li&gt;
    &lt;li class="item1"&gt;&lt;/li&gt;
&lt;/ul&gt;
</code></pre><p>Dirección inversa desde un número específico: <code>ul&gt;li.item$@-3*5</code></p><p>Resultado:</p><pre><code class="language-html">&lt;ul&gt;
    &lt;li class="item7"&gt;&lt;/li&gt;
    &lt;li class="item6"&gt;&lt;/li&gt;
    &lt;li class="item5"&gt;&lt;/li&gt;
    &lt;li class="item4"&gt;&lt;/li&gt;
    &lt;li class="item3"&gt;&lt;/li&gt;
&lt;/ul&gt;
</code></pre><h3 id="nombres-de-etiqueta-impl-citos">Nombres de etiqueta implícitos</h3><p>Hay ciertas etiquetas que no es necesario escribir y pueden estar implícitas.</p><ul><li>Una clase definida inicialmente sin etiqueta estará implícita como <code>&lt;div&gt;</code>. <br><code>.wrapper</code> —&gt; <code>&lt;div class="wrapper"&gt;&lt;/div&gt;</code></li><li>Una clase definida dentro de una etiqueta de énfasis estará implícita como <code>&lt;span&gt;</code>.<br><code>em&gt;.enfasis</code> —&gt; <code>&lt;em&gt;&lt;span class="enfasis"&gt;&lt;/span&gt;&lt;/em&gt;</code></li><li>Una clase definida dentro de una lista estará implícita como un elemento de lista.<br><code>ul&gt;.item</code> —&gt; <code>&lt;ul&gt;&lt;li class="item"&gt;&lt;/li&gt;&lt;/ul&gt;</code></li><li>Una clase definida dentro de una tabla estará implícita como <code>&lt;tr&gt;</code> y dentro de una fila será un <code>&lt;td&gt;</code>. &nbsp;<br><code>table&gt;.fila&gt;.col</code> —&gt; <code>&lt;table&gt;&lt;tr class="fila"&gt;&lt;td class="col"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</code></li></ul><h3 id="envolver-con-etiquetas">Envolver con etiquetas</h3><p>Habrá ocasiones en las que tenga un código existente que desee envolver con una etiqueta. Podemos hacerlo fácilmente con Emmet. </p><p>Simplemente resalte el código que desea envolver y abra la paleta de comandos (<code>F1</code>). Luego busque Emmet: Ajustar con abreviatura <code>Emmet: Wrap with Abbreviation</code>. A continuación, se le presentará un cuadro de diálogo donde puede escribir el elemento. </p><p><code>test</code> —&gt; <code>&lt;div&gt;test&lt;/div&gt;</code></p><p>También puede utilizar la sintaxis estándar de Emmet en este cuadro de diálogo. Intente ajustar un poco de texto con <code>span.wrapper</code>.</p><p>De forma predeterminada, esta funcionalidad no está asignada a un método abreviado de teclado. Por lo tanto, si lo usa con frecuencia, es posible que desee agregar un acceso directo personalizado para él.</p><h3 id="lorem-ipsum">Lorem Ipsum</h3><p>"Lorem Ipsum" es un texto ficticio utilizado por los desarrolladores para representar datos en una página. Simplemente escriba <code>lorem</code> y presione <code>Enter</code>. Emmet generará 30 palabras de texto falso que puede usar como relleno en su proyecto.</p><p>También se puede definir la cantidad de palabras generadas.</p><ul><li><code>lorem10</code> te dará 10 palabras de texto aleatorio.</li></ul><h3 id="poni-ndolo-todo-junto">Poniéndolo todo junto</h3><p>Usemos varias cosas que hemos aprendido hasta ahora. Prueba esto:</p><p><code>ul.mi-lista&gt;lorem10.item-$*5</code></p><p>Resultado:</p><pre><code class="language-html">&lt;ul class="mi-lista"&gt;
  &lt;li class="item-1"&gt;Lorem ipsum dolor sit amet.&lt;/li&gt;
  &lt;li class="item-2"&gt;Numquam repudiandae fuga porro consequatur?&lt;/li&gt;
  &lt;li class="item-3"&gt;Culpa, est. Tenetur, deleniti nihil?&lt;/li&gt;
  &lt;li class="item-4"&gt;Numquam architecto corrupti quam repudiandae.&lt;/li&gt;
&lt;/ul&gt;
</code></pre><h2 id="css">CSS</h2><p>En CSS, Emmet tiene una abreviatura para cada propiedad. No voy a enumerarlos todos, pero señalaré los más utilizados. Para ver la lista completa, consulte la <a href="https://docs.emmet.io/cheat-sheet/">hoja de referencia</a> de Emmet.</p><h3 id="position">Position</h3><ul><li><code>pos</code> —&gt; <code>position:relative;</code> (Por defecto es relative)</li><li><code>pos:s</code> —&gt; <code>position:static;</code></li><li><code>pos:a</code> —&gt; <code>position:absolute;</code></li><li><code>pos:r</code> —&gt; <code>position:relative;</code></li><li><code>pos:f</code> —&gt; <code>position:fixed;</code></li></ul><h3 id="display">Display</h3><ul><li><code>d</code> —&gt; <code>display:block;</code> (Lo predetermina a block)</li><li><code>d:n</code> —&gt; <code>display:none;</code></li><li><code>d:b</code> —&gt; <code>display:block;</code></li><li><code>d:f</code> —&gt; <code>display:flex;</code></li><li><code>d:if</code> —&gt; <code>display:inline-flex;</code></li><li><code>d:i</code> —&gt; <code>display:inline;</code></li><li><code>d:ib</code> —&gt; <code>display:inline-block;</code></li></ul><h3 id="cursor">Cursor</h3><ul><li><code>cur</code> —&gt; <code>cursor:pointer;</code></li></ul><h3 id="color">Color</h3><ul><li><code>c</code> —&gt; <code>color:#000;</code></li><li><code>c:r</code> —&gt; <code>color:rgb(0, 0, 0);</code></li><li><code>c:ra</code> —&gt; <code>color:rgba(0, 0, 0, .5);</code></li><li><code>op</code> —&gt; <code>opacity: ;</code></li></ul><h3 id="margin-padding">Margin &amp; Padding</h3><ul><li><code>m</code> —&gt; <code>margin: ;</code></li><li><code>m:a</code> —&gt; <code>margin:auto;</code></li><li><code>mt</code> —&gt; <code>margin-top: ;</code></li><li><code>mr</code> —&gt; <code>margin-right: ;</code></li><li><code>mb</code> —&gt; <code>margin-bottom: ;</code></li><li><code>ml</code> —&gt; <code>margin-left: ;</code></li><li><code>p</code> —&gt; <code>padding: ;</code></li><li><code>pt</code> —&gt; <code>padding-top: ;</code></li><li><code>pr</code> —&gt; <code>padding-right: ;</code></li><li><code>pb</code> —&gt; <code>padding-bottom: ;</code></li><li><code>pl</code> —&gt; <code>padding-left: ;</code></li></ul><h3 id="box-sizing">Box Sizing</h3><ul><li><code>bxz</code> —&gt; <code>box-sizing:border-box;</code></li></ul><h3 id="width">Width</h3><ul><li><code>w</code> —&gt; <code>width: ;</code></li><li><code>h</code> —&gt; <code>height: ;</code></li><li><code>maw</code> —&gt; <code>max-width: ;</code></li><li><code>mah</code> —&gt; <code>max-height: ;</code></li><li><code>miw</code> —&gt; <code>min-width: ;</code></li><li><code>mih</code> —&gt; <code>min-height: ;</code></li></ul><h3 id="border">Border</h3><ul><li><code>bd</code> —&gt; <code>border: ;</code></li><li><code>bd+</code> —&gt; <code>border:1px solid #000;</code></li><li><code>bd:n</code> —&gt; <code>border:none;</code></li></ul><h3 id="-emmet-es-incre-ble-">¡Emmet es increíble!</h3><p>Con Emmet, puede crear una estructura HTML realmente compleja con una línea. Es realmente asombroso. Y también funciona con CSS.</p><p>Puede ver cómo Emmet puede aumentar drásticamente su eficiencia y velocidad al escribir HTML y CSS.</p><p>Si desea aumentar aún más su eficiencia y velocidad mientras usa VS Code, consulte el curso Conviértase en un Superhéroe de VS Code (<a href="https://courses.codestackr.com/vs-code-superhero?coupon=LAUNCH"><strong>Become A VS Code Super Hero</strong></a>).</p><p>El curso profundiza mucho más en estos conceptos y te ayuda a convertirte en un desarrollador de superhéroes rápido y eficiente :)</p><p>Traducido del artículo de <strong><a href="https://www.freecodecamp.org/news/author/jesse/">Jesse Hall</a></strong> - <strong><a href="https://www.freecodecamp.org/news/write-html-css-faster-with-emmet-cheat-codes/">How to Write HTML/CSS Faster with Emmet Cheat-Codes</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Código de enlace HTML: cómo insertar un enlace a un sitio web con HREF ]]>
                </title>
                <description>
                    <![CDATA[ Un sitio web se compone de varias piezas de información que se encuentran en diferentes secciones y en diferentes páginas dentro del propio sitio. También puede encontrar información relacionada con ese sitio en páginas que se encuentran en diferentes sitios web. Todas estas secciones y páginas están vinculadas en HTML ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/codigo-de-enlace-html-como-insertar-un-enlace-a-un-sitio-web-con-href/</link>
                <guid isPermaLink="false">60587aae540cd708b5738420</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Fri, 14 May 2021 05:12:02 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/06/photo-1462867021696-4f365d5ed53a.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Un sitio web se compone de varias piezas de información que se encuentran en diferentes secciones y en diferentes páginas dentro del propio sitio.</p><p>También puede encontrar información relacionada con ese sitio en páginas que se encuentran en diferentes sitios web.</p><p>Todas estas secciones y páginas están vinculadas en HTML mediante el atributo <code>href</code>.</p><p>En este artículo, veremos el término <em>Hipervínculo</em>. Luego, aprenderemos sobre las diferentes formas en que puede crear hipervínculos, qué hace <code>href</code> y cómo usar apropiadamente el atributo <code>href</code> para vincular secciones y páginas.</p><h2 id="-qu-son-los-hiperv-nculos">¿Qué son los Hipervínculos?</h2><p>En HTML, hay varias formas de enlaces. En las imágenes, existe el atributo <code>src</code> para "vincular" la fuente de una imagen.</p><p>Para las hojas de estilo, existe la etiqueta de enlace (<code>link</code>) con el atributo <code>href</code> para "enlazar" la fuente de una hoja de estilo. </p><p>Para las etiquetas de anclaje (anchor), existe el atributo <code>href</code> para "vincular" la sección o página de referencias. Los enlaces de anclaje también se denominan hipervínculos.</p><p>Cuando un usuario sigue un hipervínculo, está navegando a esa página. Los hipervínculos son elementos que hacen referencia a otro documento, de modo que cuando un usuario hace clic en ese elemento, se le dirige al nuevo documento.</p><h2 id="cu-ndo-usar-hiperv-nculos">Cuándo usar Hipervínculos</h2><p>Como se indicó anteriormente, es posible que desee vincular varias páginas (dentro de su sitio web o externamente) o secciones en su sitio web.</p><p>En este artículo, destacaré tres formas de crear hipervínculos. Es importante conocer estas diferentes formas porque determinan los valores del atributo <code>href</code>.</p><p>Muy bien, veamos esas tres formas diferentes ahora.</p><h3 id="1-cuando-deseas-vincular-a-secciones-de-una-p-gina">1. Cuando deseas vincular a secciones de una página</h3><p>Puede utilizar este método, por ejemplo, al crear una página con una tabla de contenido.</p><p>En este caso, es posible que no desee que sus lectores tengan que desplazarse hacia abajo hasta la última sección. Sería bueno si pudieran hacer clic en la tabla de contenido y el navegador los llevaría allí directamente.</p><p>Este tipo de vinculación ocurre en el mismo documento y simplemente lleva al lector a diferentes secciones. Aprenderemos cómo crear un hipervínculo para este caso de uso cuando aprendamos sobre el atributo <code>href</code>.</p><h3 id="2-cuando-deseas-vincular-a-otra-p-gina-dentro-de-un-sitio-web">2. Cuando deseas vincular a otra página dentro de un sitio web</h3><p>En su sitio, es posible que tenga una página de inicio, una página de información, una página de servicios y otros tipos de páginas. Este método ayuda a los usuarios a navegar de una página a otra.</p><h3 id="3-cuando-deseas-vincular-a-p-ginas-externas">3. Cuando deseas vincular a páginas externas</h3><p>A veces, es posible que su sitio web no contenga determinada información y que otro sitio web la tenga. En tales casos, es posible que desee hacer referencia al otro sitio web.</p><p>Para hacer esto, debe crear un hipervínculo externo que lleve al usuario al otro sitio web.</p><p>Estas son las tres formas principales de vincular páginas. Veamos ahora cómo el atributo <code>href</code> puede ayudarlo a habilitarlos.</p><h2 id="c-mo-utilizar-el-atributo-href">Cómo utilizar el atributo href</h2><p>El <code>href</code> es un atributo que se utiliza para hacer referencia a otro documento. Puede encontrarlo en etiquetas de enlace (<code>link</code>) y etiquetas de anclaje.</p><p>El atributo <code>href</code> se utiliza en etiquetas de anclaje (<code>a</code>) para crear hipervínculos en sitios web. El valor del atributo contiene la URL a la que apunta el hipervínculo. Puedes usarlo así:</p><pre><code class="language-html">&lt;a href="URL"&gt;Hypervínculo&lt;/a&gt;
</code></pre><p>Sin embargo, los valores de la URL pueden ser diferentes dependiendo de lo que esté apuntando. Para las tres formas que vimos anteriormente, veamos cómo puede usar <code>href</code>.</p><h3 id="1-c-mo-usar-href-para-vincular-secciones-dentro-de-un-documento">1. Cómo usar <code>href</code> para vincular secciones dentro de un documento</h3><p>En este caso, el valor será el <code>id</code> del elemento que inicia la sección. Eso significa que tendremos algo como esto:</p><pre><code class="language-html">&lt;a href="#segunda-seccion"&gt;Ir a la segunda sección&lt;/a&gt;
&lt;!--
  Algunas cosas aquí
 --&gt;
&lt;section id="segunda-seccion"&gt;
	&lt;h2&gt;Segunda sección&lt;/h2&gt;
&lt;/section&gt;
</code></pre><p>Cuando se hace clic en el hipervínculo "Ir a la segunda sección", el navegador se desplaza hacia abajo hasta la sección con la identificación asociada (<code>id</code>). También cambia la URL en la barra de URL del navegador.</p><p>Por ejemplo, si la URL anterior era <code>misitioweb.com</code>, la nueva URL será <code>misitioweb.com#segunda-seccion</code>.</p><h3 id="2-c-mo-usar-href-para-vincular-p-ginas-dentro-de-un-sitio-web">2. Cómo usar <code>href</code> para vincular páginas dentro de un sitio web</h3><p>Para usar <code>href</code> de esta manera, debe comprender qué son las URL relativas y las URL absolutas.</p><p>Las URL relativas son URL cortas que apuntan a un documento en el mismo sitio web. Es más como, desde donde estás, ¿cómo llegas a este otro lugar en el mismo sitio web?</p><p>Este contraste, con las URL absolutas. Para estos, no le preocupa dónde se encuentra actualmente: proporciona todos los detalles para llegar a otro lugar como si estuviera comenzando desde el principio.</p><p>Para navegar entre páginas que viven en un sitio web, puede usar cualquiera de estas URL, pero comúnmente se usan las URL relativas.</p><p>Digamos que está en la página de inicio y desea hacer referencia a la página 'Acerca de'. </p><p>A continuación, se explica cómo utilizar el atributo <code>href</code> para hacer eso: </p><pre><code class="language-html">&lt;a href='/acerca' &gt;Acerca de&lt;/a&gt;
</code></pre><p>Desde la página de inicio (digamos <code>misitioweb.com</code>), el enlace anterior navegará a <code>misitioweb.com/acerca</code>.</p><p>Hay algo que vale la pena señalar sobre la barra inclinada (<code>/</code>) antes del enlace. El <code>/</code> le dice al navegador que agregue el enlace a la raíz del sitio (que es el dominio). Entonces, la raíz es <code>misitioweb.com</code> y el enlace se adjunta así: <code>misitioweb.com/acerca</code>.</p><p>Si la barra inclinada estaba ausente (<code>&lt;a href='acerca'&gt;</code>), el navegador reemplazaría la ruta actual con <code>/acerca</code>.</p><p>Por ejemplo, si actualmente estuviéramos en <code>misitioweb.com/proyectos/generador</code> y tuviéramos los siguientes enlaces:</p><pre><code class="language-html">&lt;a href='acerca'&gt;Acerca 1&lt;/a&gt;
&lt;a href='/acerca'&gt;Acerca 2&lt;/a&gt;
</code></pre><p>"Acerca 1" navegará a <code>msitioweb.com/proyectos/acerca</code> (reemplazando la ruta <code>/ generador</code> actual) y "Acerca 2" navegará a <code>misitioweb.com/about</code> </p><h3 id="3-c-mo-usar-href-para-vincular-a-p-ginas-en-otro-sitio-web">3. Cómo usar <code>href</code> para vincular a páginas en otro sitio web</h3><p>Dado que está en un sitio web diferente, no hay forma de que podamos usar URL relativas. Para esto, necesitamos especificar la fuente absoluta del documento al que hacemos referencia.</p><p>Por ejemplo, digamos que estamos en <code>misitioweb.com</code> y queremos hacer referencia a <code>google.com</code>, así es como lo haríamos con <code>href</code>: </p><pre><code class="language-html">&lt;a href='https://google.com'&gt;Google&lt;a&gt;
</code></pre><p>Si solo hubiéramos escrito <code>google.com</code>, el navegador lo trataría como una página dentro de un sitio web y, por lo tanto, lo agregaría a <code>misitioweb.com</code>.</p><h2 id="conclusi-n">Conclusión</h2><p>En este artículo, hemos visto cómo el atributo <code>href</code> nos permite crear diferentes tipos de enlaces. Estos diversos enlaces muestran las diferentes formas en que se puede hacer referencia a documentos / páginas dentro de un sitio web.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/dillionmegida/"><strong>Dillion Megida</strong></a> - <a href="https://www.freecodecamp.org/news/html-link-code-how-to-insert-a-link-to-a-website-with-href-3/"><strong>HTML Link Code – How to Insert a Link to a Website with HREF</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Programación funcional en JavaScript Explicado ]]>
                </title>
                <description>
                    <![CDATA[ Una de las cosas más difíciles que tienes que hacer en programación es controlar la complejidad. Sin una consideración cuidadosa, el tamaño y la complejidad de un programa pueden crecer hasta el punto de confundir incluso al creador del programa.  De hecho, como dijo un autor: > "El arte ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/programacion-funcional-en-javascript-explicado/</link>
                <guid isPermaLink="false">604f4fe2c2765408ef8de521</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Tue, 11 May 2021 05:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/05/blog1-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Una de las cosas más difíciles que tienes que hacer en programación es controlar la complejidad. Sin una consideración cuidadosa, el tamaño y la complejidad de un programa pueden crecer hasta el punto de confundir incluso al creador del programa.</p><p> De hecho, como dijo un autor:</p><blockquote>"El arte de programar es la habilidad de controlar la complejidad" - Marijn Haverbeke</blockquote><p>En este artículo desglosaremos un concepto importante de programación. Este concepto de programación puede ayudarlo a mantener la complejidad bajo control y a escribir mejores programas.</p><p>Al final de este artículo, sabrá qué es la programación funcional, los tipos de funciones que existen, los principios de la programación funcional y tendrá una comprensión más profunda de las funciones de orden superior (Higher Order functions).</p><p>Supongo que ya tiene conocimientos preexistentes de los conceptos básicos de las funciones. Los conceptos fundamentales de funciones no se tratarán en este artículo.</p><p>Si desea una revisión rápida de las funciones en JavaScript, he escrito un artículo detallado <a href="https://dev.to/codingknite/javascript-functions-broken-down-4fgh">aquí</a>.</p><h2 id="-qu-es-la-programaci-n-funcional">¿Qué es la programación funcional?</h2><p>La programación funcional es un paradigma de programación o un estilo de programación que se basa en gran medida en el uso de funciones puras y aisladas.</p><p>Tal como puede haber adivinado por el nombre, el uso de funciones es el componente principal de la programación funcional. Pero, el mero uso de funciones no se traduce en programación funcional.</p><p>En la programación funcional, utilizamos funciones puras, que son funciones que no tienen efectos secundarios. Explicaré qué significa todo esto.</p><p>Antes de profundizar en el artículo, comprendamos parte de la terminología y los tipos de funciones que existen.</p><h2 id="tipos-de-funciones">Tipos de funciones</h2><p>Hay cuatro tipos principales de funciones.</p><h3 id="funciones-de-primera-clase">Funciones de primera clase</h3><p>En JavaScript, todas las funciones son funciones de primera clase. Eso significa que pueden tratarse como cualquier otra variable.</p><p>Las funciones de primera clase son funciones que pueden asignarse como valores a variables, devolverse desde otras funciones y pasarse como argumentos a otras funciones.</p><p>Considera este ejemplo de una función pasada a una variable:</p><pre><code class="language-javascript">const holaMundo = () =&gt; {
	console.log("Hola, Mundo"); // Hola, Mundo
};
holaMundo();
</code></pre><h3 id="funciones-callback">Funciones Callback</h3><p>Las funciones callback son funciones que se pasan a otras funciones como argumentos y son llamadas por la función en la que se pasan.</p><p>Simplemente, las funciones callback son funciones que escribimos como argumentos en otras funciones. No podemos invocar funciones callback. Se invocan cuando se llama a la función principal en la que se pasaron como argumentos.</p><p>Veamos un ejemplo:</p><p><code>valorDePrueba</code> es una función que acepta un valor y una función callback <code>prueba</code> que devuelve "valor pasó la prueba" si el valor devuelve verdadero cuando se pasa a la función callback. </p><p>En este caso, la función callback es el segundo argumento que pasamos a la función <code>valorDePrueba</code>. Se invoca cuando se llama a la función <code>valorDePrueba</code>.</p><h3 id="funciones-de-orden-superior-high-order-functions-">Funciones de orden superior (High Order Functions)</h3><p>Las funciones de orden superior son funciones que reciben otras funciones como argumentos o devuelven una función.</p><p>En este artículo, voy a profundizar en las funciones de orden superior y por qué son una provisión tan poderosa. Por ahora, todo lo que necesita saber es que este tipo de funciones reciben otras funciones como argumentos o funciones de retorno.</p><h3 id="funciones-as-ncronas">Funciones asíncronas</h3><p>Las funciones asíncronas son funciones que no tienen nombre y no se pueden reutilizar. Estas funciones se escriben normalmente cuando necesitamos realizar algo una vez y en un solo lugar.</p><p>Un ejemplo perfecto de una función asíncrona es lo que escribimos anteriormente en este artículo.</p><pre><code class="language-javascript">const chequearString = ValorDePrueba('Twitter',  valor  =&gt;  typeof  valor === 'string');
chequeoString;

// Consulte el fragmento de código anterior. </code></pre><p><code>chequearString</code> es una variable cuyo valor es una función. Pasamos dos argumentos a esta función.</p><p><code>'Twitter'</code> es el primer argumento y el segundo es una función asíncrona. Esta función no tiene un nombre y solo tiene una tarea: verificar si el valor dado es una string.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/03/meme-fcc.jpg" class="kg-image" alt="meme-fcc" width="491" height="276" loading="lazy"></figure><h2 id="principios-de-la-programaci-n-funcional">Principios de la programación funcional</h2><p>Anteriormente en el artículo aludí al hecho de que el mero uso de funciones no se traduce en programación funcional.</p><p>Hay algunos principios que debemos comprender si nuestros programas deben calificar para el estándar de programación funcional. Echemos un vistazo a esos.</p><h3 id="evite-mutaciones-y-efectos-secundarios-">Evite mutaciones y efectos secundarios.</h3><p>El primer principio de la programación funcional es evitar cambiar las cosas. Una función no debería cambiar nada, como una variable global.</p><p>Esto es muy importante porque los cambios a menudo provocan errores. Si una función cambia una variable global, por ejemplo, podría dar lugar a un comportamiento inesperado en todos los lugares donde se utiliza esa variable.</p><p>El segundo principio es que una función debe ser pura, lo que significa que no tiene efectos secundarios. En la programación funcional, los cambios que se realizan se denominan mutaciones y los resultados se denominan efectos secundarios.</p><p>Una función pura no hace ninguna de las dos. Una función pura siempre tendrá la misma salida para la misma entrada.</p><p>Si una función depende de una variable global, esa variable debe pasarse a la función como argumento. Esto nos permite obtener la misma salida para la misma entrada.</p><p>Aquí hay un ejemplo:</p><pre><code class="language-javascript">const edadLegalEnEEUU = 21;
const chequearEstadoLegal = (edad, edadLegal) =&gt; {
    return edad &gt;= edadLegal ? 'Mayor de edad.' : 'Menor de edad.';
};
const johnEstado = chequearEstadoLegal(18, edadLegalEnEEUU);
johnEstado; // Menor de edad.
edadLegalEnEEUU; // 21
</code></pre><h3 id="abstracci-n">Abstracción</h3><p>Las abstracciones ocultan detalles y nos permiten hablar sobre problemas en un nivel superior sin describir todos los detalles de implementación del problema.</p><p>Usamos abstracciones en casi todos los aspectos de nuestra vida, especialmente en el habla.</p><p>Por ejemplo, en lugar de decir <em>"Voy a cambiar dinero por una máquina que una vez conectada muestra imágenes en movimiento acompañadas de sonido"</em>, lo más probable es que diga <em>"Voy a comprar un televisor".</em></p><p>En este caso, <strong>comprar</strong> y <strong>televisor</strong> son abstracciones. Estas formas de abstracción facilitan mucho el habla y reducen las posibilidades de decir algo incorrecto.</p><p>Pero estará de acuerdo conmigo en que antes de usar términos abstractos como <strong>comprar</strong>, primero debe comprender el significado del término y el problema que abstrae.</p><p>Las funciones nos permiten lograr algo similar. Podemos crear funciones para tareas que es más probable que repitamos una y otra vez. Las funciones nos permite crear nuestras propias abstracciones.</p><p>Además de crear nuestras propias abstracciones, ya se han creado algunas funciones para que abstraigamos tareas que es más probable que hagamos una y otra vez.</p><p>Así que vamos a ver algunas de estas funciones de orden superior que ya existen para abstraer tareas repetitivas.</p><h3 id="filtrando-arreglos">Filtrando Arreglos</h3><p>Cuando trabajamos con estructuras de datos como arreglos, es más probable que nos encontremos en una situación en la que solo estemos interesados en ciertos elementos del arreglo.</p><p>Para obtener estos elementos podemos crear fácilmente una función para realizar la tarea:</p><pre><code class="language-javascript">function arregloFiltro(arreglo, prueba) {
    const arregloFiltrado = [];
    for (let elemento of arreglo) {
        if (prueba(elemento)) {
            arregloFiltrado.push(elemento);
        }
    }
    return arregloFiltrado;
};
const arregloMezclado = [1, true, null, "Hola", undefined, "Mundo", false];
const soloCadenas = arregloFiltro(arregloMezclado, elemento =&gt; typeof elemento === 'cadena');
onlyCadenas; // ['Hola', 'Mundo']
</code></pre><p><code>arregloFlitro</code> es una función que acepta un arreglo y una función callback. Recorre el arreglo y agrega los elementos que pasan la prueba en la función callback en un arreglo llamada <code>arregloFiltrado</code>. </p><p>Con esta función podemos filtrar un arreglo y devolver los elementos que nos interesan, como en el caso de <code>arregloMezclado</code>. </p><p>Imagínese si tuviéramos 10 programas diferentes y en cada programa necesitáramos filtrar un arreglo. Tarde o temprano resultaría extremadamente tedioso reescribir la misma función una y otra vez.</p><p>Por suerte, alguien ya pensó en esto. Los arreglos tienen un método de filtro (<code>filter</code>) estándar. Devuelve una nueva arreglo con los elementos del arreglo que recibe que pasan la prueba que proporcionamos. </p><pre><code class="language-javascript">const arregloMezclado = [1, true, null, "Hola", undefined, "Mundo", false];
const stringArreglo = arregloMezclado.filter(elemento =&gt; typeof elemento === 'cadena')
arregloDeCadenas; // ['Hola', 'Mundo']
</code></pre><p>Usando el método de filtro estándar (filter) pudimos lograr los mismos resultados que logramos cuando definimos nuestra propia función en el ejemplo anterior. Entonces, el método de filtro (filter) es una abstracción de la primera función que escribimos.</p><h3 id="transformar-elementos-del-arreglo-con-map">Transformar Elementos del arreglo con Map</h3><p>Imagine otro escenario en el que tenemos una serie de elementos pero nos gustaría realizar una determinada operación en todos los elementos. Podemos escribir una función para hacer esto por nosotros:</p><pre><code class="language-javascript">function transformarArreglo(arreglo, prueba) {
    const arregloTransformado = [];
    for (let elemento of arreglo) {
        arregloTransformado.push(prueba(elemento));
    }
    return arregloTransformado;
};
const edades = [12, 15, 21, 19, 32];
const doblarEdades = transformarArreglo(edades, edad =&gt; edad * 2);
doblarEdades; // [24, 30, 42, 38, 64];
</code></pre><p>Así, hemos creado una función que recorre cualquier arreglo dada y transforma todos los elementos del arreglo en función de la función callback que proporcionamos.</p><p>Pero nuevamente, esto se volvería tedioso si tuviéramos que reescribir la función en 20 programas diferentes.</p><p>Una vez más, alguien pensó en esto por nosotros, y afortunadamente los arreglos tienen un método estándar llamado <code>map</code> que hace exactamente lo mismo. Aplica la función callback en todos los elementos del arreglo dada y luego devuelve una nueva arreglo.</p><pre><code class="language-javascript">const edades = [12, 15, 21, 19, 32];
const doblarEdades = edades.map(edad =&gt; edad * 2);
doblarEdades; // [24, 30, 42, 38, 64];
</code></pre><h3 id="reducir-arreglos-con-reduce">Reducir arreglos con Reduce </h3><p>Aquí hay otro escenario: tiene un arreglo de números, pero le gustaría calcular la suma de todos estos números y devolverla. Por supuesto, puede escribir una función para hacer esto por usted. </p><pre><code class="language-javascript">function reducirArreglo(arreglo, prueba, start) {
    let suma = start;
    for (let elemento of arreglo) {
        suma = prueba(suma, elemento)
    }
    return suma;
}
let numeros = [5, 10, 20];
let doblarNumeros = reducirArreglo(numeros, (a, b) =&gt; a + b, 0);
doblarNumeros; // 35
</code></pre><p>Al igual que en los ejemplos anteriores que acabamos de ver, l0s arreglos tienen un método de reducción estándar (reduce) que tiene la misma lógica que la función que acabamos de escribir. </p><p>El método reduce se utiliza para reducir un arreglo a un solo valor en función de la función callback que proporcionamos. También toma un segundo argumento opcional que especifica desde dónde queremos que comience la operación callback. </p><p>La función callback que proporcionamos en la función de reducción (reduce) tiene dos parámetros. El primer parámetro es el primer elemento del arreglo de forma predeterminada. De lo contrario, es el segundo argumento que proporcionamos en el método de reducción (reduce). El segundo parámetro es el elemento actual del arreglo.</p><pre><code class="language-javascript">let numeros = [5, 10, 20];
let doblarNumeros = numeros.reduce((a, b) =&gt; a + b, 10);
doblarNumeros;  // 45

//El ejemplo anterior utiliza el método de reducción para agregar todos los elementos del arreglo a partir de 10. </code></pre><h2 id="otros-m-todos-de-arreglo-tiles">Otros métodos de Arreglo útiles </h2><h3 id="array-some-">Array.some()</h3><p> Todas las arreglos tienen el método <code>some</code> que acepta una función callback. Devuelve verdadero si <strong>cualquier</strong> elemento del arreglo pasa la prueba dada en la función callback. De lo contrario, devuelve falso: (<code>false</code>)</p><pre><code class="language-javascript">const numeros = [12, 34, 75, 23, 16, 63]
console.log(numeros.some(elemento =&gt; elemento &lt; 100)) // true</code></pre><h3 id="array-every-">Array.every()</h3><p>El método every es lo opuesto al método some. También acepta una función callback y devuelve verdadero (<code>true</code>) si <strong>todos</strong> los elementos del arreglo pasan la prueba dada en la función callback. De lo contrario, devuelve falso: (<code>false</code>)</p><pre><code class="language-javascript">const numeros = [12, 34, 75, 23, 16, 63]
console.log(numeros.every(elemento =&gt; elemento &lt; 100)) // true</code></pre><h3 id="array-concat-">Array.concat()</h3><p>El método <code>concat</code>, abreviatura de concatenar, es un método de arreglo estándar que concatena o une dos arreglos y devuelve una arreglo: </p><pre><code class="language-javascript">const arreglo1 = ['uno', 'dos', 'tres'];
const arreglo2 = ['cuatro', 'cinco', 'seis'];
const arreglo3 = arreglo1.concat(arreglo2);
arreglo3; // [ 'uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis' ]</code></pre><h3 id="array-slice-">Array.slice()</h3><p>El método <code>slice</code> es un método de arreglo que copia los elementos de un arreglo de un índice dado y devuelve un nuevo arrelgo con los elementos copiados. El método <code>slice</code> acepta dos argumentos. </p><p>El primer argumento recibe el índice desde el que empezar a copiar. El segundo argumento recibe el índice desde el que dejar de copiar. Devuelve una nuevo arreglo con los elementos copiados desde el índice inicial (exclusivo) al índice final (inclusivo).</p><p>Sin embargo, tenga en cuenta que el método de slice no utiliza indexación cero. Entonces, el índice del primer elemento del arreglo es 1, no 0:</p><pre><code class="language-javascript">const numeros = [1,2,3,4,5,7,8];
console.log(numeros.slice(1, 4)); // [ 2, 3, 4 ]
</code></pre><h2 id="conclusi-n">Conclusión</h2><p>Espero que hayas disfrutado leyendo este artículo y hayas aprendido algo nuevo al mismo tiempo. </p><p>Hay muchos métodos de arreglos y cadenas que no mencioné en el artículo. Si lo deseas, tómate un tiempo para investigar un poco sobre esos métodos. </p><p>Traducido del artículo de<strong> <a href="https://www.freecodecamp.org/news/author/codingknite/">Joel P. Mugalu</a></strong> - <strong><a href="https://www.freecodecamp.org/news/functional-programming-in-javascript-explained-in-plain-english/">Functional Programming in JavaScript Explained in Plain English</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript String.Replace() ejemplos con expresiones regulares ]]>
                </title>
                <description>
                    <![CDATA[ Las expresiones regulares "Regular Expressions" (también llamadas RegEx o RegExp) son una forma poderosa de analizar texto. Con RegEx, puede hacer coincidir cadenas en puntos que coinciden con caracteres específicos (por ejemplo, JavaScript) o patrones (por ejemplo, NumberStringSymbol - 3a &). El método .replace se usa en cadenas en JavaScript ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/javascript-string-replace-ejemplos-con-expresiones-regulares/</link>
                <guid isPermaLink="false">600d7f03a4e0700982aa051d</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Sat, 01 May 2021 06:27:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/06/photo-1551893478-d726eaf0442c.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Las expresiones regulares "Regular Expressions" (también llamadas RegEx o RegExp) son una forma poderosa de analizar texto. Con RegEx, puede hacer coincidir cadenas en puntos que coinciden con caracteres específicos (por ejemplo, JavaScript) o patrones (por ejemplo, NumberStringSymbol - 3a &amp;).</p><p>El método <code>.replace</code> se usa en cadenas en JavaScript para reemplazar partes de las cadenas con caracteres. A menudo se usa así:</p><pre><code class="language-js">const str = 'JavaScript';
const nuevaStr = str.replace("ava", "-");
console.log(nuevaStr);
// J-Script
</code></pre><p>Como puede ver arriba, el método <code>.replace</code> acepta dos argumentos: la cadena que se reemplazará y con qué se reemplazará la cadena.</p><p>Aquí es donde entra en juego <strong>Regex</strong>.</p><p>El uso de <code>.replace</code> anterior es limitado: los caracteres a reemplazar son conocidos - "ava". ¿Qué pasa si nos preocupamos por un patrón? ¿Quizás un número, dos letras y la palabra "foo" o tres símbolos usados juntos?</p><p>El método <code>.replace</code> utilizado con RegEx puede lograr esto. La expresión regular se puede utilizar de forma eficaz para recrear patrones. Entonces, combinar esto con <code>.replace</code> significa que podemos reemplazar patrones y no solo caracteres exactos.</p><h2 id="c-mo-usar-regex-con-replace-en-javascript">Cómo usar <code>RegEx</code> con <code>.replace</code> en JavaScript</h2><p>Para usar RegEx, el primer argumento de <code>replace</code> se reemplazará con la sintaxis de expresiones regulares, por ejemplo <code>/ regex /</code>. Esta sintaxis sirve como patrón donde cualquier parte de la cadena que coincida con ella será reemplazada por la nueva sub cadena.</p><p>He aquí un ejemplo:</p><pre><code class="language-js">// coincide con un número, algunos caracteres y otro número 
const reg = /\d.*\d/
const str = "Java3foobar4Script"
const nuevaStr = str.replace(reg, "-");
console.log(nuevaStr);
// "Java-Script"
</code></pre><p>La cadena <code>3foobar4</code> coincide con la expresión regular <code>/\d.*\d/</code>, por lo que se reemplaza.</p><p>¿Y si quisiéramos realizar reemplazos en varios lugares?</p><p><code>Regex</code> ofrece eso con la bandera <code>g</code> (global), y lo mismo se puede usar con <code>replace</code>. Así es cómo: </p><pre><code class="language-js">const reg = /\d{3}/g
const str = "Java323Scr995ip4894545t";
const nuevaStr = str.replace(reg, "");
console.log(nuevaStr);
// JavaScrip5t
// 5 no pasó la prueba :(
</code></pre><p>La expresión regular coincide con partes de la cadena que son exactamente 3 números consecutivos. <code>323</code> coincide, <code>995</code> coincide, <code>489</code> coincide y <code>454</code> coincide. Pero los últimos <code>5</code> no coinciden con el patrón.</p><p>El resultado es que <code>JavaScrip5t</code> muestra cómo los patrones coinciden correctamente y se reemplaza con la nueva subcadena (una cadena vacía).</p><p>También se puede utilizar la bandera - <code>i</code>. Esto significa que puede reemplazar los patrones que no distinguen entre mayúsculas y minúsculas. Así es como se usa:</p><pre><code class="language-js">const reg1 = /\dA/
const reg2 = /\dA/i
const str = "Jav5ascript"
const nuevaStr1 = str.replace(reg1, "--");
const nuevaStr2 = str.replace(reg2, "--");
console.log(nuevaStr1) // Jav5ascript
console.log(nuevaStr2) // Jav--script
</code></pre><p><code>..5a ..</code> no coincide con la primera sintaxis porque la expresión regular distingue entre mayúsculas y minúsculas de forma predeterminada. Pero con el uso de la bandera <code>i</code>, como se ve en la segunda sintaxis, la cadena es como se esperaba: reemplazada.</p><h2 id="c-mo-utilizar-split-con-expresiones-regulares">Cómo utilizar Split con Expresiones Regulares</h2><p><code>split</code> también usa <code>RegEx</code>. Lo que significa que puede dividir una cadena no solo en las subcadenas que coinciden con los caracteres exactos, sino también con los patrones.</p><p>He aquí un vistazo rápido:</p><pre><code class="language-js">const regex = /\d{2}a/;
const str = 'Hola54 Como 64aestas';
console.log(str.split(regex));
// ["Hola54 Como ", "estas"]</code></pre><p>La cadena se dividió (<code>split</code>) en <code>64a</code> porque esa subcadena coincide con la expresión regular especificada.</p><p><strong>Tenga en cuenta</strong> que el indicador global - <code>g</code> - en la división <code>split</code> es irrelevante, a diferencia del indicador <code>i</code> y otros indicadores. Esto se debe a que <code>split</code> divide la cadena en varios puntos con los que coincide la expresión regular.</p><h2 id="terminando">Terminando</h2><p><code>RegEx</code> hace reemplazar cadenas con <code>replace</code> en JavaScript sea más efectivo, poderoso y divertido.</p><p>No solo está restringido a caracteres exactos, sino también a patrones y reemplazos múltiples a la vez. En este artículo, hemos visto cómo funcionan juntos usando algunos ejemplos.</p><p>¿Salud por RegEx ?</p><p>Traducido del artículo de <strong><a href="https://www.freecodecamp.org/news/author/dillionmegida/">Dillion Megida</a></strong> - <strong><a href="https://www.freecodecamp.org/news/javascript-string-replace-example-with-regex/">JavaScript String.Replace() Example with RegEx</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript Try Catch: Explicación del manejo de Excepciones ]]>
                </title>
                <description>
                    <![CDATA[ La sentencia try..catch..finally especifica un bloque de código para probar junto con una respuesta en caso de que ocurra un error. La sentencia try puede contener uno o más bloques try y termina con al menos una cláusula catch o  finally. try...catch: try {    throw new ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/javascript-try-catch-explicacion-del-manejo-de-excepciones/</link>
                <guid isPermaLink="false">60058608a4e0700982a9eb35</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Mon, 15 Mar 2021 05:49:19 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/amber-kipp-75715CVEJhI-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>La sentencia <code>try..catch..finally</code> especifica un bloque de código para probar junto con una respuesta en caso de que ocurra un error. La sentencia <code>try</code> puede contener uno o más bloques <code>try</code> y termina con al menos una cláusula <code>catch</code> o <code>finally</code>.</p><h3 id="try-catch-"><code>try...catch</code>:</h3><pre><code class="language-javascript">try {
   throw new Error('mi error');
} catch (err) {
  console.error(err.message);
}

// Output: mi error</code></pre><h3 id="try-finally-"><code>try...finally</code>:</h3><pre><code class="language-javascript">try {
   throw new Error('mi error');
} finally {
  console.error('finally');
}

// Output: finally</code></pre><p>Cuando no se utiliza una declaración <code>catch</code>, el error no se "detecta", aun cuando se ejecute el bloque <code>finally</code> en el código. En cambio, el error continuará en el bloque superior <code>try</code> (o bloque principal).</p><h3 id="try-catch-finally-"><code>try...catch...finally</code>:</h3><pre><code class="language-javascript">try {
   throw new Error('mi error');
} catch (err) {
  console.error(err.message);
} finally {
  console.error('finally');
}

// Output:
// mi error
// finally</code></pre><p><strong>Uso típico:</strong></p><pre><code class="language-javascript">try {
   abrirArchivo(archivo);
   leerArchivo(archivo)
} catch (err) {
  console.error(err.message);
} finally {
  cerrarArchivo(archivo);
}</code></pre><h3 id="try-catch-anidado-"><code>try...catch</code> anidado:</h3><p>También puedes:</p><ul><li>Anidar una declaración <code>try-catch</code> dentro de un bloque <code>try</code>.</li></ul><p>Puedes anidar una declaración <code>try..catch</code> dentro de un bloque <code>try</code>. Por ejemplo, para lanzar un error hacia arriba:</p><pre><code class="language-javascript">try {
  try {
    throw new Error('mi error');
  } catch (err) {
    console.error('interno', err.message);
    throw err;
  } finally {
    console.log('finally interno');
  }
} catch (err) {
  console.error('externo', err.message);
}

// Output: 
// interno mi error  
// finally interno 
// externo mi error</code></pre><hr><p>Traducido del artículo - <a href="https://www.freecodecamp.org/news/error-handling-and-try-catch-throw/"><strong>JavaScript Try Catch: Exception Handling Explained</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ function.prototype.bind y function.prototype.length en JavaScript explicado ]]>
                </title>
                <description>
                    <![CDATA[ Función bind bind es un método sobre el prototipo de todas las funciones en JavaScript. Te permite crear una nueva función a partir de una función existente, cambiar el contexto this de la nueva función y proporcionar los argumentos con los que deseas que se llame a la nueva función. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/function-prototype-bind-and-function-prototype-length-in-javascript-explained/</link>
                <guid isPermaLink="false">5ffb2e688c7cd154bb9861b1</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Fri, 05 Mar 2021 06:20:51 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1610547189313-1fbea2dcd059.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="funci-n-bind">Función bind</h2><p><code>bind</code> es un método sobre el prototipo de todas las funciones en JavaScript. Te permite crear una nueva función a partir de una función existente, cambiar el contexto <code>this</code> de la nueva función y proporcionar los argumentos con los que deseas que se llame a la nueva función. Los argumentos proporcionados para vincular (<code>bind</code>) precederán a los argumentos que se pasen a la nueva función cuando se llame.</p><h3 id="usando-bind-para-cambiar-this-en-una-funci-n"><strong>Usando <code>bind</code> para cambiar <code>this</code> en una función</strong></h3><p>El primer argumento proporcionado para vincular (<code>bind</code>) es el contexto <code>this</code> al que estará vinculada la función. Si no deseas cambiar el valor de <code>this</code> pasa <code>null</code> como primer argumento.</p><p>Tienes la tarea de escribir código para actualizar el número de asistencia a medida que llegan a una conferencia. Creas una página web simple que tiene un botón que, cuando se hace clic, incrementa la propiedad <code>numDeAsistentes</code> en el objeto de conferencia. Utilizas jQuery para agregar un controlador de clic a tu botón, pero después de hacer clic en el botón, el objeto de la conferencia no ha cambiado. Tu código podría verse así.</p><pre><code class="language-javascript">var nodevember = {
  numDeAsistentes: 0,
  incrementoNumDeAsistentes: function() {
    this.numDeAsistentes++;
  }
  // otras propiedades
};

$('.agrega-asistente-btn').on('click', nodevember.incrementoNumDeAsistentes);</code></pre><p>Esto es un problema común cuando se trabaja con jQuery y JavaScript. Cuando hace clic en el botón la palabra clave <code>this</code> en el método que pasó al método <code>on</code> de jQuery hace referencia al botón y no al objeto de la conferencia. Puedes vincular el contexto <code>this</code> de tu método para resolver el problema.</p><pre><code class="language-javascript">var nodevember = {
  numDeAsistentes: 0,
  incrementoNumDeAsistentes: function() {
    this.numDeAsistentes++;
  }
  // otras propiedades
};

$('.agrega-asistente-btn').on('click', nodevember.incrementoNumDeInvitados.bind(nodevember));</code></pre><p>Ahora, cuando se hace clic en el botón, la palabra clave <code>this</code> hace referencia al objeto <code>nodevember</code>.</p><h3 id="proporcionar-argumentos-a-una-funci-n-con-bind"><strong>Proporcionar argumentos a una función con <code>bind</code></strong></h3><p>Cada argumento que se pase para vincular <code>bind</code> después del primero precederá a cualquier argumento que se pase cuando se llame a la función. Esto te permite aplicar previamente argumentos a una función. En el siguiente ejemplo, <code>combinaCadenas</code> toma dos cadenas de texto y las concatena. <code>bind</code> se usa para crear una función que siempre proporciona "Cool" como la primera cadena de texto.</p><pre><code class="language-javascript">function combinaCadenas(str1, str2) {
  return str1 + " " + str2
}

var makeCool = combinaCadenas.bind(null, "Cool");

makeCool("trick"); // "Cool trick"</code></pre><p>La guía de <a href="https://www.freecodecamp.org/espanol/news/la-guia-completa-sobre-this-en-javascript/">esta referencia</a> tiene más información sobre cómo pueden cambiar las referencias de la palabra clave <code>this</code> .</p><p>Se pueden encontrar más detalles sobre el método de vinculación <code>bind</code> en los documentos <a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Function/bind">MDN de Mozilla</a>.</p><h2 id="funci-n-length"><strong>Función length</strong></h2><p>La propiedad <code>length</code> en el objeto de función contiene el número de argumentos que espera la función cuando se llama.</p><pre><code class="language-javascript">function noArgs() { }

function oneArg(a) { }

console.log(noArgs.length); // 0

console.log(oneArg.length); // 1</code></pre><h3 id="sintaxis-de-es2015"><strong>Sintaxis de ES2015</strong></h3><p>ES2015, o ES6 como se le llama comúnmente, introdujo el operador rest y los parámetros de función predeterminados. Ambas adiciones cambian la forma en que funciona la propiedad de longitud (<code>length</code>) .</p><p>Si se utiliza el operador rest o &nbsp;los parámetros predeterminados en una declaración de función, la propiedad de <code>length</code> solo incluirá el número de argumentos antes de un operador rest o un parámetro predeterminado.</p><pre><code class="language-javascript">function conRest(...args) { }

function conArgsYRest(a, b, ...args) { }

function conPredeterminados(a, b = 'Soy el predeterminado') { }

console.log(conRest.length); // 0

console.log(conArgsYRest.length); // 2

console.log(conPredeterminados.length); // 1</code></pre><p>Puedes encontrar más información sobre <code>Function.length</code> en <a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Function/length">MDN Docs de Mozilla</a>.</p><p>Traducido del artículo - <strong><a href="https://www.freecodecamp.org/news/function-prototype-bind-and-function-prototype-length-in-javascript-explained/">function.prototype.bind and function.prototype.length in JavaScript Explained</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ La palabra clave `this` + 5 reglas de vinculación de teclas (key binding) explicadas para principiantes de JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ La palabra clave this de JavaScript es uno de los aspectos más difíciles de comprender del lenguaje. Pero es de vital importancia para escribir código JavaScript más avanzado. En JavaScript, la palabra clave this nos permite:  * Reutilizar funciones en diferentes contextos de ejecución. Es decir, una   ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/la-palabra-clave-this-5-reglas-de-vinculacion-de-teclas-explicadas-para-principiantes-de-javascript/</link>
                <guid isPermaLink="false">5ff2d2738c7cd154bb984013</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Tue, 02 Mar 2021 06:57:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/01/this_cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>La palabra clave <code>this</code> de JavaScript es uno de los aspectos más difíciles de comprender del lenguaje. Pero es de vital importancia para escribir código JavaScript más avanzado.</p><p>En JavaScript, la palabra clave <code>this</code> nos permite:</p><ul><li>Reutilizar funciones en diferentes contextos de ejecución. Es decir, una función una vez definida se puede invocar para diferentes objetos usando la palabra clave <code>this</code>.</li><li>Identificar el objeto en el contexto de ejecución actual cuando invocamos un método.</li></ul><p>La palabra clave <code>this</code> estrechamente asociada con las funciones de JavaScript. Cuando se trata de <code>this</code>, lo fundamental es entender dónde se invoca una función. Porque no sabemos qué hay en la palabra clave <code>this</code> hasta que se invoca la función.</p><p>El uso de <code>this</code> se puede clasificar en cinco aspectos vinculantes (<code>binding</code> ) diferentes. En este artículo, aprenderemos sobre los cinco aspectos con ejemplos.</p><h1 id="primero-qu-es-la-vinculaci-n-binding-"><strong>Primero, ¿Qué es la vinculación (binding)? </strong></h1><p>En JavaScript, un <code>Entorno Léxico</code> &nbsp;(Lexical Environment) es donde se escribe físicamente tu código. En el siguiente ejemplo, el nombre de la variable está <code>léxicamente</code> dentro de la función <code>decirNombre()</code>.</p><pre><code class="language-js">function decirNombre() {
  let nombre = 'algunNombre';
  console.log('El nombre es, ', nombre);
 }</code></pre><p>Un <code>Contexto de Ejecución</code> (Execution Context) se refiere al código que se está ejecutando actualmente y todo lo demás que ayuda a ejecutarlo. Puede haber muchos entornos léxicos disponibles, pero el contexto de ejecución que se está ejecutando <em>actualmente</em> es manejado por el Contexto de Ejecución.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/10/lexical.gif" class="kg-image" alt="lexical" width="600" height="400" loading="lazy"><figcaption><em>Entorno Léxico vs Contexto de Ejecución</em></figcaption></figure><p>Cada uno de los contextos de ejecución contiene un <code>Registro de Entorno</code> (Environment Record). A medida que el motor JavaScript ejecuta el código, las variables y los nombres de las funciones se agregan al registro de entorno.</p><p>Este fenómeno se conoce como vinculación en JavaScript. &nbsp;La vinculación ayuda a asociar los identificadores (variables, nombres de funciones) con la palabra clave <code>this</code> para un contexto de ejecución.</p><p>No se preocupe si encuentra esto un poco difícil de entender ahora. Obtendrá una mejor comprensión a medida que avancemos.</p><h1 id="regla-1-c-mo-funciona-la-vinculaci-n-impl-cita-de-javascript">Regla #1: Cómo funciona la vinculación implícita de JavaScript</h1><p>La vinculación implícita cubre la mayoría de los casos de uso para tratar con la palabra clave <code>this</code>.</p><p>En la vinculación implícita, debe verificar lo que está a la <em>izquierda del operador de punto (.) adyacente a una función</em> en el momento de la invocación. Esto determina a saber donde la palabra clave <code>this</code> está vinculada.</p><p>Veamos un ejemplo para entenderlo mejor.</p><pre><code class="language-js">let usuario = {
    nombre: 'Tapas',
    direccion: 'freecodecamp',
    getName: function() {
        console.log(this.nombre);
    }
};

usuario.getName();</code></pre><p>Aquí, <code>this</code> está vinculado al objeto usuario. Sabemos esto porque a la izquierda del operador punto(.) adyacente a la función <code>getName()</code>, vemos el objeto <code>usuario</code> . Entonces <code>this.name</code> va a registrar <em>Tapas</em> en la consola.</p><p>Veamos otro ejemplo para comprender mejor este concepto:</p><pre><code class="language-js">function decorateLogName(obj) {
      obj.logName = function() {
          console.log(this.nombre);
      }
  };

  let tom = {
      nombre: 'Tom',
      edad: 7
  };

  let jerry = {
      nombre: 'jerry',
      edad: 3
  };

  decorateLogName(tom);
  decorateLogName(jerry);

  tom.logName();
  jerry.logName();</code></pre><p>En este ejemplo, tenemos dos objetos, <code>tom</code> y <code>jerry</code> . Hemos decorado (mejorado) estos objetos adjuntando un método llamado <code>logName()</code>.</p><p>Observa que cuando invocamos <code>tom.logName()</code>, el objeto <code>tom</code> esta a la izquierda del operador punto(.) adyacente a la función <code>logName()</code>. Entonces <code>this</code> está vinculado al objeto <code>tom</code> y registra el valor de <em>tom</em> ( <code>this.nombre</code> es igual a tom aquí). Lo mismo se aplica cuando se invoca <code>jerry.logName()</code>.</p><h1 id="regla-2-c-mo-funciona-la-vinculaci-n-expl-cita-de-javascript-explicit-binding-">Regla #2: Cómo funciona la vinculación explícita de JavaScript (explicit binding)</h1><p>Hemos visto que JavaScript crea un entorno para ejecutar el código que escribimos. Se encarga de la creación de memoria para variables, funciones, objetos, etc. <em>en la fase de creación</em>. Finalmente ejecuta el código en la <em>fase de ejecución</em>. Este entorno especial se denomina <code>Contexto de ejecución</code> (execution context).</p><p>Puede haber muchos entornos de este tipo (contextos de ejecución) en una aplicación JavaScript. Cada contexto de ejecución opera independientemente de los demás.</p><p>Pero a veces, es posible que deseemos usar cosas de un contexto de ejecución en otro. Ahí es donde entra en juego la vinculación explícita.</p><p>En la vinculación explícita, podemos llamar a una función con un objeto cuando la función está fuera del contexto de ejecución del objeto.</p><p>Hay tres métodos muy especiales, <code>call()</code>, <code>apply()</code> y <code>bind()</code> que nos ayudan a lograr una vinculación explícita.</p><h2 id="como-funciona-el-m-todo-call-de-javascript">Como funciona el método <code>call()</code> de JavaScript</h2><p>Con el método <code>call()</code> , el contexto con el que se debe llamar a la función se pasará como parámetro <code>call()</code>. Veamos cómo funciona con un ejemplo:</p><pre><code class="language-js">let getName = function() {
     console.log(this.nombre);
 }
 
let usuario = {
   nombre: 'Tapas',
   direccion: 'freecodecamp'  
 };

getName.call(usuario);</code></pre><p>Aquí, el método <code>call()</code> se invoca en una función llamada <code>getName()</code>. La función <code>getName()</code> simplemente registra <code>this.nombre</code>. ¿Pero qué es <code>this</code> aquí? Eso se determina por lo que se ha pasado al método <code>call()</code>.</p><p>Aquí, <code>this</code> se vinculará al objeto de usuario porque hemos pasado el usuario como parámetro al método <code>call()</code>. Entonces <code>this.nombre</code> debe registrar el valor de la propiedad de nombre del objeto de usuario, es decir, <em><em>Tapas</em></em>.</p><p>En el ejemplo anterior, hemos pasado solo un argumento para <code>call()</code>. Pero también podemos pasar múltiples argumentos a <code>call()</code>, así:</p><pre><code class="language-js">let getName = function(pasatiempo1, pasatiempo2) {
     console.log(this.nombre + ' le gusta ' + pasatiempo1 + ' , ' + pasatiempo2);
 }

let usuario = {
   nombre: 'Tapas',
   direccion: 'Bangalore'  
 };

let pasatiempos = ['Nadar', 'Escribir'];
 
getName.call(usuario, pasatiempos[0], pasatiempos[1]);</code></pre><p>Aquí hemos pasado varios argumentos al método <code>call()</code>. El primer argumento debe ser el contexto del objeto con el que se debe invocar la función. Otros parámetros podrían ser simplemente valores para usar.</p><p>Aquí estoy pasando <em>Nadar</em> y <em>Escribir</em> como dos parámetros para la función <code>getName()</code>.</p><p>¿Notaste un punto crítico aquí? En el caso de una <code>call()</code>, los argumentos deben pasarse uno por uno, lo cual no es una forma inteligente de hacer las cosas. Ahí es donde nuestro método siguiente, <code>apply()</code>, entra en escena.</p><h2 id="c-mo-funciona-el-m-todo-apply-de-javascript">Cómo funciona el método <code>apply()</code> de JavaScript</h2><p>Esta forma frenética de pasar argumentos al método <code>call()</code> puede resolverse con otro método alternativo llamado <code>apply()</code>. Es exactamente lo mismo que &nbsp;<code>call()</code> pero le permite pasar los argumentos de manera más conveniente. Echar un vistazo:</p><pre><code class="language-js">let getName = function(pasatiempo1, pasatiempo2) {
     console.log(this.name + ' le gusta ' + pasatiempo1 + ' , ' + pasatiempo2);
 }
 
let usuario = {
   nombre: 'Tapas',
   direccion: 'Bangalore'  
 };

let pasatiempos = ['Nadar', 'Escribir'];
 
getName.apply(usuario, pasatiempos);</code></pre><p>Aquí podemos pasar una serie de argumentos, lo que es mucho más conveniente que pasarlos uno por uno.</p><p>Consejo: cuando solo tenga un argumento de valor o ningún argumento de valor para pasar, use <code>call()</code>. Cuando tenga varios argumentos de valor para pasar, use <code>apply()</code>.</p><h2 id="c-mo-funciona-el-m-todo-bind-de-javascript">Cómo funciona el método <code>bind()</code> de JavaScript</h2><p>El método <code>bind()</code> es similar al método <code>call()</code> pero con una diferencia. A diferencia del método <code>call()</code> de llamar a la función directamente, <code>bind()</code> devuelve una función nueva y podemos invocarla en su lugar.</p><pre><code class="language-js">let getName = function(pasatiempo1, pasatiempo2) {
     console.log(this.name + ' le gusta ' + pasatiempo1 + ' , ' + pasatiempo2);
 }

let usuario = {
   nombre: 'Tapas',
   direccion: 'Bangalore'  
 };

let pasatiempos = ['Nadar', 'Escribir'];
let nuevaFn = getName.bind(usuario, pasatiempos[0], pasatiempos[1]); 

nuevaFn();</code></pre><p>Aquí, <code>getName.bind()</code> no invoca la función <code>getName()</code><em><em> </em></em>directamente. Devuelve una nueva función, <code>newFn</code> y podemos invocarla como <code>newFn()</code>.</p><h1 id="regla-3-la-vinculaci-n-new-de-javascript">Regla #3: La vinculación <code>new</code> de JavaScript</h1><p>La palabra clave <code>new</code> se utiliza para crear un objeto a partir de la función constructora.</p><pre><code class="language-js">let Caricatura = function(nombre, personaje) {
     this.nombre = nombre;
     this.personaje = personaje;
     this.log = function() {
         console.log(this.nombre +  ' is a ' + this.personaje);
     }
 };</code></pre><p>Puede crear objetos usando la palabra clave <code>new</code> como esta:</p><pre><code class="language-js"> let tom = new Caricatura('Tom', 'Gato');
 let jerry = new Caricatura('Jerry', 'Raton');</code></pre><p>Cuando se invoca una función con la palabra clave <code>new</code> , JavaScript un objeto interno <code>this</code> (como, this = {}) dentro de la función. El recién creado &nbsp;<code>this</code> se una al objeto que se está creando utilizando la palabra clave <code>new</code> .</p><p>¿Suena complejo? Ok, analicémoslo. Toma esta línea,</p><pre><code class="language-js">let tom = new Caricatura('Tom', 'Gato');</code></pre><p>Aquí se invoca la función Caricatura con la palabra clave <code>new</code> . Entonces, el <code>this</code> creado internamente estará vinculado al nuevo objeto que se está creando aquí, el cual es <em>tom.</em> </p><h1 id="regla-4-vinculaci-n-de-objetos-globales-de-javascript">Regla #4: Vinculación de Objetos Globales de JavaScript</h1><p>¿Cuál crees que será el resultado del siguiente código? ¿A qué se vincula <code>this</code> aquí?</p><pre><code class="language-js">let sayName = function(nombre) {
    console.log(this.nombre);
};

window.nombre = 'Tapas';
sayName();</code></pre><p>Si la palabra clave <code>this</code> no se resuelve con ninguno de las vinculaciones, <code>implicit</code> (implícito), <code>explicit</code> (explícito) o <code>new</code>, la palabra clave <code>this</code> se enlaza con el objeto <code>window(global)</code> .</p><p>Sin embargo, hay une excepción. El <em>modo estricto</em> (<strong>strict mode</strong>) de JavaScript no permite esta vinculación predeterminada.</p><pre><code class="language-js">"use strict";
function myFunction() {
  return this;
}</code></pre><p>En el caso anterior, la palabra clave <code>this</code> no está definida (<code>undefined.</code>)</p><h1 id="regla-5-vinculaci-n-de-elemento-de-evento-html-en-javascript-event-element-">Regla #5: Vinculación de elemento de evento HTML en JavaScript (event element)</h1><p>En los controladores de eventos de HTML, la palabra clave <code>this</code> se vincula a los elementos HTML que reciben el evento. </p><pre><code class="language-html">&lt;button onclick="console.log(this)"&gt;¡Haz clic aquí!&lt;/button&gt;</code></pre><p>El es el registro de salida (output log) en la consola cuando hace clic en el botón: </p><pre><code class="language-html">"&lt;button onclick='console.log(this)'&gt;¡Haz clic aquí!&lt;/button&gt;"</code></pre><p>Puedes cambiar el estilo del botón usando la palabra clave <code>this</code> , así:</p><pre><code class="language-html">&lt;button onclick="this.style.color='teal'"&gt;¡Haz clic aquí!&lt;/button&gt;</code></pre><p>Pero tenga cuidado cuando llame a una función en el botón clic y use la palabra clave <code>this</code> dentro de esa función.</p><pre><code class="language-html">&lt;button onclick="cambiarColor()"&gt;¡Haz clic aquí!&lt;/button&gt;</code></pre><p>y en JavaScript:</p><pre><code class="language-js">function cambiarColor() {
  this.style.color='teal';
}</code></pre><p>El código anterior no funcionará como se esperaba. Como hemos visto en la Regla 4, aquí esto estará ligado al objeto global (en el modo 'no estricto') donde no hay un objeto de estilo para establecer el color.</p><h1 id="en-resumen">En Resumen</h1><p>Para resumir,</p><ul><li>En el caso de la vinculación implícita, la palabra clave <code>this</code> se vincula a la izquierda del operador punto (.).</li><li>En el caso de una vinculación explícita, podemos llamar a una función con un objeto cuando la función está fuera del contexto de ejecución del objeto. Los métodos <code>call()</code>, <code>apply()</code>, and <code>bind()</code> juegan un papel importante aquí.</li><li>Cuando se invoca una función con la palabra clave <code>new</code>, la palabra clave <code>this</code> dentro de la función se une al nuevo objeto que se está construyendo.</li><li>Cuando la palabra clave <code>this</code> no se resuelve con ninguno de las vinculaciones, <code>implicit</code>(implícito), <code>explicit</code>(explícito) o <code>new</code>, se enlaza con el objeto <code>window(global)</code>. En el modo estricto (strict mode) de JavaScript, la palabra clave <code>this</code> no estará definida (undefined).</li><li>En los controladores de eventos HTML, la palabra clave <code>this</code> se vincula a los elementos HTML que reciben el evento.</li></ul><p>Hay un caso más en el que la palabra clave <code>this</code> se comporta de manera diferente, como con las <code>funciones de flecha de ES6</code> (ES6 arrow functions). Veremos eso en un artículo futuro.</p><p>Espero que este artículo le haya resultado útil. </p><p>Si este artículo fue útil, compártelo para que otros también puedan leerlo. Puedes @ me on Twitter (@tapasadhikary) con comentarios, o no dudes en seguirme.</p><p>Traducido del artículo de <strong><a href="https://www.freecodecamp.org/news/author/tapas/">Tapas Adhikary</a></strong> - <a href="https://www.freecodecamp.org/news/javascript-this-keyword-binding-rules/"><strong>The JavaScript `this` Keyword + 5 Key Binding Rules Explained for JS Beginners</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Explicación del Método JavaScript Math.random() ]]>
                </title>
                <description>
                    <![CDATA[ Método Aleatorio El método JavaScript Math.random() es un excelente método integrado para producir números aleatorios. Cuando se ejecuta Math.random(), devuelve un número aleatorio que puede estar entre 0 y 1. Se incluye el 0 y se excluye el 1. Generando un número de punto flotante aleatorio entre 0 y 1 ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/metodo-javascript-math-random-explicado/</link>
                <guid isPermaLink="false">5fe8e9c78c7cd154bb980219</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Sat, 30 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/01/photo-1505678261036-a3fcc5e884ee-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="m-todo-aleatorio"><strong>Método Aleatorio</strong></h2><p>El método JavaScript <code>Math.random()</code> es un excelente método integrado para producir números aleatorios. Cuando se ejecuta <code>Math.random()</code>, devuelve un número aleatorio que puede estar entre 0 y 1. Se incluye el 0 y se excluye el 1.</p><h2 id="generando-un-n-mero-de-punto-flotante-aleatorio-entre-0-y-1">Generando un número de punto flotante aleatorio entre 0 y 1 </h2><p>El método <code>Math.random()</code> devolverá un número de coma flotante mayor o igual que 0 y menor que (pero nunca igual a) 1. En otras palabras, <code>0 &lt;= x &lt; 1</code>. Por ejemplo:</p><pre><code class="language-javascript">console.log(Math.random());
// 0.7069207248635578

console.log(Math.random());
// 0.765046694794209

console.log(Math.random());
// 0.14069121642698246</code></pre><p>(Por supuesto, los números devueltos serán diferentes cada vez. Esto se asumirá para todos los ejemplos siguientes; se producirán resultados diferentes en cada pasada).</p><p>Para obtener un número aleatorio entre un rango mayor, multiplique el resultado de <code>Math.random()</code> por un número.</p><h2 id="generando-un-n-mero-de-punto-flotante-aleatorio-entre-0-y-un-m-ximo-especificado">Generando un número de punto flotante aleatorio entre 0 y un máximo especificado</h2><p>Por lo general, no necesita números aleatorios entre 0 y 1; necesita números más grandes o incluso enteros.</p><p>Por ejemplo, si desea un número de punto flotante aleatorio entre 0 y 10, puede usar:</p><pre><code class="language-javascript">var x = Math.random()*10;

console.log(x);
// 4.133793901445541</code></pre><h2 id="generando-un-n-mero-de-punto-flotante-aleatorio-dentro-de-un-rango">Generando un número de punto flotante aleatorio dentro de un rango</h2><p>Si necesita un número de punto flotante aleatorio que se encuentre entre dos números específicos, puede hacer algo como esto:</p><pre><code class="language-javascript">var min = 83.1;
var max = 193.36;

var x = Math.random()*(max - min)+min;

console.log(x);
// 126.94014012699063</code></pre><h2 id="generando-un-n-mero-entero-aleatorio-entre-0-y-un-m-ximo">Generando un número entero aleatorio entre 0 y un máximo</h2><p>A menudo necesitas números enteros. Para hacer esto, tendrá que usar algunos otros métodos del objeto <code>Math</code>, <code>Math.floor()</code> (redondea hacia abajo al entero más cercano) y <code>Math.ceil()</code> (redondea hacia arriba al entero más cercano).</p><p>Por ejemplo, si necesita seleccionar aleatoriamente de una matriz de 10 elementos, necesitará un número aleatorio entre 0 y 9 inclusive (recuerde que las matrices tienen un índice cero).</p><pre><code class="language-javascript">var x = Math.floor(Math.random()*10);

console.log(x);
// 7</code></pre><p>(Recuerda que <code>Math.random()</code> nunca devolverá exactamente 1, por lo que <code>Math.random()*10</code> nunca devolverá exactamente 10. Esto significa que después de redondear hacia abajo, el resultado siempre será 9 o menos).</p><h2 id="generando-un-n-mero-entero-aleatorio-entre-1-y-un-m-ximo">Generando un número entero aleatorio entre 1 y un máximo</h2><p>Si necesita un número aleatorio con el número mínimo de 1 (por ejemplo, eligiendo un día al azar en enero), puede utilizar el método <code>Math.ceil()</code>.</p><pre><code class="language-javascript">var x = Math.ceil(Math.random()*31);

console.log(x);
// 23</code></pre><p>Otra forma habría sido usar la función anterior (usando <code>Math.floor()</code>) y agregarle 1:</p><pre><code class="language-javascript">var x = Math.floor(Math.random()*31)+1;

console.log(x);
// 17</code></pre><h2 id="generando-un-n-mero-entero-aleatorio-dentro-de-un-rango">Generando un número entero aleatorio dentro de un rango</h2><p>Por último, ocasionalmente necesitas un número entero aleatorio entre dos números enteros específicos. Por ejemplo, si está tratando de elegir boletos de rifa y conoce los números del número más bajo y más grande:</p><pre><code class="language-javascript">var min = 1718;
var max = 3429;

var x = Math.floor(Math.random()*(max-min+1)+min);

console.log(x);
//2509</code></pre><h2 id="-qu-tan-aleatorio-es-math-random-">¿Qué tan aleatorio es Math.random ()?</h2><p>Cabe señalar que el número devuelto por <code>Math.random()</code> es un número pseudoaleatorio, ya que ninguna computadora puede generar un número verdaderamente aleatorio, que exhibe aleatoriedad en todas las escalas y en todos los tamaños de conjuntos de datos. Sin embargo, el número pseudoaleatorio generado por <code>Math.random()</code> suele ser suficiente para las necesidades de casi cualquier programa que pueda escribir. La no-verdaderamente-aleatoriedad solo se hace evidente en conjuntos de números astronómicamente grandes o cuando se necesitan decimales excepcionalmente precisos.</p><p>Traducido del artículo - <a href="https://www.freecodecamp.org/news/javascript-math-random-method-explained/"><strong>JavaScript Math.random() Method Explained</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo elegir el mejor editor de JavaScript para desarrollo web ]]>
                </title>
                <description>
                    <![CDATA[ Hay una serie de opciones para los desarrolladores que buscan un buen editor de JavaScript que proporcione un entorno de trabajo más eficiente y agradable. Los principales editores de código JavaScript comparten muchas de las mismas características principales que podría esperar, incluido el autocompletado (completado del código), la integración de ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-elegir-el-mejor-editor-de-javascript/</link>
                <guid isPermaLink="false">5fe07e128c7cd154bb97be9d</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Wed, 13 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1517694712202-14dd9538aa97.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Hay una serie de opciones para los desarrolladores que buscan un buen editor de JavaScript que proporcione un entorno de trabajo más eficiente y agradable.</p><p>Los principales editores de código JavaScript comparten muchas de las mismas características principales que podría esperar, incluido el autocompletado (completado del código), la integración de git y la compatibilidad con complementos (plug-in). Pero son las pequeñas cosas las que pueden hacer que un editor se adapte mejor que otro a un desarrollador determinado.</p><p>Una vez que se sienta cómodo con un editor de código y familiarizado con el flujo de trabajo que lo hace más eficiente, puede ser difícil cambiar de editor, ya que tendrá que volver a aprender los atajos para optimizar sus procesos de desarrollo.</p><p>Incluso si se vuelve más eficiente a largo plazo, todavía existe una gran barrera de entrada al cambiar, por lo que vale la pena invertir un poco de tiempo por adelantado para elegir el mejor editor para sus necesidades.</p><p>Repasemos ahora algunas de las opciones de editor más populares.</p><h2 id="visual-studio-code"><a href="https://code.visualstudio.com/">Visual Studio Code</a></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-38.png" class="kg-image" alt="image-38" width="600" height="400" loading="lazy"></figure><p>VSCode de Microsoft es gratuito, de código abierto y bastante ligero tras la instalación. Este es el editor de facto para desarrolladores principiantes de JavaScript, en parte porque está precargado con un buen conjunto de funcionalidades que no requieren complementos adicionales. VSCode también es popular y puede ser ideal para usuarios más avanzados que necesitan comenzar rápidamente.</p><p>Una característica única de VSCode es que se puede utilizar a través del navegador. Por lo tanto, el mismo entorno exacto que obtiene en el escritorio es posible mientras viaja con su tableta. Se debe configurar un <a href="https://github.com/cdr/code-server">servidor de códigos</a> en una red a la que pueda acceder para que esta característica funcione, pero es muy conveniente una vez que está configurada.</p><p><strong>Consejo:</strong> Cuando estoy trabajando en un proyecto grande en otro IDE (entorno de desarrollo integrado) donde el proceso de compilación puede llevar algún tiempo, a menudo abro el enorme archivo de salida (output) JS en VSCode y lo ajusto para probar instantáneamente un cambio en el navegador antes de aplicarlo. VSCode maneja estos archivos grandes a la perfección. </p><p>Git está integrado en el IDE, pero la integración no es tan sólida como la de otros editores. Por ejemplo, los usuarios de WebStorm prefieren la experiencia de push / merge a la de VSCode. </p><p>Puede instalar muchas funciones adicionales que pueda necesitar como extensiones, de las cuales hay miles. Pero no todas son características reales. Los fragmentos de código se mezclan con las funciones y complementos, lo que puede llevar tiempo revisar y encontrar las mejores opciones para agregar. Si alguna vez se encuentra con un problema, VSCode tiene una gran comunidad de usuarios; es probable que alguien haya tenido el mismo problema y lo haya resuelto.</p><p>Si no está listo para un IDE de pago completo con todas las comodidades y no está lo suficientemente familiarizado con todos los complementos y funciones que pueda necesitar, VSCode es el punto de partida lógico.</p><h2 id="atom"><a href="https://atom.io/">Atom</a></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/11/image-36.png" class="kg-image" alt="image-36" width="600" height="400" loading="lazy"></figure><p>El editor Atom gratuito fue desarrollado por GitHub. En realidad, es una versión especializada del navegador Chrome convertida en un editor de texto y código fuente. Internamente, utiliza Node.js para compatibilidad con complementos.</p><p>Hay una gran cantidad de complementos disponibles para cualquier característica que desee, sin embargo, no es tan fuerte de fábrica. Debe recopilar una serie de complementos para construir el entorno de desarrollo donde pueda ser lo más efectivo posible. Si está trabajando con JavaScript, aquí hay algunos complementos esenciales de Atom para comenzar:</p><ul><li>atom-typescript</li><li>file-icons - para colorear y asignar iconos a diferentes tipos de archivos</li><li>atom-beautify</li><li>linter</li></ul><p><strong>Consejo:</strong> habilite el paquete de autoguardado que guardará las ediciones cuando pierda la concentración. Está deshabilitado por defecto.</p><p>Varios usuarios pueden trabajar en el mismo archivo al mismo tiempo, cada uno con varios cursores en la pantalla, a través del complemento de teletipo. Puede usar esto para asesorar, codificar en parejas o colaborar. Esta característica distingue a Atom de otros editores.</p><p>La integración de git está bien implementada, como ha de esperarse del software GitHub. También es útil un complemento git-plus que le permite ejecutar comandos git a través de atajos de teclado sin usar la terminal git.</p><p>Atom se puede personalizar hasta el punto en que puede editar un archivo .less para ajustar los colores IDE, lo cual es bueno si desea modificar cada detalle de su entorno. Puede ejecutar un script .coffe al inicio que se puede utilizar para cambiar rápidamente el comportamiento del editor.</p><p>Puede escribir complementos en JavaScript contra una API de editor bien documentada. Es bueno tener la posibilidad de crear sus propias funciones y comportamientos, en caso de que surja la necesidad.</p><p>La experiencia de edición es fluida y puede mejorarla con otros complementos como minimap, pero se requiere una inversión de tiempo inicial para configurarlo con todas las funciones que desea. El beneficio es que las funciones que no necesita no tardarán en cargarse, lo que ralentiza la experiencia. Sin embargo, puede experimentar cierta lentitud momentánea al cargar archivos grandes o cambiar de pestaña.</p><p>Inicialmente me gustó la idea de editar estilos CSS para personalizar el entorno IDE, o al menos tener la posibilidad si alguna vez quería crear mis propios temas. Suena divertido, pero en la práctica, crear temas que incluyan muchas variables no son proyectos triviales. Afortunadamente, hay muchos complementos de temas pulidos disponibles para descargar. </p><p>Atom es un editor sólido y encajará perfectamente con muchos desarrolladores.</p><h2 id="sublime-text"><a href="https://www.sublimetext.com/">Sublime Text</a></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-34.png" class="kg-image" alt="image-34" width="600" height="400" loading="lazy"></figure><p>Sublime Text es un editor de pago, pero hay una prueba gratuita disponible. No está pre-cargado con muchos complementos (plugins) para comenzar, pero, por supuesto, están disponibles para satisfacer cualquier necesidad que pueda tener. Algunos paquetes como SideBarEnhancements para cambiar el nombre, mover, copiar y pegar probablemente deberían estar integrados en el paquete principal, pero puede descargarlos para habilitar esta funcionalidad.</p><p>Al igual que en Atom, puede llevar un poco de tiempo configurar todo. Pero una vez en funcionamiento, la experiencia es muy fluida. Autoguardado (save on lost focus) también está disponible. </p><p>Sublime Text es bueno porque es liviano, lo que lo hace muy rápido para cargar y trabajar con proyectos o archivos grandes. La implementación de la función "goto anything" (ir a cualquier cosa) se destaca, ya que se puede utilizar con nombres de archivo, símbolos y números de línea. La mayoría de los IDE proporcionan características similares de una forma u otra, pero poder combinarlas y buscar con consultas como "fileName@functionName" es bastante agradable.</p><p>La selección de una variable selecciona todas las apariciones de esa variable y el cambio de nombre cambia el nombre de todas las apariciones automáticamente, por lo que esta tarea común se convierte en una experiencia muy simplificada.</p><p>En muchos sentidos, Sublime Text es muy similar a Atom. Pero Sublime Text tiene la ventaja de un mejor rendimiento general y capacidad de respuesta, lo cual es excelente.</p><h2 id="vim"><a href="https://www.vim.org/">VIM</a></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-39.png" class="kg-image" alt="image-39" width="600" height="400" loading="lazy"></figure><p>Vim también es un editor de texto gratuito y muy configurable. Originalmente llamado vi y el primer editor de texto desarrollado para Unix, luego se extendió a un editor más rico en funciones llamado Vim. Está disponible en la mayoría de las distribuciones de Linux.</p><p>Vim tiene capacidades sólidas de búsqueda y resaltado de sintaxis, y es superliviano, por lo que puede funcionar bien incluso con archivos muy grandes. Pero requiere algo de trabajo para configurarlo y dejarlo listo para usar.</p><p>Hay una GUI disponible, pero no es la interfaz predeterminada para Vim. Incluso habilitar la compatibilidad con el mouse requiere alguna acción para que funcione. El predeterminado es un modo de teclado en el que algunos pueden preferir acceder a todos los controles y funciones a través de atajos.</p><p>Dicho esto, Vim puede ser su IDE perfecto si dedica algún tiempo a aprender los entresijos del software, configura todos los comportamientos y características que desea en él. Si tiene poco tiempo y no puede hacer la inversión inicial para marcar las cosas, es posible que Vim no sea la mejor opción para ti.</p><h2 id="webstorm"><a href="https://www.jetbrains.com/webstorm/">WebStorm</a></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-40.png" class="kg-image" alt="image-40" width="600" height="400" loading="lazy"></figure><p>WebStorm fue desarrollado por JetBrains y se destaca del resto como un verdadero IDE de JavaScript, ya que tiene todas las funciones integradas desde el primer momento. El entorno de desarrollo para diferentes plataformas como React, Angular, Vue.js, etc. es perfecto. Puede depurar scripts de nodos y ejecutar pruebas en un servidor integrado. También puede ejecutar y depurar scripts npm a través de una interfaz de vista de árbol. Y no requiere ningún complemento para hacer esto.</p><p>Sin embargo, los complementos (plugins) están disponibles para algunas funciones poco comunes que no están integradas directamente en el software. Un complemento (plugin) que no se incluyó de forma predeterminada fue una ventana de vista previa / edición (edit/preview window). Pero en su mayor parte, todo lo que pueda necesitar ya está ahí. Lo bueno de esto es que descubrirás características que no sabías que existían y lo bueno que es tenerlas.</p><p>Los archivos se guardan automáticamente a medida que trabaja en ellos de forma predeterminada. Cuando usa otra aplicación que no hace esto, el guardado manual se siente muy primitivo en comparación. Aunque no es exclusivo de WebStorm, la implementación es un poco mejor.</p><p>Es posible que algunas personas no siempre confíen en la integridad de la pila de estado de deshacer ctrl-z, pero en WebStorm hay un sistema VSC integrado que básicamente realiza una confirmación cada vez que se guarda un archivo. Esto es interno y está separado de tus git commits. Los archivos se guardan al menos cuando la ventana de contenido del archivo pierde el foco. Entonces, si pasa un tiempo sin comprometerse con git y tiene que volver o ver un estado anterior después de su última confirmación, no hay problema.</p><p><strong>Consejo:</strong> Ctrl-shift-flecha arriba / abajo le permite mover líneas o bloques de código hacia arriba o hacia abajo mientras el editor maneja las comas / corchetes de bloque automáticamente.</p><p>Cuando trabaja en proyectos que tienen muchos archivos, desplazarse por el árbol de archivos en busca de un archivo específico puede ralentizarlo. Pero si uno de esos elementos ya está abierto y enfocado, al hacer clic en el icono de destino, la vista de árbol del proyecto se desplaza hacia este archivo. Es muy conveniente.</p><p>Un par de desventajas son que no es gratis. Y, a veces, puede ser una pérdida de memoria con proyectos muy grandes. Ha mejorado a lo largo de los años y el contenido de los archivos se indexa internamente, por lo que la búsqueda de proyectos grandes es muy rápida. Una actualización reciente también incluye una mejora significativa en la velocidad de inicio.</p><h2 id="consejos-de-productividad-para-los-editores-en-general">Consejos de productividad para los editores en general</h2><p>El acceso directo de línea / selección duplicada (en WebStorm: ctrl-d, en Atom: ctrl-shift-d, pero todos pueden hacerlo) es uno de mis favoritos y puede ahorrar mucho tiempo en muchos escenarios de codificación.</p><p>Esto aparecerá de vez en cuando tenga una lista de elementos y tenga que modificar el primer (o algunos) carácter en cada línea de decir '.' to ',' pero buscar-reemplazar no es práctico de usar. WebStorm permite Alt-click para colocar varios cursores para realizar las mismas ediciones en varios lugares. Aun así, encuentro el siguiente enfoque más rápido en algunos escenarios:</p><ul><li>Coloque el cursor después del primer punto y comience a realizar el cambio manualmente.</li><li>Presione la tecla de retroceso, coma, flecha hacia abajo. Coloque un dedo en cada tecla y repita las pulsaciones comenzando lentamente y luego acelerando a medida que avanza. Una vez que obtenga el patrón, puede acelerarlo hasta donde pasará por una lista de 200 líneas en poco tiempo.</li></ul><p>Es casi como tocar una melodía en un piano (lo más rápido que puedas). También puede hacer esto con listas de numeración. Escriba la primera línea sin el número, duplique la línea 9 veces y haga el mismo proceso, excepto que haga que un dedo presione un número subsiguiente cada vez. Comience las siguientes 10 líneas con un '1' y realice el mismo proceso agregando un dígito después de cada '1'.</p><p>Si busca en Google “[nombre del editor] cheatsheet”, puede obtener un resumen rápido de los usuarios para configuraciones importantes o accesos directos para el editor que está probando. Imprímelo y lee todos los accesos directos para conocer las nuevas características y funcionalidades a las que de otro modo no estarías expuesto.</p><p>Considerando cómo subrayar acciones puede mejorar tu proceso actual, será beneficioso. Si ve uno de ellos puede ayudar, coloque una marca junto a él para que la próxima vez que se encuentre en la situación de usarlo sea fácil de recordar. Incluso si lo usa con poca frecuencia más que todo al principio, tener una referencia rápida a mano puede reducir la fricción para aprender más sobre su editor y puede ahorrar tiempo en el cambio de contexto y búsqueda en el futuro.</p><p>He ido tan lejos como para encontrar la versión PDF, imprimir y plastificar la página para referencia futura, pero para algunos, un marcador o una captura de pantalla también pueden funcionar.</p><h2 id="conclusi-n">Conclusión</h2><p>Si es un principiante que espera aprender JavaScript y utilizar un entorno de desarrollo pulido para comenzar, VSCode es la opción obvia porque es fácil de usar con muchas funciones sólidas integradas.</p><p>Para los desarrolladores más experimentados que saben exactamente lo que quieren, pueden ser preferibles Sublime y Atom, ya que le darán un control total sobre su entorno de desarrollo. Puede elegir entre miles de funciones (paquetes) para instalar y mantener el inicio de la aplicación y el uso de recursos libres de extras que no necesita o desea. Pasar algo de tiempo con cada uno de ellos le ayudará a tomar la decisión correcta.</p><p>Para los usuarios avanzados que se sienten como en casa usando solo el teclado trabajando en proyectos, puede ser más efectivo con Vim que con cualquier otro editor. Ahorrar el tiempo que le toma a su mano moverse entre el teclado y el mouse se sumará, ¡pero llevará algo de tiempo dominar este proceso!</p><p>Por último, si no le importa mantener una suscripción paga y no le preocupan las limitaciones de memoria o CPU de su máquina de desarrollo, WebStorm lo pondrá en funcionamiento rápidamente independientemente de las plataformas de desarrollo de JavaScript, transpilers o procesos de compilación con los que trabajes. Proporciona un entorno muy conveniente para trabajar.</p><p>Yo personalmente uso WebStorm como mi IDE principal, pero sigo usando VSCode regularmente para editar archivos individuales o muy grandes cuando el rendimiento es una prioridad.</p><p>Si le gustó este artículo, considere consultar <a href="https://jscharting.com/">JSCharting</a>, una biblioteca de gráficos de JavaScript para desarrolladores. También puede ver publicaciones de blog adicionales <a href="https://jscharting.com/blog/">aquí.</a></p><p>Traducido del artículo de <strong><a href="https://www.freecodecamp.org/news/author/arthur/">Arthur Puszynski</a> </strong>- <a href="https://www.freecodecamp.org/news/how-to-choose-a-javascript-code-editor/"><strong>How to Choose the Best JavaScript Editor for Web Development</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Angular vs React: Cuál Elegir Para tu Aplicación ]]>
                </title>
                <description>
                    <![CDATA[ Una comparación precisa de los aspectos generales y técnicos entre Angular y React Hay tantos artículos titulados "Angular vs React", "React vs Angular", "Angular o React" – ¡Es un milagro que hayas abierto este post! Sin embargo, lo que le falta a esos artículos, es una comparación punto por punto ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/angular-vs-react-cual-elegir-para-su-aplicacion/</link>
                <guid isPermaLink="false">5fd605418c7cd154bb975a2d</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Luis Delgado ]]>
                </dc:creator>
                <pubDate>Sun, 27 Dec 2020 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/react-vs-angular-1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <h3 id="una-comparaci-n-precisa-de-los-aspectos-generales-y-t-cnicos-entre-angular-y-react">Una comparación precisa de los aspectos generales y técnicos entre Angular y React</h3><p>Hay tantos artículos titulados "Angular vs React", "React vs Angular", "Angular o React" – ¡Es un milagro que hayas abierto este post! Sin embargo, lo que le falta a esos artículos, es una <strong>comparación punto por punto</strong> con Angular vs React.</p><blockquote>Así que esto es lo que haré en este post: colocar <a href="https://reactjs.org/">React</a> y <a href="https://angularjs.org/">Angular</a> en yuxtaposición directa. Vamos a revisar y contrastar estos dos frameworks<strong> </strong>de JavaScript y observar cada posible característica para asegurarnos de que no nos perdemos ni un solo dato.</blockquote><p>Al final, no voy a decirte qué tecnología elegir. Pero te daré la suficiente información para reflexionar y que así elijas la tecnología que mejor se adapte a ti y a tu proyecto.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://www.freecodecamp.org/news/content/images/2019/09/Angular_React_comparison-1.png" width="600" height="400" alt="Angular_React_comparison-1" loading="lazy"></div></div></div><figcaption>Descargar para mejor calidad de imagen</figcaption></figure><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/2PpsrJKGRiYFYhCXh9NcfM/c43b9b24509d459ec94d7f7bb6ce207a/search__1_.png?h=300" class="kg-image" alt="search (1)" width="256" height="256" loading="lazy"></figure><h2 id="1-breve-descripci-n">1. Breve descripción</h2><h3 id="react">React</h3><p>React es una librería de JavaScript para el desarrollo UI (Interfaz de usuario). Está gestionado por Facebook y una comunidad de desarrolladores de código abierto.</p><p>La librería se presentó en mayo de 2013.</p><p>Las últimas actualizaciones se lanzaron el 22 de octubre de 2020.</p><h3 id="angular">Angular</h3><p>Angular es un framework de JavaScript de código abierto para desarrollo web y móvil. Está basado en TypeScript y está gestionada por el equipo de Angular de Google y la comunidad de desarrolladores de Angular.</p><p>Lanzada en septiembre de 2016, Angular (también conocida como Angular 2.0) es una elaboración completa de Angular JS (Angular 1.0), que se presentó en 2010.</p><p>La última versión de Angular tuvo lugar el 6 de febrero de 2020.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/26X0F8SysU9aRODLpiTS8T/6d17ff52d723a3d8b34b54a4f53f6e34/internet__1_.png?h=300" class="kg-image" alt="internet (1)" width="256" height="256" loading="lazy"></figure><h2 id="2-universalidad">2. Universalidad</h2><h3 id="react-1">React</h3><p>React es una librería que se utiliza tanto en desarrollo web como móvil. Sin embargo, para el desarrollo móvil, debe incoporarse con <a href="https://cordova.apache.org/">Cordova</a>. Por otra parte, para desarrollo móvil, existe una librería adicional – <a href="https://reactnative.dev/">React Native</a>.</p><p>React se puede utilizar para crear aplicaciones web de página única (single-page) o de varias páginas (multiple-page).</p><h3 id="angular-1">Angular</h3><p>Angular es adecuado para el desarrollo web y móvil. En el desarrollo móvil, sin embargo, <a href="https://ionicframework.com/docs/angular/overview">Ionic</a> realiza una gran parte del trabajo. Además, similarmente a React, Angular tiene un framework de desarrollo móvil adicional. La contraparte de React Native es <a href="https://nativescript.org/nativescript-is-how-you-build-native-mobile-apps-with-angular/">NativeScript</a>.</p><p>Angular también se puede utilizar para aplicaciones web de página única o de varias páginas.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/7EP4F57YmLWZvF7OO0iDTX/b7ba3aacd67d576f1fcc49ba78478916/success__1_.png?h=300" class="kg-image" alt="success (1)" width="256" height="256" loading="lazy"></figure><h2 id="3-autosuficiencia">3. Autosuficiencia</h2><h3 id="react-2">React</h3><p>React es una librería para el desarrollo UI, por lo que las aplicaciones escritas con React para que puedas ser utilizadas necesitan librerías adicionales. Por ejemplo, Redux, React Router o Helmet optimizan los procesos de gestión de estado, enrutamiento e interacción con la API. Funciones como las de enlazado de datos, el enrutamiento basado en componentes, la generación de proyectos, la validación de formularios, o la inyección de dependencias requieren la instalación de módulos o librerías adicionales.</p><h3 id="angular-2">Angular</h3><p>Angular es un framework completo para el desarrollo de software, el cual generalmente no requiere de librerías adicionales. Todas las funciones mencionadas anteriormente como los enlaces de datos, el enrutamiento basado en componentes, la generación de proyectos, la validación de formularios, y la inyección de dependencias, se pueden implementar con los medios proporcionados por el paquete de Angular.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/pFVFckO96mf60jYoDLsXA/df1d17d0c516c24b906feacc66a36b2d/open-book.png?h=300" class="kg-image" alt="open-book" width="256" height="256" loading="lazy"></figure><h2 id="4-curva-de-aprendizaje">4. Curva de aprendizaje</h2><h3 id="react-3">React</h3><p>React es minimalista: sin inyección de dependencias, sin plantillas clásicas, sin funciones demasiado complicadas. La librería será bastante sencilla de entender si ya conoces bien JavaScript.</p><p>Sin embargo, se necesita bastante tiempo para aprender a configurar un proyecto porque no existe una estructura de proyecto predefinida. También necesitarás aprender a manejar la librería Redux, que se usa en más de la mitad de las aplicaciones de React para la gestión de estado. Las actualizaciones constantes de la librería también requieren de un esfuerzo adicional por parte del desarrollador. Además, hay muchas buenas prácticas en React, que necesitarás aprender para poder hacer las cosas bien.</p><h3 id="angular-3">Angular</h3><p>Angular en sí es una librería enorme, y aprender todos los conceptos asociados llevará mucho más tiempo que en el caso de React. Angular es más complejo de entender, hay mucha sintaxis innecesaria y la administración de componentes es compleja. Algunas características más complejas están integradas en el núcleo de la librería, lo que significa que el desarrollador no puede evitar aprenderlas y usarlas. Además, hay muchas formas de resolver un único problema.</p><p>Aunque TypeScript se parece mucho a JavaScript, también lleva algún tiempo aprenderlo. Dado que el framework se actualiza constantemente, el desarrollador debe realizar un esfuerzo extra de aprendizaje.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/3UoGpyTMCV8CGu1Z4kjpse/d32f947e97c9ca59b8d06ffa3cbcab5e/users__1_.png?h=300" class="kg-image" alt="users (1)" width="256" height="256" loading="lazy"></figure><h2 id="5-comunidad">5. Comunidad</h2><h3 id="react-4">React</h3><p>React es uno de las librerías de JS más populares en todo el mundo, y la comunidad que lo apoya y desarrolla es enorme.</p><p>Al trabajar con React, debes ser un aprendiz continuamente ya que la librería se actualiza a menudo. Si bien la comunidad intenta avanzar con la documentación más reciente lo más rápido posible, mantenerse al día con todos los cambios no es tan fácil. A veces, puede faltar cierta documentación, pero el problema a menudo se resuelve con el apoyo de la comunidad en foros temáticos.</p><p>React es utilizado activamente por empresas como Facebook, Twitter, Netflix, Airbnb, Paypal, The New York Times, Yahoo, Walmart, Uber y Microsoft.</p><h3 id="angular-4">Angular</h3><p>Angular es menos admirado que React y encara mucho escepticismo, en parte debido a la impopularidad de Angular 1.0. Los desarrolladores solían descartar el framework por ser demasiado complicado, ya que requería mucho tiempo para aprenderlo. Sin embargo, este framework ha sido desarrollado por Google, que trabaja a favor de la credibilidad de Angular.</p><p>Google proporciona el soporte a largo plazo del framework y lo mejora constantemente. Sin embargo, las actualizaciones son tan rápidas que la documentación a menudo de sufre retrasos.</p><p>Angular también es utilizado por empresas como McDonald's, AT&amp;T, HBO, Apple, Forbes, Adobe, Nike y Microsoft.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/42G1ot0FKIiLsLEss57U7C/afa7f06c694c2481af01923ade2c1f90/settings__1_.png?h=300" class="kg-image" alt="settings (1)" width="256" height="256" loading="lazy"></figure><h2 id="6-desempe-o">6. Desempeño</h2><h3 id="react-5">React</h3><p>El rendimiento de React ha mejorado enormemente con la introducción del DOM virtual. Dado que todos los árboles DOM virtuales son ligeros y están integrados en el servidor, se reduce la carga en el navegador. Además, dado que el proceso de enlace de datos es unidireccional, los enlaces no se asignan a los observadores (watchers) como en el caso de Angular. Respectivamente, no se crea una carga de trabajo adicional.</p><h3 id="angular-5">Angular</h3><p>Angular rinde peor, especialmente en el caso de aplicaciones web complejas y dinámicas.</p><p>El rendimiento de las aplicaciones de Angular se ve afectado negativamente por el enlace de datos bidireccional. A cada enlace se le asigna un observador para realizar el seguimiento de los cambios, y cada ciclo continúa hasta que se verifiquen todos los observadores y los valores asociados. Debido a esto, cuantas más vinculaciones tenga, más observadores se crearán y más engorroso se volverá el proceso.</p><p>Sin embargo, la actualización más reciente de Angular ha mejorado enormemente su rendimiento y ya no pierde frente a React. Además, el tamaño de una aplicación Angular es ligeramente más pequeño que el tamaño de una aplicación React.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/LCPTXwhsTKQ4YasbWaJBg/3ecbcedd4687993fcca72086a16abc0f/menu__1_.png?h=300" class="kg-image" alt="menu (1)" width="256" height="256" loading="lazy"></figure><h2 id="7-lenguaje">7. Lenguaje</h2><h3 id="react-6">React</h3><p>React se basa en JavaScript ES6 + combinado con JSX script. JSX es una extensión para la sintaxis, lo que hace que un código JavaScript se parezca a un código escrito en HTML. Esto hace que el código sea más fácil de entender y los errores tipográficos son más fáciles de detectar. Para que el código JSX se compile en un navegador, React se complementa con Babel, una herramienta de traducción de código.</p><h3 id="angular-6">Angular</h3><p>Angular puede usar JavaScript o TypeScript, que es un superconjunto de JS desarrollado específicamente para proyectos más grandes. TypeScript es más compacto que JavaScript, el código es más fácil de navegar y los errores tipográficos se detectan fácilmente. El proceso de refactorización de código también se vuelve más simple y rápido.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/34RQEkHFyn2MwWWbUxVwyx/d621c2de5692fb4b686b3702472676ab/layers__2_.png?h=300" class="kg-image" alt="layers (2)" width="256" height="256" loading="lazy"></figure><h2 id="8-estructura-de-la-aplicaci-n">8. Estructura de la Aplicación</h2><h3 id="react-7">React</h3><p>La estructura de React ofrece a los desarrolladores la libertad de elegir. No existe "una única estructura correcta" para una aplicación React. Sin embargo, la necesidad de diseñar la estructura de la aplicación al comienzo de cada proyecto hace que sea más difícil y más largo de comenzar.</p><p>Además, React ofrece solo la capa View, mientras que Model y Controller se agregan con el uso de otras librerías.</p><p>La arquitectura de una aplicación React está basada en componentes. El código está hecho de componentes React, que se renderizan con la biblioteca React DOM y se dirigen de dos maneras: funcional (con una función que devuelve JSX) ...</p><pre><code class="language-js">function Hola(props){
    return &lt;div&gt;Hola {props.nombre}&lt;/div&gt;
}</code></pre><p>... y basado en clases (con clases ES6).</p><pre><code class="language-js">class Hola extends React.Component {
    render() {
    return &lt;h1&gt;Hola, {this.props.nombre}&lt;/h1&gt;;
}</code></pre><h3 id="angular-7">Angular</h3><p>La estructura de Angular es fija y compleja, adecuada para desarrolladores experimentados.</p><p>Angular se basa en tres capas: Model, Controller y View. El objeto responsable del Model es inicializado por el Controller y se muestra con el View.</p><p>El código de la aplicación consta de diferentes componentes de &nbsp;Angular, cada uno escrito en cuatro archivos separados: un archivo TypeScript para implementar el componente, un archivo HTML para definir la vista, un archivo CSS para definir las características de estilo y un archivo especial para efectuar las pruebas. Los enlaces a estos archivos están escritos en la directiva de la aplicación (app directive), que muestra la lógica estructural de la aplicación. Respectivamente, los componentes de Angular también son reutilizables.</p><pre><code class="language-js">import { Component } from '@angular/core';
    @Component({
    selector: 'my-app',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})
export class AppComponent { }</code></pre><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/1jnhjOLhvVfIJpf1JjAFlO/e14f81b5efdca246c0d2beab0e49c2f0/app__1_.png?h=300" class="kg-image" alt="app (1)" width="256" height="256" loading="lazy"></figure><h2 id="9-componentes-de-la-interfaz-de-usuario-ui-">9. Componentes de la interfaz de usuario (UI)</h2><h3 id="react-8">React</h3><p>Las herramientas de interfaz de usuario para React son desarrolladas por la comunidad. Hay muchos componentes de IU gratuitos y de pago en el portal de React. Para usar componentes de Material design en React, tendría que instalar una librería adicional: Material-UI Library &amp; Dependencies.</p><h3 id="angular-8">Angular</h3><p>Angular tiene un Material design preconstruidos. Hay varios botones, diseños, indicadores, ventanas emergentes y controles de formulario. Debido a esto, la configuración de la interfaz de usuario (UI) se vuelve más simple y rápida.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/27zKcdqY3mOnzT5p8vrQbC/e987f42102e8875d0f7714d8db3288f8/file__1_.png?h=300" class="kg-image" alt="file (1)" width="256" height="256" loading="lazy"></figure><h2 id="10-directivas">10. Directivas</h2><h3 id="react-9">React</h3><p>En React, las plantillas y la lógica se explican en un solo lugar: al final del componente. Permite al lector captar rápidamente el significado del código incluso si no conoce la sintaxis.</p><h3 id="angular-9">Angular</h3><p>En Angular, cada plantilla se devuelve con un atributo: una directiva de cómo se debe configurar el objeto. La sintaxis de las directivas Angular es compleja y sofisticada, lo que la hace incomprensible para un lector sin experiencia trabajando con esta tecnología.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/4I2aqTboict17ysz5yGD4n/5a7fc19e15889f42b7561d34b18edae9/controls__1_.png?h=300" class="kg-image" alt="controls (1)" width="256" height="256" loading="lazy"></figure><h2 id="11-gesti-n-de-estado">11. Gestión de Estado</h2><h3 id="react-10">React</h3><p>En React, cada componente tiene su propio estado. Un desarrollador de React puede crear componentes especiales para mantener el estado de toda la aplicación o una parte en concreto de ella. La principal desventaja aquí consiste en el hecho de que el estado global debe almacenarse en múltiples partes diferentes de la aplicación y los datos se pasan manualmente a los diferentes niveles del árbol de componentes.</p><pre><code class="language-js">class Reloj extends React.Component {
  constructor(props) {
    super(props);
   this.state = {date: new Date()};
 }
  render() {
    return (
      &lt;div&gt;
        &lt;h1&gt;¡Hola Mundo!&lt;/h1&gt;
        &lt;h2&gt;Ahora es {this.state.date.toLocaleTimeString()}.&lt;/h2&gt;
      &lt;/div&gt;
    );
  }
}</code></pre><p>Para resolver este problema, existe una librería de gestión especial del estado: Redux. La idea de está es que el estado global se representa como un único objeto con estado, que se modifica en diferentes partes de la aplicación con la ayuda de reductores: funciones especiales de Redux.</p><p>La librería de gestión de estado MobX ofrece otra solución. A diferencia de Redux con el estado global almacenado en un solo objeto con estado inmutable, MobX ofrece almacenar solo el estado mínimo requerido, mientras que el resto se puede derivar. </p><h3 id="angular-10">Angular</h3><p>En Angular, los datos de los componentes se almacenan en las propiedades de los componentes. Los componentes principales (parent) pasan datos a los secundarios (child). Los cambios de estado en algunas partes se pueden identificar y recalcular, pero en una aplicación grande, pueden causar una serie de actualizaciones multidireccionales del árbol, que serán difíciles de rastrear. Las funciones se pueden mejorar con la ayuda de bibliotecas de gestión de estado, como NgRx o RxJS, que garantizarían que el flujo de datos sea unidireccional.</p><pre><code class="language-js">export class HeroListComponent implements OnInit {
  heroes: Hero[];
  selectedHero: Hero;
  constructor(private service: HeroService) { }
  ngOnInit() {
    this.heroes = this.service.getHeroes();
  }
  selectHero(hero: Hero) { this.selectedHero = hero; }
} </code></pre><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/1FrBshReFNJB1yDkeNVBPr/091aac131dccf0267061a450f76fb897/network__1_.png?h=300" class="kg-image" alt="network (1)" width="256" height="256" loading="lazy"></figure><h2 id="12-inyecci-n-de-dependencias">12. Inyección de dependencias</h2><h3 id="react-11">React</h3><p>React no es totalmente compatible con la inyección de dependencias, ya que no cumple totalmente con la idea de programación funcional e inmutabilidad de datos. En cambio, tiene un estado global para todos los componentes.</p><h3 id="angular-11">Angular</h3><p>La mayor ventaja de Angular reside en el hecho de que, a diferencia de React, admite la inyección de dependencias. Por tanto, Angular permite tener diferentes ciclos de vida para diferentes almacenamientos.</p><pre><code class="language-js">import { Injectable } from '@angular/core';
import { HEROES } from './mock-heroes';
@Injectable({
  // declaramos que este servicio debe ser creado
  // por el inyector de aplicación root.
  providedIn: 'root',
})
export class HeroService {
  getHeroes() { return HEROES; }
}</code></pre><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/4FJFtvDwvmQdgsCUx5MYOO/b87ee7b57de5908ef20405e95b707959/unlink__1_.png?h=300" class="kg-image" alt="unlink (1)" width="256" height="256" loading="lazy"></figure><h2 id="13-enlace-de-datos">13. Enlace de datos</h2><h3 id="react-12">React</h3><p>El enlace de datos representa el proceso de sincronización de datos entre el Model y View. React debe reforzase con <u>Redux</u>, quien le permite trabajar con datos inmutables y hace que el flujo de datos sea unidireccional. El enlace unidireccional es predecible, lo que facilita el proceso de depuración.</p><h3 id="angular-12">Angular</h3><p>Angular funciona con el enlace de datos bidireccional y datos mutables. Si bien las ventajas de los datos mutables e inmutables son tema de una acalorada discusión, definitivamente es más fácil trabajar con el enlace de datos bidireccional que con el enfoque unidireccional. Al mismo tiempo, el enlace de datos bidireccional afecta negativamente al rendimiento, ya que Angular desarrolla automáticamente un observador para cada enlace.</p><p>Las formas del enlace de datos en Angular:</p><pre><code class="language-js">{{expression}}   Interpolation
[target]="expression"    Property
bind-target="expression"    Attribute</code></pre><pre><code class="language-js">(target)="statement" Event
on-target="statement" Event</code></pre><pre><code class="language-js">[(target)]="expression" Two-way
bindon-target="expression" Two-way</code></pre><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/2mOdA6gBK5MqwjRRdgm5Mm/d679f1314811e0ba93ae2b106ddbf5f1/shuffle__1_.png?h=300" class="kg-image" alt="shuffle (1)" width="256" height="256" loading="lazy"></figure><h2 id="14-cambio-de-renderizado">14. Cambio de Renderizado</h2><h3 id="react-13">React</h3><p>React utiliza un Modelo de Objetos del Documento virtual (DOM), que permite implementar fácilmente cambios menores en los datos de un elemento sin actualizar la estructura de todo el árbol. La librería crea una memoria en caché de la estructura de datos, calcula los cambios y actualiza de manera eficiente el DOM que se muestra en el navegador. De esta manera, toda la página parece renderizarse representarse en cada cambio, mientras que en realidad, las librerías solo representan los subcomponentes modificados.</p><p>El equipo de React está mejorando constantemente Fiber, un mecanismo destinado a impulsar la productividad del renderizado de cambios.</p><h3 id="angular-13">Angular</h3><p>Angular usa un DOM real, que actualiza toda la estructura del árbol incluso cuando los cambios han tenido lugar en un solo elemento. El DOM real se considera más lento y menos efectivo que el DOM virtual.</p><p>Para compensar esta desventaja, Angular utiliza la detección de cambios para identificar los componentes que deben modificarse. Por lo tanto, el DOM real en Angular funciona con la misma eficacia que el DOM virtual en React.</p><figure class="kg-card kg-image-card"><img src="https://images.ctfassets.net/6xhdtf1foerq/77lE2Lv97WHOpaxBVDPjfX/2b4e6f55becbd8aae05b983cb072f3c7/edit__1_.png?h=300" class="kg-image" alt="edit (1)" width="256" height="256" loading="lazy"></figure><h2 id="15-herramientas">15. Herramientas</h2><h3 id="react-14">React</h3><p>React es compatible con varios editores de código. Por ejemplo, el código en React se puede editar con <a href="https://www.sublimetext.com/">Sublime Text</a>, <a href="https://visualstudio.microsoft.com//">Visual Studio</a> y <a href="https://atom.io/">Atom</a>. Para iniciar un proyecto, puede usar la herramienta Create React App (CLI). A su vez, la renderizacion del lado del servidor se completa con el uso del framework Next.js.</p><p>Para probar toda la aplicación escrita en React, necesitarías varias herramientas. Por ejemplo, <a href="https://enzymejs.github.io/enzyme/">Enzyme</a> para las pruebas de componentes, <a href="https://jestjs.io/">Jest</a> para probar el código JS, React-unit para las pruebas unitarias, etc. Para depurar la aplicación en el modo de desarrollo, puede usar una extensión de navegador llamada React Dev Tools.</p><p>Otra herramienta interesante es <a href="https://github.com/facebookarchive/react-360">React 360</a>, que es una biblioteca utilizada para crear aplicaciones AR (realidad aumentada) y VR (realidad virtual).</p><h3 id="angular-14">Angular</h3><p>De manera similar a React, Angular es compatible con una variedad de herramientas de edición de código. Por ejemplo, puedes trabajar con editores de código como <a href="http://www.aptana.com/">Aptana</a>, <a href="https://www.sublimetext.com/">Sublime Text</a> y <a href="https://visualstudio.microsoft.com/">Visual Studio</a>. Un proyecto se puede configurar rápidamente con Angular CLI. La renderizacion del lado del servidor se completa con la ayuda de <a href="https://github.com/angular/universal">Angular Universal</a>. </p><p>A diferencia de React, Angular se puede probar completamente con una sola herramienta. Para las pruebas de extremo &nbsp;a extremo (end-to-end) en Angular, las plataformas son <a href="https://jasmine.github.io/">Jasmine</a>, <a href="https://www.protractortest.org/#/">Protractor</a> y <a href="https://karma-runner.github.io/latest/index.html">Karma</a>. Otra herramienta que depura la aplicación en el modo de desarrollo es una extensión del navegador <a href="https://augury.rangle.io/">Augury</a>.</p><h2 id="conclusi-n">Conclusión</h2><p><strong>Angular</strong> es un framework de desarrollo web y móvil completo. <strong>React</strong> es una librería solo para el desarrollo de UI, que se puede convertir en una solución completa con la ayuda de librerías adicionales.</p><p>React parece más simple a primera vista y lleva menos tiempo el comenzar a trabajar en un proyecto con React. Sin embargo, esa simplicidad que es la principal ventaja de React se neutraliza porque tienes que aprender a trabajar con frameworks y herramientas de JavaScript adicionales.</p><p>Angular en sí es más complejo y lleva bastante tiempo dominarlo. Sin embargo, es una herramienta poderosa que ofrece una experiencia de desarrollo web integral, y una vez que aprendes a trabajar con ella, da sus frutos.</p><p><strong>No hay un mejor framework o una mejor librería. Ambos se actualizan continuamente para mantenerse al día con su competidor.</strong> Por ejemplo, mientras que se creía que React ganaba debido a su DOM virtual, Angular igualó la puntuación al implementar la detección de cambios. Si bien se consideró que Angular estaba ganando debido a que fue desarrollado por una empresa tan autoritaria como Google, la inmensa y devota comunidad de React compensó completamente la reputación de Google e hizo que React fuera similar a Angular.</p><p><strong>Al final, React vs Angular es una cuestión de preferencia personal, una cuestión de habilidades y hábitos.</strong> Como principiante en programación, probablemente te beneficiarás más comenzando con React. Como desarrollador experimentado, sigue trabajando con lo que conozcas mejor. </p><p>No olvides desafiarte a ti mismo y comenzar a aprender un nuevo framework o librería, React o Angular. Como gerente de proyectos o propietario de una empresa que subcontrata a los desarrolladores, debe hablar con su equipo de desarrollo web y elegir juntos el framework o libraría marco que mejor se adapte a todos, ya sea Angular o React.</p><h2 id="p-s-">P.S.</h2><p>Me gustaría agradecer a todos los que contribuyeron a este artículo, incluidos Sergey Gornostaev y Volodya Andrushchak, desarrolladores de software Full-stack @ KeenEthics.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/oleg/"><strong>Oleg Romanyuk</strong></a> - <a href="https://www.freecodecamp.org/news/angular-vs-react-what-to-choose-for-your-app-2/"><strong>Angular vs React: Which One to Choose for Your App</strong></a></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
