<?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[ Juan Bilardi - 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[ Juan Bilardi - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 15 Jun 2026 12:38:24 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/juan-bilardi/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Prototipo JavaScript explicado con ejemplos ]]>
                </title>
                <description>
                    <![CDATA[ Prototipos (Prototypes) JavaScript es un lenguaje basado en prototipos, por lo tanto entender el objeto  prototype es uno de los conceptos más importantes que los profesionales de JavaScript necesitan saber. Este artículo te dará una breve descripción del objeto prototype a través de varios ejemplos. Antes de leer este ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/prototipo-javascript-expliacado-con-ejemplos/</link>
                <guid isPermaLink="false">5feb5e1e8c7cd154bb9817ea</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Juan Bilardi ]]>
                </dc:creator>
                <pubDate>Tue, 13 Apr 2021 03:34:27 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1515850730971-68bc28d981d6-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="prototipos-prototypes-"><strong><strong><strong><strong>Protot</strong></strong></strong>i<strong><strong><strong>p</strong></strong></strong>o<strong><strong><strong>s</strong></strong></strong> (<strong><strong><strong>Prototypes</strong></strong></strong>)</strong></h2><p>JavaScript es un lenguaje basado en prototipos, por lo tanto entender el objeto <code>prototype</code> es uno de los conceptos más importantes que los profesionales de JavaScript necesitan saber. Este artículo te dará una breve descripción del objeto <code>prototype</code> a través de varios ejemplos. Antes de leer este artículo, deberás tener un entendimiento básico de la referencia <a href="https://guide.freecodecamp.org/src/pages/javascript/this-reference/index.md"><code>this</code></a> en JavaScript.</p><h3 id="objeto-prototype"><strong>Objeto <code>p<strong><strong><strong>rototype</strong></strong></strong></code></strong></h3><p>En honor a la claridad, vamos a examinar el siguiente ejemplo:</p><pre><code class="language-javascript">function Punto2D(x, y) {
  this.x = x;
  this.y = y;
}</code></pre><p>Al declararse la función <code>Punto2D</code>, una propiedad predeterminada llamada &nbsp;<code>prototype</code> será creada para ella (ten en cuenta que, en JavaScript, una función es también un objeto). La propiedad <code>prototype</code> es un objeto que contiene una propiedad <code>constructor</code> y su valor es la función <code>Punto2D</code>: <code>Punto2D.prototype.constructor = Punto2D</code>. Y cuando tú llamas a <code>Punto2D</code> con la palabra reservada <code>new</code>, <em>los objetos recién creados heredarán todas las propiedades de </em><code>Punto2D.prototype</code>. Para verificar esto, puedes agregar un método llamado <code>mover</code> en &nbsp;<code>Punto2D.prototype</code> de la siguiente manera:</p><pre><code class="language-javascript">Punto2D.prototype.mover  = function(dx, dy) {
  this.x += dx;
  this.y += dy;
}

var p1 = new Point2D(1, 2);
p1.mover (3, 4);
console.log(p1.x); // 4
console.log(p1.y); // 6</code></pre><p>El <code>Point2D.prototype</code> es llamado <strong>objeto prototipo</strong> o <strong>prototipo</strong> del objeto <code>p1</code> y de cualquier otro objeto creado con la sintaxis <code>new Point2D(...)</code> . Puedes agregar tantas propiedades al objeto <code>Point2D.prototype</code> como quieras. Lo que suele hacerse es declarar métodos en <code>Point2D.prototype</code> y otras propiedades se declararán en la función constructora.</p><p>Los objetos integrados en JavaScript se construyen de manera similar. Por ejemplo:</p><ul><li>El prototipo de los objetos creados con la sintaxis <code>new Object()</code> o <code>{}</code> es <code>Object.prototype</code></li><li>El prototipo de los arreglos creados con la sintaxis <code>new Array()</code> o <code>[]</code> es <code>Array.prototype</code></li><li>Y es igual con otros objetos integrados como <code>Date</code> y <code>RegExp</code>.</li></ul><p><code>Object.prototype</code> es heredado por todos los objetos y no tiene prototipo (su prototipo es <code>null</code>)</p><p><strong>Cadena de prototipos</strong></p><p>El mecanismo de la cadena del prototipo es simple: cuando accede a una propiedad <code>p</code> en el objeto <code>obj</code>, el motor de JavaScript buscará esta propiedad dentro del objeto <code>obj</code>. Si el motor falla en la búsqueda, continúa buscando en el prototipo de objeto <code>obj</code> y así sucesivamente hasta llegar a <code>Object.prototype</code>. Si finalizada la búsqueda no se ha encontrado nada, el resultado será <code>undefined</code>. Por ejemplo:</p><pre><code class="language-javascript">var obj1 = {
  a: 1,
  b: 2
};

