<?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[ Belen Jessikowski - 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[ Belen Jessikowski - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 19:37:27 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/beluirina/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como pasar data y eventos entre componentes en ReactJs ]]>
                </title>
                <description>
                    <![CDATA[ Si estás intentando implementar operaciones CRUD usando endpoints API, capaz vas a enfrentarte con cierta dificultad para manejar data a través de distintos componentes.  O capaz tienes un modal, pero quieres llamarlo o usarlo de otro componente. Saber como abordar estos escenarios puede ser difícil.  En este tutorial, ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/pasar-data-y-eventos-entre-componentes-en-reactjs/</link>
                <guid isPermaLink="false">62f18096b4def50851977c28</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Belen Jessikowski ]]>
                </dc:creator>
                <pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/08/Colorful-Animal-Crossing-Icons-Icon-Set-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/pass-data-between-components-in-react/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Pass Data and Events Between Components in React</a>
      </p><p>Si estás intentando implementar operaciones CRUD usando endpoints API, capaz vas a enfrentarte con cierta dificultad para manejar data a través de distintos componentes. </p><p>O capaz tienes un modal, pero quieres llamarlo o usarlo de otro componente.</p><p>Saber como abordar estos escenarios puede ser difícil. </p><p>En este tutorial, te mostraré cómo puedes hacerlo.</p><h2 id="c-mo-pasar-datos-entre-un-componente-padre-y-un-componente-hijo">Cómo pasar datos entre un componente padre y un componente hijo</h2><p>En primer lugar, vamos a pasar datos entre un componente padre y un componente hijo.</p><p>Primero, tendrás que crear dos componentes, uno padre y otro hijo.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'

export default function Padre() {
  return (
    &lt;div&gt;
      
    &lt;/div&gt;
  )
}
</code></pre><figcaption>Parent.js</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>import React from 'react'

export default function Hijo() {
    return (
        &lt;div&gt;
            
        &lt;/div&gt;
    )
}
</code></pre><figcaption>Child.js</figcaption></figure><p>A continuación, importarás el componente hijo en el componente padre y lo devolverás.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'
import Hijo from './Hijo';

export default function Padre() {
  return (
    &lt;div&gt;
      &lt;Hijo/&gt;
    &lt;/div&gt;
  )
}</code></pre><figcaption>Call the Child Component in the Parent Component</figcaption></figure><p>Luego crearás una función y un botón para activar esa función. Además, crearás un estado utilizando el gancho (hook) useState para gestionar los datos.</p><pre><code>import React from 'react'
import Hijo from './Hijo';
import { Button } from 'semantic-ui-react';
import { useState } from 'react';
import './App.css';

