<?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[ Michael M. Liendo - 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[ Michael M. Liendo - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 13 May 2026 20:04:25 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/michael/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo hacer un NFT en 14 líneas de código ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por: Nico [https://www.freecodecamp.org/news/author/nicoinmeatworld/]  Artículo original: How to Make an NFT in 14 Lines of Code [https://www.freecodecamp.org/news/how-to-make-an-nft/] Traducido y adaptado por: Michael Liendo [https://michaelliendo.com] Si eres un desarrollador interesado en el desarrollo de Blockchain, debes saber algo sobre los NFT o tokens no fungibles. Entonces, en este ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-hacer-una-nft-en-14-lineas-de-codigo/</link>
                <guid isPermaLink="false">6250dd339a87f708bdd1097e</guid>
                
                    <category>
                        <![CDATA[ blockchain ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael M. Liendo ]]>
                </dc:creator>
                <pubDate>Wed, 27 Apr 2022 02:04:05 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/04/Como-hacer-un-NFT-en.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong>Artículo original escrito por:</strong> <a href="https://www.freecodecamp.org/news/author/nicoinmeatworld/">Nico</a> <br><strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-make-an-nft/">How to Make an NFT in 14 Lines of Code</a><br><strong>Traducido y adaptado por:</strong> <a href="https://michaelliendo.com">Michael Liendo</a></p><p>Si eres un desarrollador interesado en el desarrollo de Blockchain, debes saber algo sobre los NFT o tokens no fungibles. Entonces, en este artículo, aprenderemos sobre la ingeniería detrás de ellos para que puedas comenzar a construir el tuyo propio.</p><p>Al final del proyecto, tendras tu propia billetera Ethereum con un nuevo NFT. Este tutorial es apto para principiantes y no requiere ningún conocimiento previo de la red Ethereum o contratos inteligentes.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-46.png" class="kg-image" alt="image-46" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-46.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/04/image-46.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-46.png 1112w" width="600" height="400" loading="lazy"><figcaption>El contrato NFT solo tiene 14 líneas de código</figcaption></figure><h2 id="-qu-es-un-nft">¿Qué es un NFT?</h2><p><strong>NFT </strong>significa <strong>t</strong>oken <strong>n</strong>o-<strong>f</strong>ungible. Está cita de <a href="https://ethereum.org/en/nft/">ethereum.org</a> explica esto:</p><!--kg-card-begin: markdown--><blockquote>
<p>Los NFTs son tokens que podemos usar para representar la propiedad de varios articulos únicos.<br>
Ellos nos dejan tokenisar arte, coleccionables, incluso bienes raíces.<br>
Ellos pueden tener un solo dueño a la vez, y está asegurado por la blockchain de Ethereum.<br>
Nadie puede modificar el registro del dueño o copiar/pegar un nuevo NFT para que exista.</p>
</blockquote>
<!--kg-card-end: markdown--><h2 id="-qu-es-un-est-ndar-de-un-nft-o-erc-721">¿Qué es un estándar de un NFT o ERC-721?</h2><p>El ERC-721 es el estándar NFT más común. Si tu contrato inteligente implementa ciertos métodos API estandarizados, puede denominarse contrato de token no fungible ERC-721.</p><p>Estos métodos se especifican en el EIP-721. Los proyectos de código abierto como OpenZeppelin han simplificado el proceso de desarrollo al implementar los estándares ERC más comunes como una biblioteca reutilizable.</p><h2 id="-qu-es-minar-un-nft">¿Qué es minar un NFT?</h2><p>Al acuñar un NFT, publica un token único en una cadena de bloques. Este token es una instancia de su contrato inteligente.</p><p>Cada token tiene un tokenURI único, que contiene metadatos de su activo en un archivo JSON que se ajusta a cierto esquema. Los metadatos es donde almacena información sobre su NFT, como nombre, imagen, descripción y otros atributos.</p><p>Un ejemplo del archivo JSON para el "Esquema de metadatos ERC721" se ve así:</p><!--kg-card-begin: markdown--><pre><code class="language-js">{
	"attributes": [
		{
			"trait_type": "Shape",
			"value": "Circle"
		},
		{
			"trait_type": "Mood",
			"value": "Sad"
		}
	],
	"description": "A sad circle.",
	"image": "https://i.imgur.com/Qkw9N0A.jpeg",
	"name": "Sad Circle"
}
</code></pre>
<!--kg-card-end: markdown--><h2 id="-c-mo-almaceno-los-metadatos-de-mi-nft">¿Cómo almaceno los metadatos de mi NFT?</h2><p>Hay tres maneras para almacenar los metadatos del NFT</p><p>Primero, puedes almacenar la información en la cadena. En otras palabras, puedes ampliar su ERC-721 y almacenar los metadatos en la cadena de bloques, lo que puede resultar costoso.</p><p>El segundo método es usar IPFS. &nbsp;</p><p>Y la tercera forma es simplemente hacer que tu API devuelva el archivo JSON.</p><p>Por lo general, se prefieren los métodos primero y segundo, ya que no puedes modificar el archivo JSON subyacente. &nbsp;Para el alcance de este proyecto, optaremos por el tercer método.</p><h2 id="lo-que-estaremos-construyendo">Lo que estaremos construyendo</h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/nft.png" class="kg-image" alt="nft" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/nft.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/nft.png 1000w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><p>En este tutorial, crearemos y acuñaremos nuestro propio NFT. &nbsp;Es apto para principiantes y no requiere ningún conocimiento previo de la red Ethereum o contratos inteligentes. &nbsp;Aún así, tener una buena comprensión de esos conceptos lo ayudará a comprender lo que sucede detrás de escena.</p><p>En un próximo tutorial, crearemos una aplicación web React completamente funcional donde puede mostrar y vender sus NFT.</p><p>Este proyecto está escrito intencionalmente con un código fácilmente comprensible y no es adecuado para su uso en producción.</p><h2 id="requisitos-previos">Requisitos Previos</h2><h3 id="metamask">MetaMask </h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image.png 1000w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><p>Necesitamos una dirección de Ethereum para interactuar con nuestro contrato inteligente. &nbsp;Usaremos <a href="https://metamask.io/">Metamask</a> como nuestra billetera. &nbsp;Es una billetera virtual gratuita que administra sus direcciones de Ethereum. Lo necesitaremos para enviar y recibir transacciones (lea más sobre eso <a href="https://ethereum.org/en/developers/docs/transactions/">aquí</a>). &nbsp;Por ejemplo, acuñar un NFT es una transacción. </p><p>Descarga su extensión de Chrome y su aplicación móvil. &nbsp;Necesitaremos ambos ya que la extensión de Chrome no muestra sus NFT.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-1.png" class="kg-image" alt="image-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-1.png 680w" width="600" height="400" loading="lazy"></figure><p>Asegúrate de cambiar la red a "Ropsten Test Network" para fines de desarrollo. &nbsp;Necesitarás algo de Eth para cubrir las tarifas de implementación y acuñación de tu NFT. &nbsp;Dirígete a <a href="https://faucet.ropsten.be/">Ropsten Ethereum Faucet</a> e ingresa tu dirección. &nbsp;Pronto deberías ver algunos Eth de prueba en tu cuenta de Metamask.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-2.png" class="kg-image" alt="image-2" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-2.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-2.png 1000w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><h3 id="alchemy">Alchemy</h3><p>Para interactuar con la red Ethereum, deberás estar conectado a un nodo Ethereum. </p><p>Ejecutar tu propio Nodo y mantener la infraestructura es un proyecto en sí mismo. Afortunadamente, existen proveedores de nodos como servicio que alojan la infraestructura por usted. &nbsp;Hay muchas opciones como Infura, BlockDaemon y Moralis. &nbsp;Usaremos <a href="https://www.alchemy.com/">Alchemy</a> como nuestro proveedor de nodos. </p><p>Dirígete a su sitio web, crea una cuenta, elige Ethereum como tu red y crea tu aplicación. &nbsp;Elige Ropsten como tu red.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-3.png" class="kg-image" alt="image-3" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-3.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-3.png 1000w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><p>En su tablero, haz clic en "ver detalles" en su aplicación, luego haz clic en "ver clave". &nbsp;Guarda tu clave http en algún lugar, ya que la necesitaremos más adelante.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-4.png" class="kg-image" alt="image-4" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/04/image-4.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/04/image-4.png 1000w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><h3 id="nodejs-npm">NodeJS/NPM</h3><p>Nosotros usaremos Node.js para este proyecto. Si no lo tienes instalado sigue este <a href="https://www.freecodecamp.org/news/how-to-install-node-in-your-machines-macos-linux-windows/">simple tutorial de freeCodeCamp</a></p><h2 id="iniciamos-el-proyecto">Iniciamos el proyecto</h2><p>En tu terminal, ejecuta este comando para crear un nuevo directorio para tu proyecto</p><pre><code>mkdir nft-project
cd nft-project</code></pre><p>Ahora, haremos otro directorio, <code>ethereum/</code>, dentro de <code>nft-project/</code>, y inicializamos con <a href="https://hardhat.org/getting-started/">Hardhat</a>. Hardhat es una herramienta de desarrollo que facilita la implementación y prueba de su software Ethereum.</p><pre><code>mkdir ethereum
cd ethereum
npm init
</code></pre><p>Contesta las preguntas como quieras. &nbsp;Luego, ejecuta esos comandos para hacer un proyecto Hardhat:</p><pre><code>npm install --save-dev hardhat
npx hardhat</code></pre><p>Verás este mensaje:</p><pre><code>888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888

Welcome to Hardhat v2.0.8

? What do you want to do? …
  Create a sample project
❯ Create an empty hardhat.config.js
  Quit</code></pre><p>Selecciona crear un hardhat.config.js vacío. &nbsp;Esto generará un archivo hardhat.config.js vacío que luego actualizaremos.</p><p>Para la aplicación web, usaremos <a href="https://nextjs.org/docs/getting-started">Next.js</a> para inicializar una aplicación web completamente funcional. &nbsp;Vuelve al directorio raíz <code>nft-project/</code> e inicializa una aplicación estándar de Next.js llamada web:</p><pre><code>cd ..
mkdir web
cd web
npx create-next-app@latest</code></pre><p>Tu proyecto ahora se ve así:</p><pre><code>nft-project/
	ethereum/
	web/</code></pre><p>¡Impresionante! &nbsp;Estamos listos para sumergirnos en la codificación real.</p><h2 id="c-mo-definir-nuestras-variables-env">Cómo definir nuestras variables .env</h2><p>¿Recuerdas la clave de Alchemy que tomamos de nuestro proyecto de prueba anterior? &nbsp;Lo usaremos junto con las claves públicas y privadas de nuestra cuenta Metamask para interactuar con la cadena de bloques.</p><p>Ejecuta los siguientes comandos, crea un archivo llamado <code>.env</code> dentro de tu directorio `/ethereum` instala <a href="https://www.npmjs.com/package/dotenv">dotenv</a>. &nbsp;Los usaremos más tarde</p><pre><code>cd ..
cd ethereum
touch .env
npm install dotenv --save</code></pre><p>Para tu archivo <code>.env</code>, ingresa la clave que has exportado de Alchemy y sigue estas instrucciones para obtener la clave privada de tu Metamask.</p><p>Aquí está tu archivo <code>.env</code>:</p><pre><code>DEV_API_URL = YOUR_ALCHEMY_KEY
PRIVATE_KEY = YOUR_METAMASK_PRIVATE_KEY
PUBLIC_KEY = YOUR_METAMASK_ADDRESS</code></pre><h2 id="el-contrato-inteligente-para-nft">El contrato inteligente para NFT</h2><p>Ve a la <code>ethereum/</code>carpeta y crea dos directorios más: contratos y scripts. <a href="https://hardhat.org/guides/project-setup.html">Un proyecto de casco simple </a>contiene esas carpetas.</p><ul><li><code>contracts/</code>contiene los archivos fuente de sus contratos</li><li><code>scripts/</code>contiene los scripts para implementar y acuñar nuestros NFT</li></ul><pre><code>mkdir contracts
mkdir scripts
</code></pre><p>Luego, instala OpenZeppelin. <a href="https://docs.openzeppelin.com/contracts/4.x/">OpenZeppelin Contract </a>es una biblioteca de código abierto con código reutilizable probado previamente para facilitar el desarrollo de contratos inteligentes.</p><pre><code>npm install @openzeppelin/contracts</code></pre><p>Finalmente, escribiremos el contrato inteligente para nuestro NFT. &nbsp;Navega a tu directorio de contratos y cree un archivo titulado <code>EmotionalShapes.sol</code>. &nbsp;Puedes nombrar tus NFT como mejor le parezca.</p><p>Los <code>.sol</code>La extensión hace referencia al lenguaje Solidity, que es el que usaremos para programar nuestro Smart Contract. &nbsp;Solo escribiremos 14 líneas de código con Solidity, así que no te preocupes si no lo has visto antes.</p><p>Comienza con <a href="https://ethereum.org/en/developers/docs/smart-contracts/languages/">este artículo </a>para obtener más información sobre los lenguajes de contratos inteligentes. También puedes saltar directamente a esta <a href="https://reference.auditless.com/cheatsheet/">hoja de trucos de </a>que contiene la sintaxis principal.</p><pre><code>cd contracts
touch EmotionalShapes.sol</code></pre><p>Este es nuestro contrato inteligente:</p><pre><code class="language-solidity">// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract EmotionalShapes is ERC721 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("EmotionalShapes", "ESS") {}

    function _baseURI() internal pure override returns (string memory) {
        return "YOUR_API_URL/api/erc721/";
    }

    function mint(address to)
        public returns (uint256)
    {
        require(_tokenIdCounter.current() &lt; 3); 
        _tokenIdCounter.increment();
        _safeMint(to, _tokenIdCounter.current());

        return _tokenIdCounter.current();
    }
}
</code></pre><p>Repasemos el código y entendamos lo que está pasando. </p><ol><li>En la parte superior del archivo, especificamos qué módulo de OpenZeppelin importar. &nbsp;Necesitamos el contrato ERC721 ya que es la 'base' de nuestro contrato inteligente. &nbsp;Ya ha implementado todos los métodos especificados en EIP-721 para que podamos usarlo de manera segura.</li><li>Un contador es útil para generar identificadores incrementales para nuestros NFT. &nbsp;Nombramos la variable <code>_tokenIdCounter</code></li><li>En el constructor, inicializamos nuestro ERC721 con su nombre y su símbolo. &nbsp;Elegí EmotionalShapes y ESS.</li><li>Anulamos la función <code>_baseURI</code> predeterminada al devolver la nuestra. Llegaremos a construir eso en un segundo. &nbsp;En resumen, es la URL que se agregará como 'prefijo' a todos nuestros tokenURI. &nbsp;En el ejemplo anterior, los metadatos de nuestras NFT vivirán en un archivo JSON en <code><a href="https://e110-99-121-58-31.ngrok.io/api/erc721/">YOUR_API_URL/api/erc721/1</a></code>.</li><li>Implementamos la función 'mint'. Es la función que le permite publicar una instancia de este contrato inteligente en la cadena de bloques. &nbsp;Requiero el <code>_tokenIdCounter</code>variable sea inferior a 3, ya que solo crearé tres instancias de mi NFT. &nbsp;Puede eliminar eso si desea acuñar más.</li><li>Finalmente, dentro de la función mint, incrementamos el <code>_tokenIdCounter</code>variable por 1, por lo que nuestro id será 1, seguido de 2, seguido de 3. Luego, llamamos a la función proporcionada por OpenZeppelin <code>_safeMint</code>para publicar el token.</li></ol><p>No te preocupes si te sientes perdido. &nbsp;Puedes asistir a un taller dirigido por voluntarios de freeCodeCamp, donde invitamos a desarrolladores de niveles de habilidad similares para construir cosas juntos, incluido este proyecto NFT.</p><p>Los eventos son gratuitos y a distancia, por lo que puedes consultar cualquier duda directamente. Puedes registrarte <a href="https://equia.io">aquí </a>. Los asientos son limitados, por lo que se te invitará a los próximos eventos disponibles.</p><h2 id="c-mo-construir-los-metadatos-para-nuestro-nft">Cómo construir los metadatos para nuestro NFT</h2><p>Como se mencionó anteriormente, hay tres formas principales de almacenar su tokenURI. &nbsp;Construiremos un punto final de API simple que se resolverá en la información de nuestro NFT como JSON.</p><p>Nuestro proyecto Next.js nos brinda una forma práctica de desarrollar rutas de API. &nbsp;Ve a la <code>web/</code>carpeta, busque la <code>api/</code> carpeta dentro de la <code>pages/</code>carpeta, y hacer nuestra dinámica <code>[id].js</code>ruta en un <code>erc721/</code> carpeta (lee más sobre el enrutamiento <a href="https://www.freecodecamp.org/news/p/18513919-9e93-4ab3-9f52-2448aafa8835/develop%20API%20routes">aquí </a>):</p><pre><code class="language-javascript">// web/pages/api/erc721/[id].js

const metadata = {
  1: {
    attributes: [
      {
        trait_type: "Shape",
        value: "Circle",
      },
      {
        trait_type: "Mood",
        value: "Sad",
      },
    ],
    description: "A sad circle.",
    image: "https://i.imgur.com/Qkw9N0A.jpeg",
    name: "Sad Circle",
  },
  2: {
    attributes: [
      {
        trait_type: "Shape",
        value: "Rectangle",
      },
      {
        trait_type: "Mood",
        value: "Angry",
      },
    ],
    description: "An angry rectangle.",
    image: "https://i.imgur.com/SMneO6k.jpeg",
    name: "Angry Rectangle",
  },
  3: {
    attributes: [
      {
        trait_type: "Shape",
        value: "Triangle",
      },
      {
        trait_type: "Mood",
        value: "Bored",
      },
    ],
    description: "An bored triangle.",
    image: "https://i.imgur.com/hMVRFoJ.jpeg",
    name: "Bored Triangle",
  },
};

export default function handler(req, res) {
  res.status(200).json(metadata[req.query.id] || {});
}</code></pre><p>Por el bien de este proyecto, hice que el código fuera lo más comprensible posible. &nbsp;Esto definitivamente no es adecuado para la producción (no use una URL de Imgur para su NFT). &nbsp;Asegúrese de definir los metadatos para todos los NFT que pretende acuñar.</p><p>Ahora, vaya al directorio web e inicie su aplicación Next.js con este comando:</p><pre><code>npm run dev</code></pre><p>Tu aplicación debería estar ejecutándose en localhost:3000. Para asegurarse de que nuestro punto final funcione, vaya a <a href="http://localhost:3000/api/erc721/1">http://localhost:3000/api/erc721/1 </a>y debería resolverse con un objeto JSON de los metadatos de su primer NFT.</p><h2 id="c-mo-exponer-los-metadatos-para-nuestro-nft">Cómo exponer los metadatos para nuestro NFT</h2><p>Dado que tu aplicación está alojada localmente, otras aplicaciones no pueden acceder a ella. Usando una herramienta como <a href="https://ngrok.com/">ngrok </a>, podemos exponer nuestro host local a una URL de acceso público.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-39.png" class="kg-image" alt="imagen-39" width="600" height="400" loading="lazy"></figure><ol><li>Ve a <a href="https://ngrok.com/">ngrok.com </a>y complete el proceso de registro</li><li>Descomprimir el paquete descargado</li><li>En tu terminal, asegúrete de ingresar a la carpeta donde descomprimió su paquete ngrok</li><li>Sigue las instrucciones en tu tablero y ejecuta</li></ol><pre><code>./ngrok authtoken YOUR_AUTH_TOKEN</code></pre><p>5. Luego, ejecuta este comando para crear un túnel a tu aplicación web alojada en localhost:3000</p><pre><code>./ngrok http 3000</code></pre><p>6. ¡Ya casi llegas! &nbsp;En tu terminal, deberías ver algo como esto:</p><pre><code>ngrok by @inconshreveable                                                                            (Ctrl+C to quit)
                                                                                                                     
Session Status                online                                                                                 
Account                       YOUR_ACCOUNT (Plan: Free)                                                                       
Version                       2.3.40                                                                                 
Region                        United States (us)                                                                     
Web Interface                 http://127.0.0.1:4040                                                                  
Forwarding                    http://YOUR_NGROK_ADDRESS -&gt; http://localhost:3000                             
Forwarding                    https://YOUR_NGROK_ADDRESS -&gt; http://localhost:3000                             </code></pre><p>Ir a <code>YOUR_NGROK_ADDRESS/api/erc721/1</code>para asegurarse de que su terminal funcione correctamente.</p><h2 id="c-mo-implementar-nuestro-nft">Cómo implementar nuestro NFT</h2><p>Ahora que hemos hecho todo el trabajo preliminar (oof), volvamos a nuestro <code>ethereum/</code>carpeta y prepárate para implementar nuestro NFT.</p><p>Cambiar el <code>_baseURI</code>funcionar en su <code>ethreum/contracts/YOUR_NFT_NAME.sol</code>archivo <em> </em>para devolver su dirección ngrok.</p><pre><code>// ethereum/conrtacts/EmotionalShapes.sol

contract EmotionalShapes is ERC721 {
...
	function _baseURI() internal pure override returns (string memory) {
		return "https://YOUR_NGROK_ADDRESS/api/erc721/";
	}
...
}</code></pre><p>Para implementar nuestro NFT, primero necesitaremos <a href="https://hardhat.org/guides/compile-contracts.html">compilarlo usando Hardhat </a>. Para facilitar el proceso, instalaremos <a href="https://docs.ethers.io/v5/">ethers.js </a>.</p><pre><code>npm install @nomiclabs/hardhat-ethers --save-dev</code></pre><p>Actualicemos nuestro hardhat.config.js:</p><pre><code>require("dotenv").config();
require("@nomiclabs/hardhat-ethers");

module.exports = {
  solidity: "0.8.0",
  defaultNetwork: "ropsten",
  networks: {
    hardhat: {},
    ropsten: {
      url: process.env.DEV_API_URL,
      accounts: [`0x${process.env.PRIVATE_KEY}`],
    },
  },
};
</code></pre><p>Para obtener más información sobre el archivo de configuración del casco, consulte su <a href="https://hardhat.org/config/">documentación</a>. Hemos configurado la red ropsten con nuestra URL de Alchemy y le hemos proporcionado la clave privada de su cuenta metamask.</p><p>Finalmente, ejecuta:</p><pre><code>npx hardhat compile</code></pre><p>Esto permite que hardhat genere dos archivos por contrato compilado. &nbsp;Deberíamos ver una recién creada <code>artifacts/</code> carpeta que contiene sus contratos compilados en el <code>contracts/</code>carpeta. Para obtener más información sobre cómo funciona, lea <a href="https://hardhat.org/guides/compile-contracts.html">este tutorial </a>del equipo de Hardhat.</p><p>Ahora, escribamos un script para implementar finalmente nuestro NFT en la red de prueba. &nbsp;En tus <code>scripts/</code>carpeta, cree un archivo llamado <code>deploy.js</code>.</p><pre><code class="language-javascript">// ethereum/scripts/deploy.js

async function main() {
  const EmotionalShapes = await ethers.getContractFactory("EmotionalShapes");
  const emotionalShapes = await EmotionalShapes.deploy();

  console.log("EmotionalShapes deployed:", emotionalShapes.address);
}

main()
  .then(() =&gt; process.exit(0))
  .catch((error) =&gt; {
    console.error(error);
    process.exit(1);
  });
</code></pre><p>Este código está inspirado en <a href="https://hardhat.org/guides/deploying.html">el tutorial de implementación </a>.</p><blockquote>A <code>ContractFactory</code>en ethers.js es una abstracción utilizada para implementar nuevos contratos inteligentes, por lo que <code>EmotionalShapes</code>aquí hay una fábrica para instancias de nuestro contrato de token. &nbsp;Vocación <code>deploy()</code>en un <code>ContractFactory</code>comenzará la implementación y devolverá un <code>Promise</code>que se resuelve en un <code>Contract</code>. &nbsp;Este es el objeto que tiene un método para cada una de sus funciones de contrato inteligente.</blockquote><h3 id="c-mo-ver-el-nft-en-la-cadena-de-bloques">Cómo ver el NFT en la cadena de bloques</h3><p>Ejecute el script de implementación:</p><pre><code>node ./scripts/deploy.js</code></pre><p>Debes ver en tu terminal <code>EmotionalShapes deployed: SOME_ADDRESS</code>. &nbsp;Esta es la dirección donde se implementa su contrato inteligente en la red de prueba de ropsten.</p><p>Si te diriges a <code>https://ropsten.etherscan.io/address/SOME_ADDRESS</code>, debes ver tu NFT recién implementado. &nbsp;¡Sí! &nbsp;¡Lo hiciste!</p><h2 id="c-mo-acu-ar-su-nft">Cómo acuñar su NFT</h2><p>Ahora que has implementado su NFT, ¡es hora de acuñarlo tu mismo! &nbsp;Crear un nuevo archivo llamado <code>mint.js</code>en tu carpeta scripts/. &nbsp;Usaremos ethers.js para ayudarnos.</p><p>Comience agregando el <code>ethers.js</code>paquete:</p><pre><code>npm install --save ethers</code></pre><p>Luego, llena el <code>mint.js</code>expediente:</p><pre><code class="language-javascript">require("dotenv").config();
const { ethers } = require("ethers");

const contract = require("../artifacts/contracts/EmotionalShapes.sol/EmotionalShapes.json");
const contractInterface = contract.abi;

// https://docs.ethers.io/v5/api/providers
const provider = ethers.getDefaultProvider("ropsten", {
  alchemy: process.env.DEV_API_URL,
});

// https://docs.ethers.io/v5/api/signer/#Wallet
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);

//https://docs.ethers.io/v5/api/contract/contract
const emotionalShapes = new ethers.Contract(
  YOUR_NFT_ADDRESS,
  contractInterface,
  wallet
);

const main = () =&gt; {
  emotionalShapes
    .mint(process.env.PUBLIC_KEY)
    .then((transaction) =&gt; console.log(transaction))
    .catch((e) =&gt; console.log("something went wrong", e));
};

main();
</code></pre><p>He dejado comentarios donde puedes encontrar más información sobre los diferentes métodos. &nbsp;Primero tomamos la interfaz del contrato (ABI). &nbsp;De ethereum.org:</p><blockquote>Una interfaz binaria de aplicación, o ABI, es la forma estándar de interactuar con <a href="https://ethereum.org/en/glossary/#contract-account">contratos </a>en el ecosistema Ethereum, tanto desde fuera de la cadena de bloques como para interacciones de contrato a contrato.</blockquote><p>Tu ABI define cómo otros interactúan con tu contrato. &nbsp;Luego, creamos nuestro proveedor con Alchemy (recuerda el nodo como servicio). Finalmente, inicializamos nuestra billetera con nuestra clave privada.</p><p>los <code>main()</code> función llama a la <code>mint</code>método en el contrato inteligente que acabábamos de implementar. &nbsp;Él <code>mint</code> método toma sólo un parámetro, <code>to</code>, que indican el receptor del token. &nbsp;Como estamos acuñando para nosotros mismos, ponemos la dirección pública de nuestra cuenta de Metamask.</p><p>Si todo va bien, deberías ver la transacción registrada en tu terminal. &nbsp;Toma el <code>hash</code> propiedad e ir a <code>https://ropsten.etherscan.io/tx/YOUR_HASH</code>. &nbsp;¡Deberías ver la transacción de acuñación allí!</p><h2 id="c-mo-ver-el-nft-en-su-billetera-metamask">Cómo ver el NFT en su billetera Metamask</h2><p>Debes comenzar descargando la versión móvil de Metamask. &nbsp;Luego, inicie sesión en su cuenta.</p><p>Deberías ver una pestaña de NFT junto con un botón para agregar NFT. &nbsp;Has clic en el botón e ingresa la dirección de tu contrato inteligente junto con las identificaciones que has acuñado. &nbsp;Si has seguido el tutorial, debes comenzar con una identificación de <code>1</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/IMG_0376.jpeg" class="kg-image" alt="IMG_0376" width="600" height="400" loading="lazy"><figcaption><font style="vertical-align: inherit;">Ver NFT en su billetera Metamask </font></figcaption></figure><h2 id="conclusi-n">Conclusión</h2><p>¡Felicidades! Acabas de acuñar tu propio NFT. &nbsp;En la siguiente parte del proyecto, construiremos la aplicación React front-end para interactuar con nuestro contrato. &nbsp;El objetivo final es crear una aplicación web completamente funcional en la que pueda vender sus propios NFT.</p><p>Por último, puedes <a href="https://equia.io">unirse a nuestros talleres en vivo </a>con voluntarios de freeCodeCamp donde construiremos este proyecto junto con otros desarrolladores.</p><p>Los eventos son gratuitos para todos en todo el mundo y las invitaciones se envían por orden de llegada. Si deseas dirigir los talleres, envíeme <a href="https://twitter.com/aly4alyssa">en Twitter </a>, ¡nos encantaría contar con usted! También organizamos otro tipo de eventos como ferias de contratación y encuentros sociales.</p><p>Déjame saber lo que quieres construir. &nbsp;Los NFT aún están en pañales y las ideas novedosas son más que bienvenidas. &nbsp;¡No puedo esperar a ver qué loca idea tienes!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Fetch API: Cómo realizar una solicitud GET y una solicitud POST en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Kingsley Ubah [https://www.freecodecamp.org/news/author/ubahthebuilder/] Artículo original Fetch API – How to Make a GET Request and POST Request in JavaScript [https://www.freecodecamp.org/news/how-to-make-api-calls-with-fetch/] Traducido y adaptado por Michael M. Liendo [https://twitter.com/Michael__Liendo] A menudo, es posible que desee que su sistema se comunique con otros servidores web para obtener información. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/fetch-api-como-realizar-una-solicitud-get-y-una-solicitud-de-post-en-javascript/</link>
                <guid isPermaLink="false">6170d82b5658740999353a80</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael M. Liendo ]]>
                </dc:creator>
                <pubDate>Tue, 02 Nov 2021 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/10/Fetch-API.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong></strong></strong></strong></strong> </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/ubahthebuilder/">Kingsley Ubah</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/how-to-make-api-calls-with-fetch/">Fetch API – How to Make a GET Request and POST Request in JavaScript</a><br><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por </strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong><a href="https://twitter.com/Michael__Liendo">Michael M. Liendo</a></p><p>A menudo, es posible que desee que su sistema se comunique con otros servidores web para obtener información.</p><p>Por ejemplo, digamos que un nuevo usuario desea registrarse para obtener una cuenta en su sitio web. Y en lugar de tener que completar manualmente un formulario para enviar su información a su sistema, quieren usar su información que ya está en otro servicio o plataforma (es decir, <strong>autenticación de terceros</strong>) para registrarse.</p><p>En tal caso, su sistema tiene que comunicarse con el sistema del tercero para obtener la información de ese usuario. Y lo hace a través de una <strong>API</strong>.</p><blockquote>Una API, o interfaz de programación de aplicaciones, es solo un conjunto de reglas que guían cómo un software o sistema se comunica con otro.</blockquote><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2021/10/APi.jpg" class="kg-image" alt="Como funcionan las API's" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2021/10/APi.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/2021/10/APi.jpg 933w" sizes="(min-width: 720px) 720px" width="933" height="720" loading="lazy"><figcaption>Mi explicación dibujada a mano de una API</figcaption></figure><p>Si su aplicación es una aplicación de una sola página construida con un lenguaje de programación asincrónico como JavaScript, tiene una herramienta útil para llevar a cabo esa función: <code>fetch()</code>.</p><h2 id="-qu-es-la-api-fetch">¿Qué es la API Fetch?</h2><p><code>fetch()</code> es un mecanismo que le permite realizar llamadas simples AJAX (JavaScript asíncrono y XML) con JavaScript.</p><p><strong>Asincrónico</strong> significa que puede usar fetch para realizar una llamada a una API externa sin detener la ejecución de otras instrucciones. De esa manera, otras funciones en el sitio continuarán ejecutándose incluso cuando no se haya resuelto una llamada a la API.</p><p>Cuando se envía una respuesta (datos) desde la API, se reanudan las tareas asincrónicas (recuperación). </p><p>Sin embargo, es importante tener en cuenta que la recuperación no forma parte de la especificación de JavaScript, sino de WWTAG. Como resultado, no podrá usarlo en un entorno Node.js (a menos que instale un módulo especial).</p><h2 id="c-mo-utilizar-fetch-en-javascript">Cómo utilizar <code>fetch()</code> en JavaScript</h2><p>Cuando hablamos de API, también necesitamos hablar de <strong>endpoints</strong>. Un <strong>endpoints</strong> es simplemente una URL única a la que llama para interactuar con otro sistema.</p><p>Supongamos que estamos haciendo una solicitud a una API externa para obtener algunos datos (como una publicación de blog). Para esto, usaremos una simple solicitud GET.</p><p>Simplemente llama a <code>fetch()</code> con la URL del punto final como argumento:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">fetch('https://ubahthebuilder.tech/posts/1');</code></pre><figcaption>Trying to fetch blog post from external API</figcaption></figure><p>El cuerpo de respuesta para este punto final será información sobre una publicación de blog:</p><pre><code class="language-js">{