var obj2 = Object.create(obj1);
obj2.a = 2;

console.log(obj2.a); // 2
console.log(obj2.b); // 2
console.log(obj2.c); // undefined</code></pre><p>En el fragmento de código anterior, la declaración <code>var obj2 = Object.create(obj1)</code> creará el objeto <code>obj2</code> con el objeto prototipo <code>obj1</code>. En otras palabras, <code>obj1</code> &nbsp;se convierte en el prototipo de <code>obj2</code> en lugar de <code>Object.prototype</code> por defecto. Como puedes ver, &nbsp;<code>b</code>no es una propiedad de <code>obj2</code>, pero puedes acceder a ella a través de la cadena de prototipos. Sin embargo, para la propiedad <code>c</code>, &nbsp;se obtiene un valor <code>undefined</code> porque no se puede encontrar en <code>obj1</code> y en <code>Object.prototype</code>.</p><p><strong>Clases</strong></p><p>En ES2016, ahora podemos usar la palabra clave <code>Class</code> , así como los métodos mencionados anteriormente para manipular el <code>prototype</code>. Las clases de JavaScript son atractivas para los desarrolladores con experiencia en programación orientada a objetos, pero esencialmente hace lo mismo que el anterior.</p><pre><code class="language-javascript">class Rectangle {
  constructor(height, width) {
    this.height = height
    this.width = width
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width
  }
}

const square = new Rectangle(10, 10)

console.log(square.area) // 100</code></pre><p>Esto es básicamente lo mismo que:</p><pre><code class="language-javascript">function Rectangle(height, width) {
  this.height = height
  this.width = width
}