export default function Padre() {
  const [datos, estableceDatos] = useState('');
  
  const padreAHijo = () =&gt; {
    estableceDatos("Esta es la data del componente Padre al componente Hijo.");
  }
  return (
    &lt;div className="App"&gt;
      &lt;Hijo/&gt;
      
      &lt;div&gt;
        &lt;Button primary onClick={() =&gt; padreAHijo()}&gt;Clic Padre&lt;/Button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}
</code></pre><p>Como puedes ver aquí, estamos llamando a la función <em>padreAHijo al hacer clic en el botón clic Padre. </em>Cuando se hace clic en el botón Padre, se guarda la información, "Estos son los datos del componente Padre al componente Hijo" en la variable datos.</p><p>Ahora, vamos a pasar ese estado de datos a nuestros componentes hijos. Puedes hacer esto usando props (propiedades).</p><p>Pasa los datos como props cuando llames al componente hijo de la siguiente manera:</p><figure class="kg-card kg-code-card"><pre><code>&lt;Hijo padreAHijo={datos}/&gt;</code></pre><figcaption>Parent.js</figcaption></figure><p>Aquí, estamos pasando los datos en el componente hijo como <em>datos</em>.</p><p><code>datos</code> es los datos que debemos pasar, y &nbsp;<code>padreAHijo</code> es el nombre del prop.</p><p>A continuación, es el momento de capturar los datos en el componente hijo. Y es muy sencillo.</p><p>Aquí puede haber dos casos.</p><p>Caso 1: Si estás usando un componente funcional, simplemente captura el padreAHijo en los parámetros.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'

export default function Hijo({padreAHijo}) {
    return (
        &lt;div&gt;
            {padreAHijo}
        &lt;/div&gt;
    )
}</code></pre><figcaption>React Functional Component</figcaption></figure><p>Case 2: Si tienes un componente clase, entonces puedes usar <code>this.props.padreAHijo</code>.</p><figure class="kg-card kg-code-card"><pre><code>import React, { Component } from 'react'

export default class Hijo extends Component {
    render() {
        return (
            &lt;div&gt;
                {this.props.padreAHijo}
            &lt;/div&gt;
        )
    }
}</code></pre><figcaption>React Class Component</figcaption></figure><p>De cualquier manera, vas a obtener los mismos resultados:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Screenshot-2021-06-06-132836.png" class="kg-image" alt="Screenshot-2021-06-06-132836" width="600" height="400" loading="lazy"><figcaption>"Esta es la data del componente Padre al componente Hijo [Clickea Padre]"</figcaption></figure><p>Cuando hagamos clic en el botón <code>Clic Padre</code>, veremos los datos como resultados en la pantalla.</p><pre><code>import React from 'react'
import Hijo from './Hijo';
import { Button } from 'semantic-ui-react';
import { useState } from 'react';
import './App.css';

export default function Padre() {
  const [datos, estableceDatos] = useState('');
  
  const padreAHijo = () =&gt; {
    estableceDatos("Esta es la data del componente Padre al componente Hijo.");
  }
  return (
    &lt;div className="App"&gt;
      &lt;Child padreAHijo={datos}/&gt;
      
      &lt;div className="Hijo"&gt;
        &lt;Button primary onClick={() =&gt; padreAHijo()}&gt;Clic Padre&lt;/Button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}</code></pre><p>Arriba puedes ver el código completo para el <code>Componente Padre</code>.</p><h2 id="como-pasar-data-entre-un-componente-hijo-y-un-componente-padre"><strong>Como pasar data entre un Componente Hijo y un Componente Padre</strong></h2><p>Esto es algo más complicado.</p><p>En primer lugar, hay que crear una función en el componente padre llamada &nbsp;<code>hijoAPadre</code> y un estado vacío llamado <code>datos</code>.</p><figure class="kg-card kg-code-card"><pre><code>const [datos, estableceDatos] = useState('');

const hijoAPadre = () =&gt; {
   
}</code></pre><figcaption>Componente Padre</figcaption></figure><p>Entonces, pasa la función &nbsp;<code>hijoAPadre</code> como una propiedad al componente hijo.</p><figure class="kg-card kg-code-card"><pre><code>&lt;Hijo hijoAPadre={hijoAPadre}/&gt;</code></pre><figcaption>Pasando el <code>hijoAPadre</code> al componente Hijo.</figcaption></figure><p>Ahora, en nuestro componente hijo, acepta esta llamada a la función como props y la asigna a un evento onClick.</p><p>Además, declare un estado que contenga algunos datos en forma de cadena o número.</p><p>Pasa los datos dentro de la función <code>padreAHijo</code> como parámetros.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'
import { Button } from 'semantic-ui-react';

export default function Hijo({hijoAPadre}) {
    const datos = "Esta es los datos del componente Padre al componente Hijo."
    return (
        &lt;div&gt;
            &lt;Button primary onClick={() =&gt; hijoAPadre(datos)}&gt;Clic Hijo&lt;/Button&gt;
        &lt;/div&gt;
    )
}</code></pre><figcaption>Child Component</figcaption></figure><p>A continuación, en el componente padre, acepta estos datos en la función hijoAPadre como parámetro. A continuación, establezca los datos utilizando el gancho useState.</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';
import { useState } from 'react';
import Hijo from './Hijo';

function Padre() {
  const [datos, estableceDatos] = useState('');
  
  const hijoAPadre = (datoshijo) =&gt; {
    estableceDatos(datoshijo);
  }

  return (
    &lt;div className="App"&gt;
      &lt;div&gt;
        &lt;Hijo/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  );
}

export default Padre;
</code></pre><figcaption>Parent Component</figcaption></figure><p>A continuación, muestra esa variable de datos en la función de retorno.</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';
import { useState } from 'react';
import Hijo from './Hijo';

function Padre() {
  const [datos, estableceDatos] = useState('');
  
  const hijoAPadre = (datoshijo) =&gt; {
    estableceDatos(datoshijo);
  }

  return (
    &lt;div className="App"&gt;
     {datos}
      &lt;div&gt;
        &lt;Child hijoAPadre={hijoAPadre}/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  );
}

export default Padre;</code></pre><figcaption>Parent Component</figcaption></figure><p>Los datos del hijo sobreescribirán los datos del padre cuando se haga clic en el botón Clic Hijo (<code>Click Child</code>).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Screenshot-2021-06-06-134803.png" class="kg-image" alt="Screenshot-2021-06-06-134803" width="600" height="400" loading="lazy"></figure><p>Ahora, puedes pasar datos de <strong>hijo a padre</strong> y de <strong>padre a hijo</strong> como un profesional.</p><h3 id="tambi-n-puedes-pasar-eventos-como-onclick-u-onchange">También puedes pasar eventos como onClick u OnChange</h3><p>Solo llama un método de alerta en la función &nbsp;<code>hijoAPadre</code><em><em> </em></em>y pasa esa función como propiedad al componente hijo.</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';
import hijo from './Hijo';

function Padre() {
  const hijoAPadre = () =&gt; {
    alert("Esto es una alerta del componente Hijo")
  }

  return (
    &lt;div className="App"&gt;
      &lt;div className="hijo"&gt;
        &lt;Hijo hijoAPadre={hijoAPadre}/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  );
}

export default Padre;</code></pre><figcaption>Componente Padre</figcaption></figure><p>Y en el componente hijo, acepta la función <code>hijoAPadre</code><em><em> </em></em>como una propiedad. Entonces asígnale un evento onClick al botón.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'
import { Button } from 'semantic-ui-react';

export default function Hijo({hijoAPadre}) {
    return (
        &lt;div&gt;
            &lt;Button primary onClick={() =&gt; hijoAPadre()}&gt;Clic Hijo&lt;/Button&gt;
        &lt;/div&gt;
    )
}</code></pre><figcaption>Componente Hijo</figcaption></figure><p>Tu función en el componente padre será llamada cuando hagas clic en el botón del componente hijo y verás esta alerta:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Screenshot-2021-06-06-140405.png" class="kg-image" alt="Screenshot-2021-06-06-140405" width="600" height="400" loading="lazy"></figure><p>¡Y eso es todo!</p><p>Puedes encontrar el código en GitHub si quieres seguir experimentando.</p><blockquote>Bueno, eso es todo amigos. Feliz aprendizaje!</blockquote> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Programación funcional en JavaScript para principiantes ]]>
                </title>
                <description>
                    <![CDATA[ La programación funcional no es un nuevo enfoque de programación, pero ha crecido bastante en popularidad en los últimos años. Esto es porque, una vez que los programadores entienden lo básico de las técnicas (y son capaces de escribir código limpio y confiable usando), las aplicaciones que fueron escritas usando ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/programacion-funcional-en-javascript-para-principiantes/</link>
                <guid isPermaLink="false">62f12a1cb4def50851977859</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Belen Jessikowski ]]>
                </dc:creator>
                <pubDate>Thu, 25 Mar 2021 15:23:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/08/60398767a675540a2292447c.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/functional-programming-in-javascript-for-beginners/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Functional Programming in JavaScript for Beginners</a>
      </p><p>La programación funcional no es un nuevo enfoque de programación, pero ha crecido bastante en popularidad en los últimos años.</p><p>Esto es porque, una vez que los programadores entienden lo básico de las técnicas (y son capaces de escribir código limpio y confiable usando), las aplicaciones que fueron escritas usando un enfoque funcional son mucho más fáciles de usar.</p><p>Por esta razón, vale la pena mejorar nuestro conocimiento de la programación funcional una vez que hayas terminado de trabajar con este<a href="https://www.freecodecamp.org/news/the-complete-javascript-handbook-f26b2c71719c/"> JavaScript beginners’ handbook</a>.</p><p>Si sueles trabajar con JavaScript, usando este enfoque podrás ahorrarte tiempo, y podrás hacer que tu código sea más fácil para usar y, así como también, tiene potencial de ser más seguro.</p><p>En este artículo, vamos a ver los principios básicos de la programación funcional, y luego demarcar algunas de las herramientas claves para usar este tipo de enfoque en JavaScript.</p><h2 id="programaci-n-imperativa-vs-funcional"><strong>Programaci</strong>ó<strong>n Imperativa vs. Funcional</strong></h2><p>Los orígenes de la programación funcional se remontan a la década de 1930 con la invención del Cálculo Lambda.</p><p>Este enfoque a la computación buscaba definir tareas simples y funciones, no como la manipulación estructural de estructuras de datos (como los arreglos y las listas), sino más bien como funciones matemáticas realizadas sobre ellas.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/02/image-144.png" class="kg-image" alt="image-144" width="600" height="400" loading="lazy"><figcaption><a href="https://android.jlelse.eu/how-to-wrap-your-imperative-brain-around-functional-reactive-programming-in-rxjava-91ac89a4eccf" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Image Source</a></figcaption></figure><p>Esto puede llegar a sonar un poco abstracto, especialmente si eres nuevo a la programación. Pero es el caso que la diferencia entre un enfoque funcional y uno imperativo puede ser expresado de manera breve usando un ejemplo como el siguiente:</p><h3 id="imperativo-"><strong>Imperativo:</strong></h3><pre><code class="language-js">const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

function obtenerImpar(arr) {
  let impares = [];
  for (let i = 0; i &lt; arr.length + 1; i++) {
    if (i % 2 !== 0) {
      impares.push(i);
    }
  }
  return impares;
}

console.log(obtenerImpar(arr)); // logs [1, 3, 5, 7, 9]
</code></pre><h3 id="funcional-"><strong>Funcional:</strong></h3><pre><code class="language-js">function obtenerImpar2(arr){
return arr.filter(num =&gt; num % 2 !== 0)
}console.log(obtenerImpar2(arr))
// logs [ 1, 3, 5, 7, 9 ]
const obtenerImpar3 = arr =&gt; arr.filter(num =&gt; num % 2 !== 0)console.log(obtenerImpar3(arr))
// logs [ 1, 3, 5, 7, 9 ]</code></pre><p>Como podrás ver, la manera en la que estos programas trabajan es muy distinta.</p><p>El enfoque imperativo es el de definir una estructura de data, y luego manipularla para obtener el output requerido. En el enfoque funcional, usamos funciones de filtro para definir una función programada, y luego llamar esta misma cuando sea necesario.</p><p>Obviamente, la mayor parte de la complejidad de cómo funciona la programación funcional está escondida del usuario final, así como también del programador si está usando un framework de desarrollo front end.</p><p>Pero las ventajas de usar un enfoque funcional son claras hasta dentro de este ejemplo - este paradigma resulta en código más corto que es más fácil de leer, ser entendido y comprobado.</p><h2 id="-por-qu-deber-a-usar-la-programaci-n-funcional">¿Por qué debería usar la programación funcional?</h2><p>Además de esta ventaja básica, hay varias otras ventajas para su uso.</p><p>Varias de estas provienen del simple hecho de que el código funcional es más fácil de leer que el código imperativo. Esto es porque el ser humano puede fácilmente ver como funciona un programa funcional, en vez de tener que desarmar el código para poder entenderlo, muchos aspectos de testing son simplificados.</p><h3 id="la-programaci-n-funcional-garantiza-la-integridad-del-c-digo-con-pruebas-de-penetraci-n">La programación funcional garantiza la integridad del código con pruebas de penetración</h3><p>Pruebas de penetración se vuelve más efectiva donde el código es legible por el humano. Esto lo hace más fácil para evaluar la integridad del código funcional.</p><p>Según la desarrolladora de software Barbara Ericson de<a href="https://www.clouddefense.ai/blog/penetration-testing"> Cloud Defense</a>, las pruebas de penetración siempre deben realizarse en aplicaciones JavaScript, y un enfoque funcional puede ayudar a que esto sea más riguroso.</p><p>Esta facilidad de lectura también simplifica muchos otros procesos administrativos que aplican al desarrollo de código y aplicaciones nuevas.</p><p>En los enfoques funcionales, los procesos de cumplimiento son más fáciles, porque los programadores no deberían preocuparse mucho por la ejecución de su código. Lo cual significa que las partes del programa que trabajan con información más sensible puede estar aislado y evaluado separado del resto del programa.</p><h3 id="la-programaci-n-funcional-hace-que-el-c-digo-sea-m-s-f-cil-de-leer">La programación funcional hace que el código sea más fácil de leer</h3><p>Aun así, las ventajas del enfoque funcional no están limitadas al análisis de código. También se extienden al proceso de desarrollo. </p><p>De hecho, el enfoque funcional construyen y amplifican las ventajas y desventajas de JavaScript mismo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/02/image-145.png" class="kg-image" alt="image-145" width="600" height="400" loading="lazy"><figcaption><a href="https://itnext.io/why-are-we-creating-a-javascript-only-world-wide-web-db8c3a340b9" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Image Source</a></figcaption></figure><p>Al hacer que el código sea más fácil de leer, puedes traer muchos más grupos de staff al proceso de desarrollo, mismo si no tienen un conocimiento extenso de JavaScript.</p><p>Esta es la clave fundamental para el enfoque DevOps, que uno pueda ayudar a mitigar las vulnerabilidades de tu código JavaScript. También es facilitado al tomar un enfoque funcional a tu código.</p><h2 id="herramientas-clave-para-la-programaci-n-funcional"><strong>Herramientas clave para la programación funcional</strong></h2><p>Hay un número de herramientas clave y conceptos que deberían conocer cuando se trata de poner un enfoque funcional en acción. Veamos cuáles son.</p><h3 id="1-funciones-puras-e-impuras"><strong>1. Funciones puras e impuras</strong></h3><p>En el nivel más básico, una programación funcional busca manipular información sin mutarla. Esto significa que una "función funcional" puede obtener datos, llevar a cabo cálculos, y devolver un resultado (todo sin reescribir ninguna parte de la estructura de datos en sí misma).</p><p>Funciones que funcionan de esta manera son llamadas "puras", y aquellas que no lo hacen son denominadas "impuras".</p><pre><code class="language-js"> 
function getSquare(items) {
  var len = items.length;
  for (var i = 0; i &lt; len; i++) {
    items[i] = items[i] * items[i];
  }
  return items;
}</code></pre><p>La idea general es la de dejar la data con la que estás trabajando completamente intacto.</p><p>Si quieres fusionar dos arreglos, no debes utilizar la estrategia de &nbsp;<code>Array.prototype.push()</code> (que sobreescribirá tu data original). Por lo contrario, usar una función <code>Array.prototype.concat()</code>, que creará un nuevo arreglo en "funcionamiento" con el cual podrías trabajar.</p><h3 id="2-funciones-an-nimas"><strong>2. Funciones anónimas</strong></h3><p>Las funciones anónimas también son una parte importante de la programación funcional, una que tiene raíces de cálculos Lambda.</p><p>Las funciones anónimas, como el nombre lo sugiere, no tienen un nombre explícitamente definido. En cambio, son las funciones que son asignadas a variables e invocadas por medio de las mismas.</p><pre><code class="language-js"> alert((function(x) {
    return !(x &gt; 1)
      ? 1
      : arguments.callee(x - 1) * x;
  })(20));</code></pre><p>La ventaja de hacer esto es que mientras que puedas seguir cuáles funciones están asignadas a cuáles variables, estas pueden ser invocadas fácilmente, y pasadas de un módulo a otro sin nada más que una llamada de variables. Esto te da una nueva manera más flexible y poderosa de trabajar con funciones.</p><h3 id="3-funciones-recursivas"><strong>3. Funciones recursivas</strong></h3><p>El uso de funciones recursivas es otro sello de la programación funcional. Aunque la idea general de la recursión será familiar para los programadores principiantes, la programación funcional lleva la idea aún más lejos al definir funciones que se llamen a sí mismas. </p><pre><code class="language-js">function cuentaRegresiva(fromNumber) {
    console.log(fromNumber);

    let siguienteNum = fromNumber - 1;

    if (siguienteNum &gt; 0) {
        cuentaRegresiva(siguienteNum);
    }
}
cuentaRegresiva(3);</code></pre><p>Esto hace que la implementación de la recursión sea más simple - en gran parte porque los programadores no necesitan usar bucles para hacerlo.</p><p>Aunque, también viene con sus peligros. Específicamente, tener una función que se llame a sí misma hace que sea aún más fácil para accidentalmente crear un bucle infinito, así que ten el cuidado de respaldar cada función recursiva con una manera rigurosa de parar la ejecución.</p><h2 id="conclusi-n">Conclusión</h2><p>Aunque estos tres conceptos son típicos de la programación funcional, la verdad es que la gran variedad de maneras en la cual el paradigma puede ser aplicado significa que es más una filosofía que herramientas y procesos bien diseñados.</p><p>Toma un par de pasos para adentrarte al mundo emocionante de la programación funcional, y empezarás a ver su influencia en todos lados. De hecho, comunica muchas de las prácticas más comunes en JavaScript que se usan hoy en día.</p><p>En otras palabras, aunque la programación funcional parezca superficialmente simple, tiene consecuencias muy profundas en la manera en la que programas. Es por esto que vale la pena aprenderlo, incluso aunque no lo suelas usar todo el tiempo.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Como mantener tu pie de página adonde pertenece? ]]>
                </title>
                <description>
                    <![CDATA[ El pie de página es el último elemento de la página. Mínimamente, está al pie de tu pantalla, o más bajo si el contenido de la página es más alto que tu ventana. ¿Es simple, no? Cuando estás trabajando con contenido dinámico que incluye un pie de página, ocurre a ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-mantener-tu-pie-de-pagina-donde-pertenece/</link>
                <guid isPermaLink="false">62f16a14b4def50851977b36</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Belen Jessikowski ]]>
                </dc:creator>
                <pubDate>Fri, 06 Jul 2018 00:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/09/Tutorial-Graphic-4.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-keep-your-footer-where-it-belongs-59c6aa05c59c/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to keep your footer where it belongs ?</a>
      </p><p>El pie de página es el último elemento de la página. Mínimamente, está al pie de tu pantalla, o más bajo si el contenido de la página es más alto que tu ventana. ¿Es simple, no?</p><p>Cuando estás trabajando con contenido dinámico que incluye un pie de página, ocurre a veces un problema donde el contenido de la página no es suficiente para llenarla. El pie de página, en vez de quedarse al pie de página donde nos gustaría que se quede, sube y deja un espacio en blanco debajo de sí.</p><p>Para una corrección rápida, puedes posicionar el pie de página al final de tu página. Pero esto viene con su consecuencia. Si el contenido crece y se vuelve más grande que la ventana, el pie de página se encuentra ‘atascado’ al final de la pantalla, lo queramos o no.</p><p>Esto demuestra el comportamiento que no queremos y aquel que si:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/09/Tutorial-Graphic-5.png" class="kg-image" alt="CmSel82bidnUEBQ5fnl1aWwQlwmj4h2eO0WI" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/09/Tutorial-Graphic-5.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/09/Tutorial-Graphic-5.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/size/w1600/2022/09/Tutorial-Graphic-5.png 1600w, https://www.freecodecamp.org/espanol/news/content/images/2022/09/Tutorial-Graphic-5.png 1879w" sizes="(min-width: 720px) 720px" width="1879" height="958" loading="lazy"></figure><p>Veamos como podemos lograrlo.</p><h2 id="obteniendo-control-sobre-tu-pie-de-p-gina">Obteniendo control sobre tu pie de página</h2><p><code>index.html</code>:</p><pre><code>&lt;!DOCTYPE html&gt;