userId: 1,
id: 1,
title: 'A post by Kingsley',
body: 'Brilliant post on fetch...',
};</code></pre><p>En última instancia, querrás obtener el cuerpo de respuesta. Pero el objeto de respuesta contiene bastante información más allá del cuerpo, incluido el código de estado, los encabezados y más información.</p><blockquote>Ten en cuenta que la API de recuperación devuelve una promesa. Debido a esto, necesitas anidar un método then() para manejar la resolución.</blockquote><p>Los datos devueltos por la API no suelen estar en una forma utilizable. Por lo tanto, deberás convertir los datos a un formulario con el que puedas operar tu JavaScript. Afortunadamente, puedes usar el método <code>json()</code> para hacer precisamente eso:</p><figure class="kg-card kg-code-card"><pre><code class="language-js">fetch('https://ubahthebuilder.tech/posts/1')
.then(data =&gt; {
return data.json();
})
.then(post =&gt; {
console.log(post.title);
});</code></pre><figcaption>Retrieving blog post from API and extracting only the title property</figcaption></figure><p>Como puedes ver en el código anterior, puede anidar un método <code>then()</code> posterior para analizar los datos (saqué solo el título en nuestro caso)</p><p>En este ejemplo, simplemente queríamos obtener una publicación de blog de la API. Pero, ¿y si quisiéramos publicar una historia en su lugar?</p><h2 id="c-mo-realizar-una-solicitud-post">Cómo realizar una solicitud POST</h2><p>Una vez que vayas más allá de las solicitudes GET, deberás configurar algunas opciones más. Hasta ahora, solo has proporcionado un único argumento para <code>fetch()</code>: el punto final de la URL.</p><p>Para una solicitud de publicación, deberás pasar un objeto de opciones de configuración como segundo argumento. El objeto opcional puedes tomar muchos parámetros diferentes. En este caso, incluye solo la información más necesaria.</p><p>Como estás enviando una solicitud POST, deberás declarar que está utilizando el método POST.</p><p>También deberás pasar algunos datos para crear realmente la nueva publicación de blog. Dado que estás enviando datos JSON, deberás establecer un encabezado de Content-Type establecido en application / json. Finalmente, necesitarás el cuerpo, que será una sola cadena de datos JSON.</p><pre><code class="language-js">const update = {
title: 'A blog post by Kingsley',
body: 'Brilliant post on fetch API',
userId: 1,
};