Rectangle.prototype.calcArea = function calcArea() {
  return this.height * this.width
}</code></pre><p>Los métodos <code>getter</code> y <code>setter</code> en las clases vinculan una propiedad Object a una función que será llamada cuando se busque esa propiedad. Esto es solo azúcar sintáctico para ayudar a que sea más fácil buscar o establecer propiedades.</p><h2 id="m-s-informaci-n-sobre-prototipos-de-js-"><strong>Más información sobre prototipos de JS<strong>:</strong></strong></h2><ul><li><a href="https://www.freecodecamp.org/news/all-you-need-to-know-to-understand-javascripts-prototype-a2bff2d28f03/">Todo lo que necesitas saber para entender el prototipo de JavaScript</a></li></ul><p>Traducción del artículo - <strong><a href="https://www.freecodecamp.org/news/javascript-prototype-explained-with-examples/">JavaScript Prototype Explained with Examples</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Los fundamentos de Git explicados en cinco minutos ]]>
                </title>
                <description>
                    <![CDATA[ A medida que aprendas a convertirte en un desarrollador de software, te darás cuenta de que la mayoría del trabajo se hace en equipo. Y cuando estés en un equipo, necesitarás un sistema de control de versión para administrar los cambios a tu base de código que provienen de otros ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/los-fundamentos-de-git-explicados-en-cinco-minutos/</link>
                <guid isPermaLink="false">5fdb6ec08c7cd154bb978cbb</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Juan Bilardi ]]>
                </dc:creator>
                <pubDate>Thu, 07 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1486312338219-ce68d2c6f44d.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>A medida que aprendas a convertirte en un desarrollador de software, te darás cuenta de que la mayoría del trabajo se hace en equipo. Y cuando estés en un equipo, necesitarás un sistema de control de versión para administrar los cambios a tu base de código que provienen de otros desarrolladores.</p><p>Git es uno de los sistemas de control de versión más populares. Sin embargo, los nuevos desarrolladores pueden sentirse abrumados fácilmente al usarlo, lo sé pues así me sentí yo. De hecho, lo evité por años.</p><p>Si eres un desarrollador experimentado o no tiemblas ante la mención de Git, siéntete libre de pasar a la siguiente publicación. Sin embargo, si eres nuevo en Git o no te sientes seguro usándolo, tómate unos minutos para aprender estos consejos básicos - pero poderosos - de Git.</p><p>Estos es lo que cubriremos:</p><ol><li>Git clone</li><li>Git checkout</li><li>Git pull</li><li>Git add and commit</li><li>Git stash and merge</li><li>Git push</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/3w5y2tx33BATBrRgxW4zIBYU9syzS0riLfIg" class="kg-image" alt="3w5y2tx33BATBrRgxW4zIBYU9syzS0riLfIg" width="800" height="649" loading="lazy"><figcaption>Captura de pantalla de mi viejo repositorio old-apple en Github</figcaption></figure><h3 id="git-clone"><strong><strong><strong>Git clone</strong></strong></strong></h3><p> siempre clona los nuevos repositorios en los que trabajes, lo que significa descargar una copia de los archivos del repositorio en tu computadora. Si bien hay muchas formas de clonar un repositorio, explicaré cómo hacerlo desde la línea de comandos.</p><p>Por ejemplo, si deseas clonar el repositorio mencionado previamente, primero copea el enlace de la parte superior. Luego, abre tu terminal, y cambia de directorio utilizando el comando <code>cd</code> a la ubicación en tu computadora dónde deseas colocar estos archivos - <code>$ cd &lt;nombre-de-carpeta&gt;</code> . Escribe <code>git clone</code> y luego pega el enlace como se muestra a continuación si deseas clonar la rama maestra.</p><p><code>git clone <a href="https://github.com/JamesOkunlade/old-apple.git" rel="noopener">https://github.com/JamesOkunlade/old-apple.git</a></code></p><p>Si tu quieres clonar una rama en particular de este repositorio, querrás hacer algo como esto:</p><p><code>git clone <a href="https://github.com/JamesOkunlade/old-apple.git" rel="noopener">https://github.com/JamesOkunlade/old-apple.git</a> -b branch-name</code></p><h3 id="git-checkout"><strong><strong><strong>Git checkout</strong></strong></strong></h3><p>Es una buena práctica crear diferentes ramas para diferentes funciones en lugar de trabajar directamente en la rama maestra. Cuando se ha considerado que todas las funciones pasan ciertas pruebas y cumplen determinados requisitos, puedes fusionarlas en la rama maestra.</p><p>En diferentes momentos, tendrás que cambiar a la rama del repositorio en la que quieres trabajar y puedes hacerlo con el siguiente comando.</p><p>Si la rama ya ha sido creada:</p><p><code>git checkout branch-name</code></p><p>Y si simplemente estás creando la nueva rama de funcionalidad:</p><p><code>git checkout -b branch-name</code></p><h3 id="git-pull"><strong><strong><strong>Git pull</strong></strong></strong></h3><p>Tu equipo o compañero de programación cambiarán diferentes ramas de un repositorio, y tu deberías siempre recibir estos nuevos cambios antes de comenzar a escribir código. En tu terminal, ve a la rama en la que estarás trabajando y ejecuta el comando <code>git pull</code>. Los cambios más recientes serán descargados a tu repositorio local.</p><h3 id="git-add-and-commit"><strong><strong><strong>Git add and commit</strong></strong></strong></h3><p>Los comandos add y commit de Git casi siempre se usan juntos. &nbsp;Piensa en ellos como capturar y guardar. Tu no puedes guardar algo si no lo has capturado primero. Por lo tanto, el comando add siempre debe preceder al comando commit. Mientras que tu usas el comando add para apuntar al archivo en particular que quieres capturar en su estado actual, usas el comando commit para guardar una copia de lo que has capturado.</p><p>Para capturar todos los archivos (con excepción de aquellos excluidos por Git ignore), deberás usar el comando<code>git add .</code> y para capturar el estado actual de un archivo en particular, digamos index.html, deberás escribir <code>git add index.html</code></p><p>Luego de capturar el estado actual de tu proyecto, deberás hacer un commit y guardar tus capturas en el repositorio local usando el siguiente comando:</p><p><code>git commit -m ‘commit message’</code></p><p>El mensaje de commit debería explicar la carácterística destacada de la captura que estás guardando. Por ejemplo:</p><p><code>git add index.html</code></p><p><code>git commit -m ‘el botón de función de formulario creado’</code></p><p>Puedes combinarlos usando el operador &amp;&amp; como te muestro a continuación:</p><p><code>git add index.html &amp;&amp; git commit -m ‘footer html structure created’</code></p><h3 id="git-stash-and-merge"><strong><strong><strong>Git stash and merge</strong></strong></strong></h3><p>Con solo hacer un <code>git stash</code> guardarás cualquier edición que hayas hecho en tu rama pero que no quieras capturar con un commit. Eso significa que cuando esperas el commit y push de la copia de código de otro desarrollador, puedes experimentar en esa misma rama. Git lo alienta. Siempre que estés listo para hacer un pull de nuevos cambios a tu repositorio local, pero no quieras hacer un merge de tus cambios en él, debes entonces hacer un stash de tus cambios. Git stash mantendrá una copia en otra parte para tí y será accesible con solo hacer un <code>git stash list</code>. </p><p>El <code>git merge</code> es un comando que combina dos capturas diferentes. Puede combinar deferentes capturas de la misma rama creadas por desarrolladores diferentes o fusionar diferentes capturas de diferentes ramas.</p><p>Cuando hayas hecho un checkout a la rama master, <code>git merge development</code> unirá la rama development a tu rama master y vice versa.</p><h3 id="git-push"><strong><strong><strong>Git push</strong></strong></strong></h3><p>Al igual que cuando guardas tus fotografías en un álbum de Google Photos para quien comparta ese álbum pueda verlas, piensa en git push como enviar tu repositorio local al repositorio remoto para que otros puedan acceder a él.</p><p><code>git push -u origin branch-name</code></p><p>Mientras que hay otros comandos de Git disponibles, es interesante lo que puedes lograr con dominar los pocos que he cubierto en este artículo.</p><p>No dudes en contactarme y hacerme cualquier pregunta en Twitter.</p><p><a href="https://twitter.com/JamesOkunlade" rel="noopener"><strong><strong>James Okunlade (@JamesOkunlade) | Twitter</strong></strong></a><br><a href="https://twitter.com/JamesOkunlade" rel="noopener"><em>L</em></a><em>os últimos Tweets de JamesOkunlade</em><a href="https://twitter.com/JamesOkunlade" rel="noopener"><em><em> (@JamesOkunlade). Full-stack SWE | JavaScript/React/Redux | Ruby/Ruby on Rails |…</em></em>twitter.com</a></p><p><em><a href="https://www.linkedin.com/in/james-okunlade-4a4502121/"><em> James Okunlade</em> - Software Developer - Filmdrive|<em> LinkedIn</em></a></em></p><p>Traducido del artículo de <strong><strong>James Okunlade - </strong><a href="https://www.freecodecamp.org/news/the-essentials-of-git-explained-in-five-minutes-d554019eded9/">The essentials of Git explained in five minutes</a></strong><br></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Qué es una función Callback en Javascript? ]]>
                </title>
                <description>
                    <![CDATA[ Este artículo da una breve introducción al concepto y uso de las funciones callback en el lenguaje de programación Javascript. Las Funciones son Objetos Lo primero que tenemos que saber es que en Javascript, las funciones son objetos de primera clase. Como tales, podemos trabajar con ellos de la misma ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/que-es-una-funcion-callback-javascript/</link>
                <guid isPermaLink="false">5fdf5c418c7cd154bb97bb26</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Juan Bilardi ]]>
                </dc:creator>
                <pubDate>Tue, 05 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1493836692373-ad82dc8644c3.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Este artículo da una breve introducción al concepto y uso de las funciones callback en el lenguaje de programación Javascript.</p><h2 id="las-funciones-son-objetos"><strong><strong>Las Funciones son Objetos</strong></strong></h2><p>Lo primero que tenemos que saber es que en Javascript, las funciones son objetos de primera clase. Como tales, podemos trabajar con ellos de la misma forma que trabajamos con otros objetos, como asignarlos a variables y pasarlos como argumentos a otras funciones. Esto es importante, porque esta última técnica nos permite ampliar la funcionalidad de nuestras aplicaciones.</p><h2 id="funciones-callback"><strong><strong>Funciones <strong><strong>Callback</strong></strong></strong></strong></h2><p>Una <strong>función callback</strong> es aquella que es pasada como <em>argumento </em>a otra función para que sea "llamada de nuevo" (call back) en un momento posterior. Una función que acepta otras funciones como argumentos es llamada función de <strong>orden-superior </strong>(High-Order), y contiene la lógica para determinar <em>cuándo </em>se ejecuta la función callback. Es la combinación de estas dos la que nos permite ampliar nuestra funcionalidad.</p><p>Para ilustrar las funciones callback, iniciemos con un ejemplo simple:</p><pre><code class="language-javascript">function crearCita(cita, callback){ 
  var miCita = "Como yo siempre digo, " + cita;
  callback(miCita); // 2
}