&lt;html&gt;
 &lt;head&gt;
   &lt;link rel="stylesheet" type="text/css" href="main.css" /&gt;
 &lt;/head&gt;

&lt;body&gt;
 &lt;div id="page-container"&gt;
   &lt;div id="content-wrap"&gt;
     &lt;!-- todo el contenido de pagina --&gt;
   &lt;/div&gt;
   &lt;footer id="footer"&gt;&lt;/footer&gt;
 &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;</code></pre><p><code>main.css</code>:</p><pre><code class="language-css">#page-container {
  position: relative;
  min-height: 100vh;
}

#content-wrap {
  padding-bottom: 2.5rem;    /* altura de pie de página */
}

#footer {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 2.5rem;            /* altura de pie de página */
}</code></pre><p>¿Qué es lo que está haciendo?</p><ul><li>El <code>page-container</code> va alrededor de todo lo que está en la página, y establece su altura a una mínima del 100% de la altura de la ventana(<code>vh</code>). Como es <code>relative</code>, sus elementos hijos pueden luego saetearse con una posición <code>absolute</code>.</li><li>El <code>content-wrap</code> tiene un relleno (padding) por debajo que es de la altura del pie de página, para asegurarnos que haya suficiente espacio para el pie de página dentro del contenedor donde ambos se encuentran. Un &nbsp;<code>div</code> que los envuelve todo el otro contenido de la página es usado aquí.</li><li>El <code>footer</code> es fijado con <code>absolute</code>, manteniéndolo al <code>bottom: 0</code> de la página <code>page-container</code> en la que se encuentra. Esto es importante, no es<code>absolute</code> con respecto a la ventana, pero se moverá para abajo si el <code>page-container</code> es más largo que la ventana. Como está definido, su altura, arbitrariamente fijada a &nbsp;<code>2.5rem</code>, es usada en el <code>content-wrap</code> arriba de la misma.</li></ul><p>Y ahí lo tienes. ¡Tu pie de página se quedará adonde esperas que lo haga!</p><h2 id="toques-finales">Toques finales</h2><p>Obvio, esto es CSS, así que no estaría completo sin tener algunas consideraciones sobre el UX en usuarios con teléfonos móviles, y un enfoque alternativo usando <code>min-height: 100%</code> envés de <code>100vh</code>. <a href="https://stackoverflow.com/questions/6654958/make-body-have-100-of-the-browser-height/38908284#38908284" rel="noopener">P</a>ero esto trae sus consecuencias.</p><p>También se puede usar Flexbox(con flex-grow) o Grid, ambos son muy poderosos.</p><p>Cuál método usas lo dejo a tu criterio, y a las especificaciones de tu diseño. Espero que el ejemplo de arriba y los links de arriba te ahorren tiempo en tomar una decisión e implementarla.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