const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(update),
};</code></pre><p>Y luego, la llamada a la API:</p><pre><code class="language-js">fetch('https://jsonplaceholder.typicode.com/posts', options)
  .then(data =&gt; {
      if (!data.ok) {
        throw Error(data.status);
       }
       return data.json();
      }).then(update =&gt; {
      console.log(update);
      // {
      //
      title: 'A blog post by Kingsley',
      //
      body: 'Brilliant post on fetch API',
      //
      userId: 1,
      //
      id: 101
      // };
      }).catch(e =&gt; {
      console.log(e);
      });</code></pre><p>Si tu solicitud es exitosa, obtendrás un cuerpo de respuesta que contiene el objeto de la publicación del blog junto con una nueva ID. La respuesta variará dependiendo de cómo esté configurada la API.</p><p>Por último, debes tener en cuenta que los puntos finales pueden cambiar con el tiempo y las APIs pueden reestructurarse. Por lo tanto, debes juntar todas tus llamadas de recuperación para facilitar el acceso.</p><h2 id="conclusi-n">Conclusión</h2><p>Aquí hay algunos puntos para resumir este artículo:</p><ul><li>Los sistemas informáticos, como el software, se comunican entre sí y comparten información a través de una capa llamada API.</li><li>Una API contiene el conjunto de reglas y protocolos que guían cómo interactúan dos o más sistemas. Por ejemplo, el sistema de Facebook puede interactuar con el sistema de Google para obtener información sobre un usuario a través de una API.</li><li>En JavaScript front-end, puedes realizar llamadas API simples con la utilidad <code>fetch()</code>.</li><li>Para realizar una solicitud GET simple con fetch, solo necesitas pasar el punto final de la URL como argumento.</li><li>Para realizar una solicitud POST, deberás transmitir algunos otros parámetros, incluido un objeto de configuración.</li></ul><p>Si te gustó mi artículo y quieres ofrecer tu apoyo, por favor visita mi página <a href="https://www.buymeacoffee.com/ubahthebuilder">Cómprame un café</a>.</p><p>Gracias y nos vemos pronto.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript toLowerCase(): Cómo convertir una cadena de texto a minúsculas y mayúsculas en JS ]]>
                </title>
                <description>
                    <![CDATA[ Artículo original escrito por Dionysia Lemonaki [https://www.freecodecamp.org/news/author/dionysia/] Artículo original JavaScript toLowerCase() – How to Convert a String to Lowercase and Uppercase in JS [https://www.freecodecamp.org/news/javascript-tolowercase-how-to-convert-a-string-to-lowercase-and-uppercase-in-js/] Traducido y adaptado por Michael M. Liendo [https://twitter.com/Michael__Liendo] Este artículo explica cómo convertir una cadena de texto a caracteres en minúsculas y mayúsculas.  ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-convertir-una-cadena-en-minusculas-y-mayusculas-en-js/</link>
                <guid isPermaLink="false">6165bfbc1233c7094d1777eb</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Michael M. Liendo ]]>
                </dc:creator>
                <pubDate>Wed, 20 Oct 2021 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/10/joan-gamell-ZS67i1HLllo-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original escrito por</strong></strong></strong></strong> </strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/author/dionysia/">Dionysia Lemonaki</a><br><strong><strong><strong><strong><strong><strong><strong><strong>Artículo original </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://www.freecodecamp.org/news/javascript-tolowercase-how-to-convert-a-string-to-lowercase-and-uppercase-in-js/">JavaScript toLowerCase() – How to Convert a String to Lowercase and Uppercase in JS</a><br><strong><strong><strong><strong><strong><strong><strong><strong>Traducido y adaptado por </strong></strong></strong></strong></strong></strong></strong></strong><a href="https://twitter.com/Michael__Liendo">Michael M. Liendo</a></p><p>Este artículo explica cómo convertir una cadena de texto a caracteres en minúsculas y mayúsculas.</p><p>También veremos cómo convertir solo la primera letra de una palabra en mayúscula y cómo convertir la primera letra de cada palabra en una oración en mayúscula.</p><p>¡Empecemos!</p><h2 id="c-mo-utilizar-el-m-todo-tolowercase-en-javascript"><strong>Cómo utilizar el método <code>toLowerCase()</code> en JavaScript</strong></h2><p>El método <code>toLowerCase</code> convierte una cadena de texto en letras minúsculas.</p><p>La sintaxis general del método se ve así:</p><pre><code class="language-javascript">String.toLowerCase()
</code></pre><p>El método <code>toLowerCase()</code> no toma ningún parámetro.</p><p>Las cadenas en JavaScript son <strong>inmutables</strong>. El método <code>toLowerCase ()</code> convierte la cadena de texto especificada en una nueva que consta solo de letras minúsculas y devuelve ese valor.</p><p>Significa que la cadena original antigua no se modifica ni se ve afectada de ninguna manera.</p><pre><code class="language-javascript">let saludo = '¡Hola!';

console.log(saludo.toLowerCase());

//salida
//¡hola!
</code></pre><p>La cadena de texto <code>saludo</code> consta de solo una letra mayúscula que se convierte a minúscula.</p><p>Las letras que ya están en minúsculas no se ven afectadas por el método <code>toLowerCase()</code>, solo las mayúsculas. Estas letras conservan su forma original.</p><p>La cadena del ejemplo siguiente consta de letras mayúsculas. Luego, todos se convierten a minúsculas cuando se aplica el método <code>toLowerCase ()</code>.</p><pre><code class="language-javascript">const  otroSaludo = '¡¡BUENOS DÍAS!!';

console.log(otroSaludo.toLowerCase());
//salida
//¡¡buenos días!!
</code></pre><h2 id="c-mo-utilizar-el-m-todo-touppercase-en-javascript"><strong>Cómo utilizar el método <code>toUpperCase()</code> en JavaScript</strong></h2><p>El método <code>toUpperCase()</code> es similar al método <code>toLowerCase()</code> pero en su lugar convierte el valor de la cadena de texto a mayúsculas.</p><p>La sintaxis general del método se ve así:</p><pre><code class="language-javascript">String.toUpper()
</code></pre><p>No toma ningún parámetro.</p><p>Como las cadenas en JavaScript son inmutables, el método <code>toLowerCase()</code> no cambia el valor de la cadena especificada.</p><p>En cambio, devuelve un nuevo valor. La cadena especificada se convierte en una nueva cuyo contenido consta solo de letras mayúsculas. Esto significa que ahora habrá dos cadenas: la original y la recién convertida en mayúscula.</p><pre><code class="language-javascript">console.log('¡Estoy gritando!'.toUpperCase());

//salida
//¡ESTOY GRITANDO!
</code></pre><p>Cualquier letra mayúscula que ya esté en la cadena no se verá afectada y permanecerá sin cambios cuando se llame al método <code>toLowerCase()</code>.</p><h3 id="c-mo-poner-en-may-scula-solo-la-primera-letra-de-una-cadena-de-texto-en-javascript"><strong>Cómo poner en mayúscula solo la primera letra de una cadena de texto en JavaScript</strong></h3><p>¿Qué sucede si desea convertir solo la primera letra de una cadena en mayúscula?</p><p>A continuación se muestra un ejemplo simple que le muestra una forma de hacerlo.</p><p>Digamos que hay una variable llamada <code>saludo</code> con el valor de cadena de texto en <code>hola</code>, en letras minúsculas.</p><pre><code class="language-javascript">let saludo = 'hola';
</code></pre><p>Primero localiza y extrae la primera letra de esa cadena usando su índice. Luego llamas al método <code>toUpperCase()</code> en esa letra específica.</p><p>Como recordatorio, la indexación en JavaScript (y la mayoría de los lenguajes de programación) comienza en <code>0</code>, por lo que la primera letra tiene un índice de <code>0</code>.</p><p>Guarde esta operación en una nueva variable llamada <code>primeraLetra</code>.</p><pre><code class="language-javascript">let primeraLetra = saludo[0].toUpperCase();

console.log(primeraLetra);
// devuelve la letra 'H' en este caso
</code></pre><p>A continuación, desea aislar y cortar ese primer carácter y conservar el resto de la cadena de texto.</p><p>Una forma de hacerlo es mediante el método <code>slice()</code>. Esto crea una nueva cadena comenzando desde el índice especificado hasta el final de la palabra.</p><p>Desea comenzar desde la segunda letra hasta el final del valor.</p><p>En este caso, el argumento que debe pasar a <code>slice()</code> es un índice de <code>1</code> ya que es el índice de la segunda letra.</p><p>De esta forma, el primer carácter se excluye por completo. Se devuelve una nueva cadena sin ella, pero que contiene el resto de los caracteres, menos la primera letra.</p><p>Luego, guarde esa operación en una nueva variable.</p><pre><code class="language-javascript">let restoDelSaludo = saludo.slice(1);

console.log(restoDelSaludo);
//devuelve la cadena 'ola'
</code></pre><p>Al combinar las dos nuevas variables con la concatenación, obtiene una nueva cadena con solo la primera letra en mayúscula.</p><pre><code class="language-javascript">let nuevoSaludo = primeraLetra + restoDelSaludo;

console.log(nuevoSaludo);
//salida
// Hola
</code></pre><p>Otra forma es combinar los pasos anteriores y aislarlos en una función.</p><p>La función se crea solo una vez. Luego, la función devuelve una nueva cadena con la primera letra en mayúscula.</p><p>La cantidad de código que necesita escribir es sustancialmente menor y al mismo tiempo puede pasar cualquier cadena como argumento sin escribir código repetitivo.</p><pre><code class="language-javascript">function primeraLetra(str) {
     return str[0].toUpperCase() + str.slice(1);
 }

console.log(primeraLetra('hola'));
//output 
//Hola
</code></pre><h3 id="c-mo-poner-en-may-scula-la-primera-letra-de-cada-palabra-en-javascript">Cómo poner en mayúscula la primera letra de cada palabra en JavaScript</h3><p>Pero, ¿cómo se hace para colocar la primera letra de cada palabra en mayúscula de una oración?</p><p>Digamos que tiene una oración como la siguiente. Quieres poner en mayúscula cada primera palabra de la oración.</p><pre><code class="language-javascript">let aprendeAProgramar = 'aprende a programar gratis con freeCodeCamp';
</code></pre><p>El primer paso es dividir la oración en palabras individuales y trabajar con cada una por separado.</p><p>Para eso, usa el método <code>split()</code> y pasa un espacio como argumento. Significa que con cada espacio en la oración proporcionada, un elemento se pasa a un nuevo arreglo.</p><p>Divide la oración con base en espacios en blanco.</p><p>Cree una nueva variable y almacene el nuevo arreglo.</p><pre><code class="language-javascript">let splitAprendeAProgramar = aprendeAProgramar.split(" ");

console.log(splitAprendeAProgramar); 
//['aprende', 'a', 'programar', 'gratis', 'con', 'freeCodeCamp']
</code></pre><p>Ahora, a partir de esa oración, hay un nuevo arreglo de palabras que le permite manipular cada palabra por sí sola, por separado.</p><p>Dado que ahora hay un nuevo arreglo, puede usar el método <code>map()</code> para iterar sobre cada elemento individual dentro de ella.</p><p>En el método <code>map()</code>, utiliza el mismo procedimiento que se muestra en la sección anterior para tomar cada palabra individualmente, poner en mayúscula la primera letra y devolver el resto de la palabra.</p><pre><code class="language-javascript">let mayusSplitAprendeAProgramar = splitAprendeAProgramar.map(palabra =&gt; {
    return palabra[0].toUpperCase() + palabra.slice(1);
})

console.log(mayusSplitAprendeAProgramar);
//['Aprende', 'A', 'Programar', 'Gratis', 'Con', 'FreeCodeCamp']
</code></pre><p>La primera letra de cada palabra ahora está en mayúscula.</p><p>Todo lo que queda ahora es volver a combinar las palabras del arreglo en una sola oración.</p><p>Para eso, usa el método <code>join()</code> y pasa un espacio como argumento.</p><pre><code class="language-javascript">let NuevoAprendeAProgramar = mayusSplitAprendeAProgramar.join(" ");

console.log(NuevoAprendeAProgramar);
//Aprende A Programar Gratis Con FreeCodeCamp
</code></pre><p>Como se muestra en la sección anterior, también puede crear una función que combine todos estos pasos. Entonces podrá pasar como argumento cualquier cadena y cada primera palabra en ella estará en mayúsculas.</p><pre><code class="language-javascript">function mayusPrimeraLetraDeOracion(oracion) {
    let palabras = oracion.split(" ").map(palabra =&gt; {
        return palabra[0].toUpperCase() + palabra.slice(1);
    })
    return palabras.join(" ");
}

console.log(mayusPrimeraLetraDeOracion("estoy aprendiendo a programar"));
//Estoy Aprendiendo A Codificar
</code></pre><h2 id="conclusi-n">Conclusión</h2><p>¡Y ahí lo tienes! Así es como se utilizan los métodos <code>toLowerCase()</code> y <code>toUpperCase()</code> en JavaScript.</p><p>Aprendió a poner en mayúscula la primera letra de una palabra y a poner en mayúscula la primera letra de cada palabra en una oración.</p><p>Si desea aprender JavaScript y obtener una mejor comprensión del idioma, freeCodeCamp tiene una <a href="https://www.freecodecamp.org/espanol/learn/javascript-algorithms-and-data-structures/">Certificación JavaScript gratuita.</a></p><p>Comenzará desde lo básico como un principiante absoluto en el lenguaje y luego avanzará a materias más complejas, como programación orientada a objetos, programación funcional, estructuras de datos, algoritmos y técnicas de depuración útiles.</p><p>Al final, creará cinco proyectos para poner en práctica sus habilidades.</p><p>¡Gracias por leer y feliz aprendizaje!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