function logCita(cita){
  console.log(cita);
}

crearCita("come tus vegetales!", logCita); // 1

// Resultado en la consola: 
// Como yo siempre digo, come tus vegetales!</code></pre><p>En el ejemplo anterior, <code>crearCita</code> es la función de orden-superior, la cual acepta dos argumentos, el segundo es el callback. La función <code>logCita</code> se está pasando como nuestra función callback. Cuando ejecutamos la función &nbsp;<code>crearCita</code> &nbsp;<em>(1), </em>observa que <em>no estamos agregando</em> paréntesis a <code>logCita</code> al pasarla como argumento. Esto se debe a que no queremos ejecutar nuestra función callback de inmediato, simplemente queremos pasar la definición de la función a la función de orden-superior para que pueda ejecutarse más tarde.</p><p>Además, debemos asegurarnos que si la función callback que pasamos espera argumentos, debemos proporcionarlos al ejecutarla <em>(2)</em>. En el ejemplo anterior, eso sería la declaración <code>callback(miCita);</code> ya que sabemos que <code>logCita</code> &nbsp;espera que se pase una cita.</p><p>Además, podemos pasar funciones anónimas como callbacks. La siguiente llamada a <code>crearCita</code> &nbsp;tendrá el mismo resultado que el ejemplo anterior:</p><pre><code class="language-javascript">crearCita("come tus vegetales!", function(cita){ 
  console.log(cita); 
});</code></pre><p>Por cierto, tu <em>no estás obligado</em> a usar la palabra "callback" como el nombre de tu argumento, Javascript solo necesita saber que es el nombre correcto del argumento. Según el ejemplo anterior, la siguiente función se comportará exactamente de la misma manera.</p><pre><code class="language-javascript">function crearCita(cita, funcionParaLlamar) { 
  var miCita = "como siempre digo, " + cita;
  funcionParaLlamar(miCita);
}</code></pre><h2 id="-por-qu-usar-funciones-callback"><strong>¿Por qué usar funciones Callback?</strong></h2><p>La mayoría del tiempo estamos creando programas y aplicaciones que operan en una forma <strong>sincrónica</strong>. En otras palabras, algunos de nuestra operaciones comienzan solo después de que se hayan completado las anteriores. Usualmente, cuando solicitamos datos desde otras fuentes como una API externa, no siempre sabemos <em>cuando</em> nuestros datos serán devueltos. En estos casos queremos esperar la respuesta, pero no queremos que toda nuestra aplicación se detenga mientras se recuperan los datos. Estas son situaciones dónde las funciones callback resultan útiles.</p><p>Veamos un ejemplo que simula una solicitud a un servidor:</p><pre><code class="language-javascript">function solicitudServidor(consulta, callback){
  setTimeout(function(){
    var respuesta = consulta + "lleno!";
    callback(respuesta);
  },5000);
}

function obtenerResultados(resultados){
  console.log("Respuesta del servidor: " + resultados);
}

solicitudServidor("El vaso está medio  ", obtenerResultados);

//Resultado en la consola luego de 5 segundos:
// El vaso está medio lleno!</code></pre><p>En el ejemplo anterior hacemos una solicitud simulada al servidor. Después de que pasen cinco segundos, la respuesta es modificada y luego nuestra función callback &nbsp; <code>obtenerResultados</code> se ejecuta. Para ver esto en acción, puedes copiar / pegar el código anterior en las herramientas de desarrollador de tu navegador y ejecutarlo.</p><p>Además, si ya estás familiarizado con la función <code>setTimeout</code>, entonces has estado usando funciones callback todo el tiempo. El argumento de función anónima pasado a la llamada de la función <code>setTimeout</code> en el ejemplo anterior ¡también es un callback! Entonces la función callback del ejemplo es en realidad ejecutada por otro callback. Ten cuidado de no anidar demasiadas funciones callback si puedes evitarlo, ya que esto puede llevar a algo llamado "infierno de callbacks". Como su nombre lo indica, no es un placer lidiar con él.</p><p>Traducido del artículo - <strong><a href="https://www.freecodecamp.org/news/what-is-a-callback-function-in-javascript/">What is a Callback Function in JavaScript?</a></strong></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
