<?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[ Angelo Mirabelli - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Impara a programmare gratuitamente! Tutorial di programmazione su Python, JavaScript, Linux e molto altro. ]]>
        </description>
        <link>https://www.freecodecamp.org/italian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Angelo Mirabelli - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:28:06 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/author/angelo/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ FreeCodeCamp ha appena ricevuto una donazione da un milione di dollari da un alunno per costruire un curriculum Web3 a emissioni zero ]]>
                </title>
                <description>
                    <![CDATA[  * Un ex alunno di freeCodeCamp che ha fondato la sua azienda di successo Web3    ha donato 1 milione di dollari a freeCodeCamp  * Ha chiesto di utilizzare alcuni di questi fondi per sviluppare un curriculum    Web3 a emissioni zero  * ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/ffreecodecamp-ha-appena-ricevuto-una-donazione-da-un-milione-di-dollari-da-un-allunno-per-costruire-un-curriculum-web3-a-emissioni-zero/</link>
                <guid isPermaLink="false">622dd2aaccdd7f051c4552e0</guid>
                
                    <category>
                        <![CDATA[ freeCodeCamp ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Tue, 05 Apr 2022 12:19:15 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/christian-wiediger-WkfDrhxDMC8-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/carbon-neutral-web3-curriculum-plans/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">freeCodeCamp Just Got a Million Dollar Donation from an Alum to Build a Carbon-Neutral Web3 Curriculum</a>
      </p><ul><li>Un ex alunno di freeCodeCamp che ha fondato la sua azienda di successo Web3 ha donato 1 milione di dollari a freeCodeCamp</li><li>Ha chiesto di utilizzare alcuni di questi fondi per sviluppare un curriculum Web3 a emissioni zero</li><li>Stiamo creando un curriculum Web3 interattivo in cui puoi imparare costruendo più di una dozzina di progetti. Questo curriculum gratuito insegnerà i fondamenti dei contratti intelligenti e dello sviluppo di applicazioni distribuite.</li><li>Questo sarà un curriculum separato che puoi scegliere di affrontare nel momento in cui ti senti pronto. I prerequisiti riguarderanno l'apprendimento dello sviluppo web full stack attraverso le prime 7 certificazioni freeCodeCamp. (Sebbene, come per tutti gli aspetti di freeCodeCamp, sei libero di saltare.)</li><li>Il nostro obiettivo è aiutare le persone ad apprendere queste competenze in modo che possano ottenere uno dei migliaia dei posti di lavoro disponibili che richiedono queste tecnologie o avviare propri progetti imprenditoriali.</li></ul><h2 id="la-storia-di-nathan"><strong>La storia di Nathan</strong></h2><p>Nathan Flickinger ha abbandonato il college. Dopo un periodo di grosse difficoltà, ha promesso di rimettere insieme la sua vita. Ha iniziato con l'utilizzo della sua certificazione CompTIA che aveva conseguito al liceo per ottenere un lavoro con un salario minimo nel supporto tecnico.</p><p>Da lì, Nathan ha deciso di imparare a programmare da solo. Dopo diversi mesi di studio su freeCodeCamp, è stato in grado di ottenere il suo primo lavoro in software engineering.</p><p>È diventato appassionato dallo sviluppo di Web3 e alla fine ha fatto il grande passo e ha creato la propria startup. Ha aiutato a scrivere il codice degli smart contract per diversi progetti Web3. In particolare, KaijuKingz, una collezione di simpatiche lucertole ispirata ai mostri, ognuna con caratteristiche bizzarre. Invece del caffè, bevono fanghi radioattivi.</p><p>Le persone della comunità di KaijuKingz acquistano e scambiano queste opere artistiche attraverso un sistema chiamato Token non fungibili, essenzialmente atti di proprietà.</p><p>Invece di essere archiviati in un database centralizzato, questi atti vengono salvati nei computer di tutto il mondo attraverso un database distribuito.</p><p>All'inizio, Nathan ha deciso che se il suo progetto avesse avuto successo, avrebbe voluto donare una grande quantità di denaro a freeCodeCamp per aiutare altre persone a imparare a sfruttare la tecnologia per realizzare le proprie ambizioni di carriera.</p><p>E oggi, lui e KaijuKingz l'hanno fatto. Hanno donato un milione di dollari alla nostra organizzazione no-profit, da utilizzare per la nostra missione di creare risorse di apprendimento gratuite per le persone in tutto il mondo.</p><p>Sono estremamente grato a Nathan e ai suoi colleghi di KaijuKingz e alla loro disponibilità a supportare l'istruzione gratuita e open source. Puoi <a href="https://www.freecodecamp.org/news/donating-a-million-dollars-to-freecodecamp-a-web3-curriculum">leggere di più su Nathan e il suo viaggio nella programmazione qui</a> .</p><h2 id="il-curriculum-web3"><strong>Il curriculum Web3</strong></h2><p>Questo curriculum gratuito insegnerà i fondamenti dei contratti intelligenti e dello sviluppo di applicazioni distribuite.</p><p>Sarà un curriculum autonomo che puoi scegliere di affrontare ogni volta che ti senti pronto. I prerequisiti riguarderanno l'apprendimento dello sviluppo web full stack attraverso le prime 7 certificazioni freeCodeCamp.</p><p>Costruiremo questo curriculum utilizzando gli stessi strumenti che abbiamo utilizzato per creare il curriculum del <a href="https://www.freecodecamp.org/news/how-to-run-freecodecamps-relational-databases-curriculum-using-docker-vscode-and-coderoad/">database relazionale</a> di freeCodeCamp . Ti insegnerà lo sviluppo di Web3 attraverso la costruzione di più di una dozzina di progetti.</p><h2 id="domande-frequenti"><strong>Domande frequenti</strong></h2><h3 id="in-che-modo-questo-sar-carbon-neutral"><strong>In che modo questo sarà carbon neutral?</strong></h3><p>Poiché tutto lo sviluppo avverrà sul tuo computer e utilizzerà blockchain locali, non ci saranno emissioni di carbonio. Tutti i server cloud di freeCodeCamp sono già a emissioni zero.</p><h3 id="tutto-questo-sar-gratuito-comprese-le-transazioni-blockchain"><strong>Tutto questo sarà gratuito? Comprese le transazioni blockchain?</strong></h3><p>Sì. Ancora una volta, questo curriculum utilizzerà blockchain locali. Non dovrai mai acquistare monete o token.</p><h3 id="questo-curriculum-discuter-aspetti-della-speculazione"><strong>Questo curriculum discuterà aspetti della speculazione?</strong></h3><p>No. Questo curriculum sarà incentrato al 100% sull'ingegneria del software.</p><h3 id="quando-sar-pubblicato-questo-curriculum"><strong>Quando sarà pubblicato questo curriculum?</strong></h3><p>Ci auguriamo che parti di questo curriculum siano disponibili già nell'estate 2022. Nel frattempo, consigliamo di apprendere lo sviluppo web utilizzando il curriculum freeCodeCamp esistente.</p><p>Un modo per pensare allo sviluppo di Web3 è che si tratta principalmente di uno sviluppo Web tradizionale con molti strumenti aggiuntivi per l'utilizzo di reti distribuite. Quindi tutto ciò che impari per lo sviluppo web tradizionale sarà applicabile anche qui.</p><h3 id="e-il-curriculum-di-data-science"><strong>E il curriculum di Data Science?</strong></h3><p>Il curriculum di Data Science sta andando alla grande e speriamo di pubblicarne parti nei prossimi mesi. Il curriculum Web3 non influisce sullo sviluppo del curriculum di Data Science: vengono creati da team separati di insegnanti e sviluppatori.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come creare un NFT e renderlo su OpenSea Marketplace ]]>
                </title>
                <description>
                    <![CDATA[ In questo articolo, ti mostrerò come realizzare un NFT senza competenze di ingegneria del software. Quindi impareremo come creare NFT personalizzabili illimitati con Brownie [https://eth-brownie.readthedocs.io/en/stable/] , Python [https://www.python.org/] e Chainlink [https://docs.chain.link/docs] . E vedremo come rendere e vendere la nostra creazione sul mercato NFT di OpenSea . [https://opensea.io/] Se stai ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-creare-un-nft-e-renderlo-su-opensea-marketplace/</link>
                <guid isPermaLink="false">622dd856ccdd7f051c455302</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Thu, 31 Mar 2022 08:35:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/Advanced-NFT-Deployment---1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Make an NFT and Render it on the OpenSea Marketplace</a>
      </p><p>In questo articolo, ti mostrerò come realizzare un NFT senza competenze di ingegneria del software. Quindi impareremo come creare NFT personalizzabili illimitati con <a href="https://eth-brownie.readthedocs.io/en/stable/">Brownie</a> , <a href="https://www.python.org/">Python</a> e <a href="https://docs.chain.link/docs">Chainlink</a> . E vedremo come rendere e vendere la nostra creazione sul mercato NFT di <a href="https://opensea.io/">OpenSea .</a></p><p>Se stai cercando un tutorial che utilizzi Truffle, JavaScript e divertenti personaggi medievali, dai un'occhiata a come <a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">costruire, distribuire e vendere il tuo NFT qui</a> .</p><h2 id="cos-un-nft"><strong>Cos'è un NFT?</strong></h2><p><a href="https://eips.ethereum.org/EIPS/eip-721" rel="noopener">Gli NFT</a> (Non-Fungible Tokens) possono essere riassunti in una parola: "unico". Si tratta di contratti intelligenti distribuiti su una blockchain che rappresentano qualcosa di unico.</p><h3 id="erc20-vs-erc721"><strong>ERC20 vs ERC721</strong></h3><p>Gli NFT sono uno standard di token blockchain simile a <a href="https://www.investopedia.com/news/what-erc20-and-what-does-it-mean-ethereum/" rel="noopener">ERC20</a> , come AAVE, SNX e LINK (tecnicamente un ERC677). Gli ERC20 sono token "fungibili", che significa "sostituibili" o "intercambiabili".</p><p>Ad esempio, la tua banconota da un dollaro varrà 1 $ indipendentemente dalla banconota da un dollaro che usi. Il numero di serie sulla banconota da un dollaro potrebbe essere diverso, ma le banconote sono intercambiabili e varranno sempre 1 $, qualunque cosa accada.</p><p>Gli NFT, d'altra parte, sono "non fungibili" e seguono il proprio standard di token, l'<a href="https://eips.ethereum.org/EIPS/eip-721">ERC721. </a>Ad esempio, la Gioconda è "non fungibile". Anche se qualcuno può farne una copia, ci sarà sempre solo una Monna Lisa. Se la Gioconda fosse creata su una blockchain, sarebbe una NFT.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/image-145.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Immagine originale da </font></font><a href="https://en.wikipedia.org/wiki/Mona_Lisa" 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;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Wikipedia</font></font></a></figcaption></figure><h2 id="a-cosa-servono-gli-nft"><strong>A cosa servono gli NFT?</strong></h2><p>Gli NFT forniscono valore a creatori, artisti, progettisti di giochi e altro avendo una cronologia permanente di distribuzione archiviata sulla chain.</p><p>Saprai sempre chi ha creato la NFT, chi possedeva la NFT, da dove proveniva e altro ancora, dando loro molto valore rispetto all'arte tradizionale. Nell'arte tradizionale, può essere difficile capire cosa sia un "falso", mentre sulla chain la storia è facilmente tracciabile.</p><p>E poiché i contratti intelligenti e gli NFT sono programmabili al 100%, gli NFT possono anche avere royalties integrate e qualsiasi altra funzionalità aggiunta. Ricompensare gli artisti è sempre stato un problema, poiché spesso il lavoro di un artista viene distribuito senza alcuna attribuzione.</p><p>Sempre più artisti e ingegneri stanno saltando su questo enorme valore aggiunto, perché è finalmente un ottimo modo per gli artisti di essere ricompensati per il loro lavoro. Oltre a questo, gli NFT sono un modo divertente per mostrare la tua creatività e diventare un collezionista in un mondo digitale.</p><h3 id="il-valore-degli-nft"><strong>Il valore degli NFT</strong></h3><p>Gli NFT hanno fatto molta strada e continuiamo a vedere vendite di NFT da record, come "Everydays: The First 5.000 Days" venduto per $ 69,3 milioni.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-9.48.19-AM.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Immagine da </font></font><a href="https://twitter.com/ChristiesInc/status/1361670588608176128" 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;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Twitter</font></font></a></figcaption></figure><p>Quindi c'è molto valore qui, ed è anche un modo divertente, dinamico e coinvolgente di creare arte nel mondo digitale oltre che di a imparare la creazione di contratti intelligenti. Quindi ora ti insegnerò tutto ciò che devi sapere sulla creazione di NFT.</p><h2 id="come-fare-un-nft"><strong>Come fare un NFT</strong></h2><h3 id="cosa-non-tratteremo"><strong>Cosa non tratteremo</strong></h3><p>Ora, il modo più semplice per creare un NFT è semplicemente andare su una piattaforma come <a href="https://opensea.io/">Opensea</a> , <a href="https://rarible.com/">Rarible</a> o <a href="https://mintable.app/">Mintible</a> e seguire la loro guida passo passo per l'implementazione sulla loro piattaforma.</p><p>Puoi prendere questa strada al 100%, tuttavia potresti rimanere legato alla piattaforma e bloccato nelle sue funzionalità. Non puoi ottenere la personalizzazione illimitata o utilizzare davvero nessuno dei vantaggi offerti dagli NFT. Ma se sei un ingegnere del software alle prime armi, o non molto tecnico, questa è la strada che fa per te.</p><p>Invece se stai cercando di diventare un ingegnere del software più forte, imparare un po' di solidity e ottenere le capacità di creare qualcosa con creatività illimitata, continua a leggere!</p><p>Se sei nuovo nell'usare solidity, non ti preoccupare, parleremo delle basi anche in questo caso.</p><h2 id="come-creare-un-nft-con-personalizzazione-illimitata"><strong>Come creare un NFT con personalizzazione illimitata</strong></h2><p>Ti farò fare un salto di qualità con questo <a href="https://github.com/PatrickAlphaC/nft-mix">Brownie Mix NFT</a> . Questo è un repository funzionante con molto codice boilerplate.</p><h3 id="prerequisiti"><strong>Prerequisiti</strong></h3><p>Per iniziare abbiamo bisogno di alcune cose installate:</p><ul><li><a href="https://www.python.org/downloads/">Python</a></li><li><a href="https://nodejs.org/en/download/">Nodejs</a> e npm</li><li><a href="https://metamask.io/">Metamask</a></li></ul><p>Se non hai familiarità con Metamask, puoi <a href="https://docs.chain.link/docs/install-metamask">seguire questo tutorial</a> per configurarlo.</p><h3 id="rinkeby-testnet-eth-e-link"><strong>Rinkeby Testnet ETH e LINK</strong></h3><p>Lavoreremo anche sul testnet Rinkeby di Ethereum, quindi implementeremo i nostri contratti su una vera blockchain, gratuitamente!</p><p>I testnet sono ottimi modi per testare come si comportano i nostri contratti intelligenti nel mondo reale. Abbiamo bisogno di Rinkeby ETH e Rinkeby LINK, che possiamo ottenere gratuitamente dai link agli ultimi faucet dalla <a href="https://docs.chain.link/docs/link-token-contracts#rinkeby">documentazione di Chainlink</a> .</p><p>Dovremo anche aggiungere il token LINK rinkeby al nostro metamask, cosa che possiamo fare seguendo la <a href="https://docs.chain.link/docs/acquire-link">documentazione di acquisizione LINK</a> .</p><p>Se sei ancora confuso, <a href="https://www.youtube.com/watch?v=4ZgFijd02Jo">puoi seguire questo video</a> , assicurati di usare Rinkeby invece di Ropsten.</p><p>Quando lavoriamo con una piattaforma di smart contract come Ethereum, dobbiamo pagare un po' di ETH e quando riceviamo dati da off-chain, dobbiamo pagare un po' di LINK. Questo è il motivo per cui abbiamo bisogno di testnet LINK ed ETH.</p><p>Fantastico, iniziamo. Questa è <a href="https://testnets.opensea.io/assets/0x8acb7ca932892eb83e4411b59309d44dddbc4cdf/0">l'NFT che implementeremo su OpenSea.</a></p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-10.58.35-AM.png" class="kg-image" alt="Screen-Shot-31-03-2021-at-10.58.35-AM" width="600" height="400" loading="lazy"></figure><h3 id="avvio-rapido"><strong>Avvio rapido</strong></h3><pre><code class="language-bash">git clone https://github.com/PatrickAlphaC/nft-mix
cd nft-mix</code></pre><p>Stupendo! Ora dobbiamo installare <code>ganache-cli</code> e <code>eth-brownie</code>.</p><pre><code>pip install eth-brownie
npm install -g ganache-cli</code></pre><p>Ora possiamo <a href="https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html">impostare le nostre variabili d'ambiente</a> . Se non hai familiarità con le variabili di ambiente, puoi semplicemente aggiungerle al tuo file <code>.env</code> e quindi eseguire:</p><p><code>source .env</code></p><p>Un esempio di file <code>.env</code> dovrebbe essere nel repository che hai appena clonato con le variabili di ambiente commentate. Decommentale per usarle!</p><p>Avrai bisogno di un <code>WEB3_INFURA_PROJECT_ID</code> e un <code>PRIVATE_KEY</code>. <code>WEB3_INFURA_PROJECT_ID</code> puoi trovarlo registrando gratuitamente un <a href="https://infura.io/">account Infura</a>. Questo ci darà un modo per inviare transazioni alla blockchain.</p><p>Avremo anche bisogno di una chiave privata, che puoi ottenere dal tuo Metamask. Premi i 3 puntini e fai clic su <code>Account Details</code> ed <code>Export Private Key</code>. Per favore NON condividere questa chiave con nessuno se ci metti soldi veri!</p><figure class="kg-card kg-code-card"><pre><code>export PRIVATE_KEY=YOUR_KEY_HERE
export WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">.env</font></font></figcaption></figure><p>Ora possiamo distribuire il nostro contratto NFT e creare il nostro primo oggetto da collezione con i seguenti due comandi.</p><pre><code>brownie run scripts/simple_collectible/deploy_simple.py --network rinkeby
brownie run scripts/simple_collectible/create_collectible.py --network rinkeby</code></pre><p>Il primo script distribuisce il nostro contratto NFT sulla blockchain di Rinkeby e il secondo crea il nostro primo oggetto da collezione.</p><p>Hai appena implementato il tuo primo contratto intelligente!</p><p>Non fa molto, ma non preoccuparti: ti mostrerò come renderizzarlo su OpenSea nella parte avanzata di questo tutorial. Ma prima, diamo un'occhiata allo standard del token ERC721.</p><h2 id="lo-standard-del-token-erc721"><strong>Lo standard del token ERC721</strong></h2><p>Diamo un'occhiata al contratto che abbiamo appena distribuito, nel file <code>SimpleCollectible.sol</code>.</p><pre><code class="language-javascript">// SPDX-License-Identifier: MIT
pragma solidity 0.6.6;

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

contract SimpleCollectible is ERC721 {
    uint256 public tokenCounter;
    constructor () public ERC721 ("Dogie", "DOG"){
        tokenCounter = 0;
    }

    function createCollectible(string memory tokenURI) public returns (uint256) {
        uint256 newItemId = tokenCounter;
        _safeMint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        tokenCounter = tokenCounter + 1;
        return newItemId;
    }

}
</code></pre><p>Stiamo usando il pacchetto <a href="https://github.com/OpenZeppelin/openzeppelin-contracts">OpenZepplin</a> per il token ERC721. Questo pacchetto che abbiamo importato ci consente di utilizzare tutte le funzioni di un tipico token ERC721. Questo definisce tutte le funzionalità che avranno i nostri token, come <code>transfer</code> che sposta i token a nuovi utenti, <code>safeMint</code> che crea nuovi token e altro ancora.</p><p>Puoi trovare tutte le funzioni che vengono fornite al nostro contratto controllando il <a href="https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol">contratto token OpenZepplin ERC721</a> . Il nostro contratto eredita queste funzioni su questa riga:</p><pre><code>contract SimpleCollectible is ERC721 {</code></pre><p>È così che solidity fa eredità. Quando distribuiamo un contratto, il &nbsp;<code>constructor</code> viene chiamato automaticamente e richiede alcuni parametri.</p><pre><code>constructor () public ERC721 ("Dogie", "DOG"){
        tokenCounter = 0;
    }</code></pre><p>Usiamo anche il costruttore di <code>ERC721</code>, nel nostro costruttore, e dobbiamo solo dargli un nome e un simbolo. Nel nostro caso, sono "Dogie" e "DOG". Ciò significa che ogni NFT che creiamo sarà di tipo Dogie/DOG.</p><p>Questo è come il caso delle carte di Pokemon in cui ognuna di essa è ancora un pokemon, o ogni giocatore di baseball su una carta collezionabile è ancora un giocatore di baseball. Ogni giocatore di baseball è unico, ma rimangono comunque tutti giocatori di baseball. Stiamo solo usando il tipo <code>DOG</code>.</p><p>Abbiamo <code>tokenCounter</code> in alto che conta quanti NFT abbiamo creato di questo tipo. Ogni nuovo token ottiene un <code>tokenId</code> basato sul <code>tokenCounter</code> corrente .</p><p>Possiamo effettivamente creare un NFT con la funzione <code>createCollectible</code>. Questo è ciò che chiamiamo nel nostro script <code>create_collectible.py</code>.</p><pre><code>function createCollectible(string memory tokenURI) public returns (uint256) {
        uint256 newItemId = tokenCounter;
        _safeMint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        tokenCounter = tokenCounter + 1;
        return newItemId;
    }</code></pre><p>La funzione <code>_safeMint</code> crea il nuovo NFT e lo assegna a chi ha chiamato <code>createdCollectible</code>, alias the <code>msg.sender</code>, con un <code>newItemId</code> derivato da <code>tokenCounter</code>. In questo modo possiamo tenere traccia di chi possiede cosa, controllando il proprietario del <code>tokenId</code>.</p><p>Noterai che chiamiamo anche <code>_setTokenURI</code>. Parliamo di questo.</p><h2 id="cosa-sono-i-metadati-nft-e-tokenuri"><strong>Cosa sono i metadati NFT e TokenURI?</strong></h2><p>Quando vennero creati i contratti intelligenti e quindi creati gli NFT, le persone si sono subito rese conto che è <em><em>davvero</em></em> costoso distribuire molti dati sulla blockchain. Immagini di appena un KB possono facilmente <a href="https://ethereum.stackexchange.com/a/896/57451">costare oltre 1 milione di dollari per l'archiviazione</a> .</p><p>Questo è chiaramente un problema per gli NFT, poiché avere un'arte creativa significa che devi archiviare queste informazioni da qualche parte. Volevano anche un modo leggero per archiviare gli attributi su un NFT, ed è qui che entrano in gioco tokenURI e metadati.</p><h3 id="tokenuri"><strong>TokenURI</strong></h3><p>Il <code>tokenURI</code> su un NFT è un identificatore univoco di come "sembra" il token. Un URI potrebbe essere una chiamata API su HTTPS, un hash IPFS o <a href="https://danielmiessler.com/study/difference-between-uri-url/">qualsiasi altra cosa</a> univoca.</p><p>Seguono uno standard di visualizzazione dei metadati simile a questo:</p><pre><code class="language-json">{
    "name": "name",
    "description": "description",
    "image": "https://ipfs.io/ipfs/QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png",
    "attributes": [
        {
            "trait_type": "trait",
            "value": 100
        }
    ]
}</code></pre><p>Questi mostrano l'aspetto di un NFT e i suoi attributi. La sezione <code>image</code> punta a un altro URI di come appare l'NFT. Ciò rende facile per le piattaforme NFT come Opensea, Rarible e Mintable eseguire il rendering di NFT sulle loro piattaforme, poiché sono tutti alla ricerca di questi metadati.</p><h3 id="metadati-off-chain-vs-metadati-on-chain"><strong>Metadati off-chain vs metadati on-chain</strong></h3><p>Ora potresti pensare "aspetta... se i metadati non sono on-chain, significa che il mio NFT potrebbe andare via a un certo punto"? E avresti ragione.</p><p>Avresti anche ragione nel pensare che avere i metadati off-chain significa che non puoi utilizzare quei metadati per far interagire i tuoi contratti intelligenti tra loro.</p><p>Questo è il motivo per cui vogliamo concentrarci sui metadati on-chain, in modo da poter programmare i nostri NFT per interagire tra loro.</p><p>Tuttavia, abbiamo ancora bisogno della parte <code>image</code> dei metadati off-chain, poiché non abbiamo un ottimo modo per archiviare immagini di grandi dimensioni on-chain. Ma non preoccuparti, possiamo farlo gratuitamente su una rete decentralizzata usando ancora <a href="https://ipfs.io/">IPFS</a> .</p><p>Ecco un esempio di imageURI di IPFS che mostra l' <a href="https://opensea.io/assets/0x8d78277bc2c63f07efc2c0c8a8512de4ad459a05/1">Elfo Chainlink</a> creato nel <a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">tutorial di Dungeons and Dragons</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/03/image-3.png" class="kg-image" alt="image-3" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/03/image-3.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2022/03/image-3.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2022/03/image-3.png 1030w" sizes="(min-width: 720px) 720px" width="1030" height="1356" loading="lazy"><figcaption>L'elfo Chainlink</figcaption></figure><p>Non abbiamo impostato un tokenURI per il semplice NFT perché volevamo mostrare solo un esempio di base.</p><p>Passiamo ora all'NFT avanzato, così possiamo vedere alcune delle straordinarie funzionalità che possiamo ottenere con i metadati on-chain, avere il rendering NFT su opensea e creare Dogie!</p><p>Se vuoi un video di ripasso sulla sezione che abbiamo appena esaminato, segui la <a href="https://www.youtube.com/watch?v=ZH_7nEIJDUY">distribuzione di un semplice video NFT.</a></p><h2 id="nft-dinamici-e-avanzati"><strong>NFT dinamici e avanzati</strong></h2><p><a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">Gli NFT dinamici</a> sono NFT che possono cambiare nel tempo o avere funzionalità a catena che possiamo utilizzare per farli interagire tra loro. Questi sono gli NFT che nel nostro caso, hanno la personalizzazione illimitata per creare interi giochi, mondi o opere d'arte interattive di qualche tipo. Passiamo alla sezione avanzata.</p><h3 id="avvio-rapido-avanzato"><strong>Avvio rapido avanzato</strong></h3><p>Assicurati di avere abbastanza testnet ETH e LINK nel tuo metamask, quindi esegui quanto segue:</p><pre><code>brownie run scripts/advanced_collectible/deploy_advanced.py --network rinkeby
brownie run scripts/advanced_collectible/create_collectible.py --network rinkeby</code></pre><p>Il nostro oggetto da collezione qui è una razza di cane casuale restituita dal <a href="https://docs.chain.link/docs/chainlink-vrf">Chainlink VRF</a>. Chainlink VRF è un modo per ottenere numeri casuali dimostrabili e quindi una vera rarità nei nostri NFT. Quindi vogliamo creare i suoi metadati.</p><pre><code>brownie run scripts/advanced_collectible/create_metadata.py --network rinkeby</code></pre><p>Possiamo quindi caricare facoltativamente questi dati su IPFS in modo da poter avere un tokenURI. Ti mostrerò come farlo più tardi. Per ora, useremo solo il tokenURI di esempio di:</p><pre><code>https://ipfs.io/ipfs/Qmd9MCGtdVz2miNumBHDbvj8bigSgTwnr4SbyH6DNnpWdt?filename=1-PUG.json</code></pre><p>Se scarichi <a href="https://chrome.google.com/webstore/detail/ipfs-companion/nibjojkomfdiaoajekhjakgkdhaomnch?hl=en">IPFS Companion</a> nel tuo browser, puoi utilizzare quell'URL per vedere cosa restituisce l'URI. Assomiglierà &nbsp;a qualcosa del genere:</p><pre><code class="language-json">{
    "name": "PUG",
    "description": "An adorable PUG pup!",
    "image": "https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png",
    "attributes": [
        {
            "trait_type": "cuteness",
            "value": 100
        }
    ]
}</code></pre><p>Quindi possiamo eseguire il nostro script &nbsp;<code>set_tokenuri.py</code>:</p><pre><code>brownie run scripts/advanced_collectible/set_tokenuri.py --network rinkeby</code></pre><p>E otterremo un output come questo:</p><pre><code>Running 'scripts/advanced_collectible/set_tokenuri.py::main'...
Working on rinkeby
Transaction sent: 0x8a83a446c306d6255952880c0ca35fa420248a84ba7484c3798d8bbad421f88e
  Gas price: 1.0 gwei   Gas limit: 44601   Nonce: 354
  AdvancedCollectible.setTokenURI confirmed - Block: 8331653   Gas used: 40547 (90.91%)

Awesome! You can view your NFT at https://testnets.opensea.io/assets/0x679c5f9adC630663a6e63Fa27153B215fe021b34/0
Please give up to 20 minutes, and hit the "refresh metadata" button</code></pre><p>E possiamo premere il link fornito per vedere come appare su Opensea! Potrebbe essere necessario premere il pulsante <code>refresh metadata</code> e attendere qualche minuto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-12.33.42-PM.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Aggiorna metadati</font></font></figcaption></figure><h2 id="la-razza-casuale"><strong>La razza casuale</strong></h2><p>Parliamo di quello che abbiamo appena fatto. Ecco il nostro <code>AdvancedCollectible.sol</code>:</p><pre><code>pragma solidity 0.6.6;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";

contract AdvancedCollectible is ERC721, VRFConsumerBase {
    uint256 public tokenCounter;
    enum Breed{PUG, SHIBA_INU, BRENARD}
    // add other things
    mapping(bytes32 =&gt; address) public requestIdToSender;
    mapping(bytes32 =&gt; string) public requestIdToTokenURI;
    mapping(uint256 =&gt; Breed) public tokenIdToBreed;
    mapping(bytes32 =&gt; uint256) public requestIdToTokenId;
    event requestedCollectible(bytes32 indexed requestId); 


    bytes32 internal keyHash;
    uint256 internal fee;
    uint256 public randomResult;
    constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash)
    public 
    VRFConsumerBase(_VRFCoordinator, _LinkToken)
    ERC721("Dogie", "DOG")
    {
        tokenCounter = 0;
        keyHash = _keyhash;
        fee = 0.1 * 10 ** 18;
    }

    function createCollectible(string memory tokenURI, uint256 userProvidedSeed) 
        public returns (bytes32){
            bytes32 requestId = requestRandomness(keyHash, fee, userProvidedSeed);
            requestIdToSender[requestId] = msg.sender;
            requestIdToTokenURI[requestId] = tokenURI;
            emit requestedCollectible(requestId);
    }

    function fulfillRandomness(bytes32 requestId, uint256 randomNumber) internal override {
        address dogOwner = requestIdToSender[requestId];
        string memory tokenURI = requestIdToTokenURI[requestId];
        uint256 newItemId = tokenCounter;
        _safeMint(dogOwner, newItemId);
        _setTokenURI(newItemId, tokenURI);
        Breed breed = Breed(randomNumber % 3); 
        tokenIdToBreed[newItemId] = breed;
        requestIdToTokenId[requestId] = newItemId;
        tokenCounter = tokenCounter + 1;
    }

    function setTokenURI(uint256 tokenId, string memory _tokenURI) public {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _setTokenURI(tokenId, _tokenURI);
    }
}
</code></pre><p>Usiamo il Chainlink VRF per creare una razza casuale da un elenco di <code>PUG, SHIBA_INU, BRENARD</code>. Questa volta chiamando <code>createCollectible</code>, abbiamo effettivamente avviato una richiesta al nodo Chainlink VRF off-chain e siamo tornati con un numero casuale per creare l'NFT con una di quelle 3 razze.</p><p>L'uso della vera casualità nei tuoi NFT è un ottimo modo per creare una vera rarità e l'uso di un numero casuale di un oracolo Chainlink significa che il tuo numero è probabilmente casuale e non può essere influenzato dai minatori.</p><p>Puoi saperne di più su <a href="https://docs.chain.link/docs/chainlink-vrf">Chainlink VRF nella documentazione</a> .</p><p>Il nodo Chainlink risponde chiamando la funzione <code>fulfillRandomness</code> e crea l'oggetto da collezione in base al numero casuale. Quindi dobbiamo ancora chiamare <code>_setTokenURI</code> per dare al nostro NFT l'aspetto di cui ha bisogno.</p><p>Qui non abbiamo fornito i nostri attributi NFT, ma gli attributi sono un ottimo modo per far combattere e interagire i nostri NFT. Puoi vedere un ottimo esempio di NFT con attributi in questo <a href="https://github.com/PatrickAlphaC/dungeons-and-dragons-nft">esempio di Dungeons and Dragons</a> .</p><h3 id="metadati-da-ipfs"><strong>Metadati da IPFS</strong></h3><p>Stiamo usando IPFS per memorizzare due file:</p><ol><li>L'immagine dell'NFT (l'immagine del carlino)</li><li>Il file tokenURI (il file JSON che include anche il collegamento dell'immagine)</li></ol><p>Usiamo IPFS perché è una piattaforma decentralizzata gratuita. Possiamo aggiungere i nostri tokenURI e immagini a IPFS scaricando <a href="https://docs.ipfs.io/install/ipfs-desktop/">IPFS desktop</a> e premendo il pulsante <code>import</code>.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-12.43.13-PM.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">IPFS aggiunge un file</font></font></figcaption></figure><p>Quindi, possiamo condividere l'URI premendo i 3 punti accanto al file che vogliamo condividere, premendo <code>share link</code> e copiando il collegamento fornito. Possiamo quindi aggiungere questo collegamento nel nostro file &nbsp;<code>set_tokenuri.py</code> per modificare l'URI del token che vogliamo utilizzare.</p><h3 id="persistenza"><strong>Persistenza</strong></h3><p>Tuttavia, se il tokenURI è solo sul nostro nodo, significa che quando il nostro nodo è inattivo, nessun altro può visualizzarlo. Quindi vogliamo che altri <code>pin</code> siano nel nostro NFT. Possiamo utilizzare un servizio di pinning come <a href="https://pinata.cloud/">Pinata</a> per mantenere in vita i nostri dati anche quando il nostro nodo IPFS è inattivo.</p><p>Immagino che in futuro sempre più metadati verranno archiviati su IPFS e altre piattaforme di archiviazione decentralizzate. I server centralizzati possono non funzionare e significherebbe che l'arte di quegli NFT è persa per sempre. Assicurati di controllare dove si trova il tokenURI dell'NFT che usi!</p><p>Mi aspetto anche che più persone utilizzeranno piattaforme dStorage come <a href="https://docs.filecoin.io/">Filecoin</a>, poiché anche l'utilizzo di un servizio di pinning non è decentralizzato come dovrebbe essere.</p><h2 id="andando-avanti"><strong>Andando avanti</strong></h2><p>Se desideri una video guida sull'NFT avanzato, puoi guardare il <a href="https://www.youtube.com/watch?v=tCR7b9p9GiM">video NFT avanzato</a> .</p><p>Ora hai le capacità per creare NFT divertenti, personalizzabili e interattivi e renderli su un mercato.</p><p>Gli NFT sono modi divertenti e potenti per avere artisti accuratamente compensati per tutto il duro lavoro che fanno. Buona fortuna e ricordati di divertirti!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Scorri la pagina verso l'alto – Come scorrere a una sezione particolare con React ]]>
                </title>
                <description>
                    <![CDATA[ Quando sviluppi siti Web e applicazioni utilizzando React e qualsiasi framework React, vorrai aggiungere alcune funzionalità per aiutare i tuoi utenti a navigare nel tuo sito. Queste funzionalità includono i pulsanti di scorrimento verso l'alto e verso il basso, nonché la possibilità di scorrere in qualsiasi punto della pagina. Queste ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/scorri-la-pagina-verso-lalto-come-scorrere-a-una-sezione-particolare-con-react/</link>
                <guid isPermaLink="false">622dc9b1ccdd7f051c455266</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Thu, 31 Mar 2022 08:10:36 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/cover-template-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/scroll-to-top-bottom-and-particular-section-with-react/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">https://www.freecodecamp.org/news/scroll-to-top-bottom-and-particular-section-with-react/</a>
      </p><p>Quando sviluppi siti Web e applicazioni utilizzando React e qualsiasi framework React, vorrai aggiungere alcune funzionalità per aiutare i tuoi utenti a navigare nel tuo sito.</p><p>Queste funzionalità includono i pulsanti di scorrimento verso l'alto e verso il basso, nonché la possibilità di scorrere in qualsiasi punto della pagina. Queste funzionalità sono semplici da implementare e non è nemmeno necessario utilizzare una libreria esterna.</p><p>Ecco cosa costruiremo:</p><figure class="kg-card kg-image-card"><img src="https://paper-attachments.dropbox.com/s_E905133586EAB6C4638491AFFCC4E97219447642982A372CD44239A87CD6207B_1646511494954_scroll+-+gif-+demo.gif" class="kg-image" alt="s_E905133586EAB6C4638491AFFCC4E97219447642982A372CD44239A87CD6207B_1646511494954_scroll+-+gif-+demo" width="600" height="400" loading="lazy"></figure><h2 id="come-scorrere-verso-l-alto-con-react"><strong>Come scorrere verso l'alto con React</strong></h2><p>Esistono diverse librerie e plug-in che puoi utilizzare per aggiungere semplicemente la funzione di scorrimento verso l'alto in React. Ma qui, vedremo come implementare facilmente la funzionalità di scorrimento verso l'alto senza utilizzare alcuna libreria.</p><p>Iniziamo…</p><h3 id="come-implementare-la-logica"><strong>Come implementare la logica</strong></h3><p>In questo tutorial, sfrutteremo gli hook React <code>useState()</code> e <code>useEffect()</code> per gestire rapidamente questa logica.</p><p>Ti consiglio di rendere riutilizzabile questa funzionalità creando un nuovo componente per gestirla. Ad esempio, creerò un componente chiamato <strong><strong>ScrollToTop.js</strong></strong> .</p><p>In questo componente, importeremo prima gli hook <code>useState()</code> e <code>useEffect()</code> di React, seguiti dalla creazione di uno stato per controllare la visibilità del pulsante di scorrimento verso l'alto. Tieni presente che questo è utile solo se desideri che il pulsante venga visualizzato dopo che l'utente ha eseguito uno scorrimento verso il basso per un po' e poi scompaia quando l'utente scorre di nuovo verso l'alto.</p><p>Questo stato verrà impostato su <em>false</em> come valore predefinito.</p><pre><code class="language-react">const [showTopBtn, setShowTopBtn] = useState(false);</code></pre><p>Il passaggio successivo consiste nell'utilizzare l'hook &nbsp;<code>useEffect()</code> per gestire la logica che decide quando il pulsante deve essere visualizzato e quando deve scomparire.</p><p>Quando l'utente scorre la pagina, utilizzeremo <code>addEventListener()</code> per ascoltare un evento di scorrimento. La funzione di callback visualizzerà il pulsante impostando lo stato <code>showTopBtn</code> su <code>true</code> se la posizione di scorrimento verticale è maggiore del valore specificato (in questo caso, <code>400</code>), altrimenti lo imposterà <code>false</code> e non lo visualizzerà.</p><pre><code class="language-react">useEffect(() =&gt; {
  window.addEventListener('scroll', () =&gt; {
    if (window.scrollY &gt; 400) {
      setShowTopBtn(true);
    } else {
      setShowTopBtn(false);
    }
  });
}, []);</code></pre><p>Tieni presente che questo continuerà a funzionare mentre scorri verso il basso nel sito Web. Di conseguenza, il secondo parametro dell'hook <code>useEffect()</code> &nbsp;è un array vuoto (<code>[]</code>).</p><p>Finora, siamo stati in grado di controllare quando appare il nostro pulsante "scorri verso l'alto" e quando no. Il passo successivo è scrivere la logica fondamentale che fa scorrere la pagina verso l'alto una volta cliccato il pulsante.</p><p>Per fare ciò, scriveremo una funzione che verrà chiamata ogni volta che l'utente fa clic sul pulsante di scorrimento verso l'alto. Useremo il metodo <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo" rel="noreferrer nofollow noopener"><code>window.scrollTo()</code></a> di JavaScript per farlo. È una tecnica per scorrere una pagina Web fino a un determinato insieme di coordinate nel documento.</p><pre><code class="language-react">const goToTop = () =&gt; {
  window.scrollTo({
    top: 0,
    behavior: 'smooth',
  });
};
</code></pre><p>Nota: <code>window.scrollTo()</code> supporta anche un'opzione <code>behavior</code>, che specifica se lo scorrimento deve muoversi dolcemente (in modo fluido) o avvenire istantaneamente in un solo salto (il valore predefinito <code>auto</code>).</p><p>A questo punto, abbiamo implementato con successo tutta la logica necessaria per creare un pulsante di “scorri verso l'alto” con React. Successivamente aggiungeremo il metodo <code>onclick()</code> al pulsante nel nostro markup.</p><p>Se hai seguito correttamente i passaggi, il tuo codice finale dovrebbe assomigliare a questo:</p><pre><code class="language-react">import React, { useState, useEffect } from 'react';
import { FaAngleUp } from 'react-icons/fa';

import './index.css';

const ScrollToTop = () =&gt; {
  const [showTopBtn, setShowTopBtn] = useState(false);
  useEffect(() =&gt; {
    window.addEventListener('scroll', () =&gt; {
      if (window.scrollY &gt; 400) {
        setShowTopBtn(true);
      } else {
        setShowTopBtn(false);
      }
    });
  }, []);
  const goToTop = () =&gt; {
    window.scrollTo({
      top: 0,
      behavior: 'smooth',
    });
  };

  return (
    &lt;div className="top-to-btm"&gt;
      {showTopBtn &amp;&amp; (
        &lt;FaAngleUp className="icon-position icon-style" onClick={goToTop} /&gt;
      )}
    &lt;/div&gt;
  );
};
export default ScrollToTop;</code></pre><p>Ho incluso il markup, quindi puoi vedere dove ho aggiunto la funzione <code>onClick()</code>.</p><p>Il passaggio successivo consiste nell'aggiungere questo componente a qualsiasi pagina del tuo sito Web in cui desideri che funzioni. Se vuoi che funzioni su tutte le pagine della tua applicazione React, aggiungilo semplicemente al tuo file <code>App.js</code>.</p><p>Questo viene fatto importando prima il componente (ScrollToTop.js) e quindi aggiungendo il componente da qualche parte all'interno del tuo file App.js:</p><pre><code class="language-react">import ScrollToTop from './ScrollToTop.js';

const App = () =&gt; {
    return (
        &lt;div className="App"&gt;
            &lt;ScrollToTop /&gt;
            &lt;div className="section section1"&gt;&lt;/div&gt;
            &lt;div className="section section2"&gt;&lt;/div&gt;
            &lt;div className="section section3"&gt;&lt;/div&gt;
            &lt;div className="section section4"&gt;&lt;/div&gt;
            &lt;div className="section section5"&gt;&lt;/div&gt;
        &lt;/div&gt;
    );
}

export default App;</code></pre><h2 id="come-scorrere-verso-il-basso-con-react"><strong>Come scorrere verso il basso con React</strong></h2><p>Questa è la funzionalità più semplice da aggiungere poiché tutto ciò che devi fare è scrivere una funzione per gestire la logica e quindi chiamarla quando viene premuto il pulsante. Ecco come apparirà la logica:</p><pre><code class="language-react">const scrollToBottom = () =&gt; {
  window.scrollTo({
    top: document.documentElement.scrollHeight,
    behavior: 'smooth',
  });
};</code></pre><p>Semplicemente, quello che stiamo facendo è impostare la posizione <code>scrollTo</code> come altezza dell'intera pagina. Il prossimo passo sarebbe includere il metodo <code>onclick()</code> nel nostro markup per il pulsante.</p><pre><code class="language-jsx">&lt;div className="link btn" onClick={scrollToBottom}&gt;
  Scroll to bottom &lt;MdArrowDropDownCircle /&gt;
&lt;/div&gt;</code></pre><h2 id="come-scorrere-a-una-sezione-particolare-con-react"><strong>Come scorrere a una sezione particolare con React</strong></h2><p>Questo è comunemente usato nelle NavBar su siti Web a pagina singola quando gli utenti desiderano andare a una determinata sezione della pagina Web usando la barra di navigazione. Questo è abbastanza simile a quello che abbiamo fatto.</p><p>Spiegherò l'idea e poi scriveremo una funzione riutilizzabile per eliminare la ripetizione non necessaria del codice.</p><h3 id="come-implementare-la-logica-1"><strong>Come implementare la logica</strong></h3><p>Useremo <code>useRef()</code> per questo, che è un hook integrato di React che accetta un argomento o parametro come valore iniziale e restituisce un riferimento.</p><p>Il riferimento ha una proprietà interessante e utile denominata <strong><strong>c</strong>u<strong>rrent</strong></strong>. L'hook <code>useRef()</code> è simile all'hook JavaScript <code>getElementById()</code>.</p><p>Il primo passo è installare <code>useRef()</code> e quindi creare un ref per accedere alla parte a cui vogliamo scorrere. <code>useRef()</code> accetta un valore che è <code>null</code>.</p><pre><code class="language-react">const aboutSection = useRef(null);</code></pre><p>Il prossimo passo sarebbe aggiungere il ref che abbiamo dichiarato alla sezione in cui desideriamo scorrere:</p><pre><code class="language-react">&lt;div className="section section2" ref={aboutSection}&gt;
  &lt;h2&gt;About Us&lt;/h2&gt;
&lt;/div&gt;</code></pre><p>Una volta completato, passeremo alla logica effettiva responsabile di questa funzionalità. Lo faremo scrivendo una funzione che verrà chiamata ogni volta che un utente preme il Nav-link/pulsante. Quindi il metodo <code>window.scrollTo()</code> scorrerà ora nella posizione specificata.</p><p>In questa funzione, utilizzeremo il metodo <code><a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo" rel="noreferrer nofollow noopener">window.scrollTo</a>()</code> di JavaScript che viene utilizzato per scorrere una pagina Web fino a un determinato insieme di coordinate nel documento.</p><pre><code class="language-react">const scrollDown = () =&gt; {
  window.scrollTo({
    top: aboutSection.current.offsetTop,
    behavior: 'smooth',
  });
};</code></pre><p>Vedrai che forniremo la parte superiore (dove vogliamo andare) come <code>aboutSection.current.offsetTop</code>. <code>aboutSection</code> è la sezione che abbiamo appena acquisito usando ref e ref ha una proprietà chiamata <code>current</code> che abbiamo usato per ottenere l'elemento specifico. Infine abbiamo usato <code>offsetTop</code> per ottenere il confine esterno del particolare elemento/sezione su cui vogliamo scorrere.</p><p>A questo punto, abbiamo implementato con successo tutta la logica necessaria per aiutarci a scorrere verso un punto specifico della nostra homepage usando React. Successivamente, aggiungeremo il metodo <code>onclick()</code> al pulsante nel nostro markup.</p><pre><code class="language-jsx">&lt;li className="link" onClick={scrollDown}&gt;
  About Us
&lt;/li&gt;</code></pre><h3 id="come-rendere-il-nostro-codice-riutilizzabile"><strong>Come rendere il nostro codice riutilizzabile</strong></h3><p>Quando sono necessari così tanti Navlink per navigare in aree diverse di una singola pagina web, è naturale voler ripetere la logica per gestire ogni sezione. Questo è l'approccio sbagliato.</p><p>Possiamo rendere la logica riutilizzabile in questo modo:</p><pre><code class="language-react">const scrollDown = (ref) =&gt; {
  window.scrollTo({
    top: ref.current.offsetTop,
    behavior: 'smooth',
  });
};</code></pre><p>Nel codice sopra, stiamo passando il valore del ref dalla funzione che viene attivata nel pulsante individuale.</p><p>Ecco come potrebbe apparire la tua pagina web:</p><pre><code class="language-react">
&lt;div className="section section1"&gt;
  &lt;div className="link btn"&gt;
    Scroll to bottom &lt;MdArrowDropDownCircle /&gt;
  &lt;/div&gt;
  &lt;ul className="nav-links"&gt;
    &lt;li className="link" onClick={() =&gt; scrollDown(aboutSection)}&gt;
      About Us
    &lt;/li&gt;
    &lt;li className="link" onClick={() =&gt; scrollDown(servcesSection)}&gt;
      Services
    &lt;/li&gt;
    &lt;li className="link" onClick={() =&gt; scrollDown(contactSection)}&gt;
      Contact
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div className="section section2" ref={aboutSection}&gt;
  &lt;h2&gt;About Us&lt;/h2&gt;
&lt;/div&gt;
&lt;div className="section section3" ref={servcesSection}&gt;
  &lt;h2&gt;Services&lt;/h2&gt;
&lt;/div&gt;
&lt;div className="section section4" ref={contactSection}&gt;
  &lt;h2&gt;Contact&lt;/h2&gt;
&lt;/div&gt;</code></pre><h2 id="conclusione"><strong>Conclusione</strong></h2><p>In questo articolo, abbiamo visto come implementare lo scorrimento in alto, in basso e in una posizione specifica con React. Abbiamo usato vari hook React per aiutarci a farlo.</p><p>Puoi controllare <a href="https://github.com/olawanlejoel/scroll-react" rel="noreferrer nofollow noopener">questo repository</a> per vedere il codice di implementazione completo. <a href="https://scroll-react-dun.vercel.app/" rel="noreferrer nofollow noopener">Ecco</a> anche il collegamento a un esempio live.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come recuperare i dati in React: foglio degli appunti + esempi ]]>
                </title>
                <description>
                    <![CDATA[ In React esistono molti modi per recuperare i dati da un'API esterna. Ma quale dovresti usare per le tue applicazioni nel 2021? In questo tutorial, esamineremo cinque dei modelli più comunemente utilizzati per recuperare i dati con React effettuando una richiesta HTTP a una API REST. Non vedremo solo come ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-recuperare-i-dati-in-react-cheat-sheet-esempi/</link>
                <guid isPermaLink="false">6224e65bdb2217050c2ed7ff</guid>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Tue, 29 Mar 2022 09:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/how-to-fetch-data-in-react.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/fetch-data-react/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Fetch Data in React: Cheat Sheet + Examples</a>
      </p><p>In React esistono molti modi per recuperare i dati da un'API esterna. Ma quale dovresti usare per le tue applicazioni nel 2021?</p><p>In questo tutorial, esamineremo cinque dei modelli più comunemente utilizzati per recuperare i dati con React effettuando una richiesta HTTP a una API REST.</p><p>Non vedremo solo come recuperare i dati, ma anche come gestire al meglio il caricamento e lo stato di errore durante il recupero dei dati.</p><p>Iniziamo!</p><blockquote>Per tutti questi esempi, utilizzeremo un endpoint della popolare API Placeholder JSON, ma puoi utilizzare una API che hai creato (come un'API Node con Express) o qualsiasi altra API pubblica.</blockquote><h2 id="1-come-recuperare-i-dati-in-react-utilizzando-l-api-fetch">1. Come recuperare i dati in React utilizzando l'API Fetch</h2><p>Il modo più accessibile per recuperare i dati con React è utilizzare l'API Fetch.</p><p>L'API Fetch è uno strumento integrato nella maggior parte dei browser moderni sull'oggetto window (<code>window.fetch</code>) e ci consente di effettuare richieste HTTP molto facilmente utilizzando promesse JavaScript.</p><p>Per fare una semplice richiesta GET con fetch dobbiamo solo includere l'URL endpoint a cui vogliamo fare la nostra richiesta. Vogliamo fare questa richiesta una volta che il nostro componente React è stato montato.</p><p>Per fare ciò, facciamo la nostra richiesta all'interno dell'hook useEffect e ci assicuriamo di fornire un array di dipendenze vuoto come secondo argomento, in modo che la nostra richiesta venga effettuata solo una volta (supponendo che non dipenda da nessun altro dato nel nostro componente).</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/clip-1-fetch-min.gif" class="kg-image" alt="clip-1-fetch-min" width="600" height="400" loading="lazy"></figure><p>Durante la prima callback &nbsp;<code>.then()</code>, controlliamo se riceviamo la risposta corretta (<code>response.ok</code>). In tal caso, restituiamo la nostra risposta per passarla alla funzione successiva, quindi la richiamiamo come dati JSON, poiché sono i dati che otterremo dalla nostra API di<em> Random User</em>.</p><p>Se non è una risposta corretta, si presume che si sia verificato un errore durante la richiesta. Usando fetch, dobbiamo gestire noi stessi gli errori, quindi lanciamo un errore <code>response</code> affinché venga gestito dal nostro callback <code>catch</code>.</p><p>Qui nel nostro esempio stiamo mettendo i nostri dati relativi all'errore nello stato con <code>setError</code>. Se c'è un errore, restituiamo il testo "Error!".</p><blockquote>Nota che puoi anche visualizzare un messaggio di errore dall'oggetto errore che abbiamo inserito nello stato usando <code>error.message</code>.</blockquote><p>Usiamo la callback <code>.finally()</code> come funzione che viene sempre chiamata sia che la nostra promessa si è risolta con successo che non. In essa, abbiamo impostato <code>loading</code> su false, in modo da non vedere più il nostro testo di caricamento.</p><p>Quindi vediamo o i nostri dati sulla pagina se la richiesta è stata effettuata con successo, o in caso contrario, che c'è stato un errore nell'effettuare la richiesta .</p><h2 id="2-come-recuperare-i-dati-in-react-utilizzando-axios"><strong>2. Come recuperare i dati in React utilizzando Axios</strong></h2><p>Il secondo approccio per fare richieste con React consiste nell'usare la libreria <code>axios</code>.</p><p>In questo esempio, modificheremo semplicemente il nostro esempio Fetch installando prima <code>axios</code> usando npm:</p><pre><code class="language-bash">npm install axios</code></pre><p>Quindi lo importeremo nella parte superiore del file del nostro componente.</p><p>Ciò che axios ci consente di fare è utilizzare la stessa identica sintassi di promessa di fetch, ma invece di utilizzare il nostro primo callback per determinare manualmente se la risposta è corretta e in caso contrario, &nbsp;generare un errore, axios si occupa di questo per noi.</p><p>Inoltre, ci consente in quel primo callback di ottenere i dati JSON da <code>response.data</code>.</p><p>La cosa conveniente dell'utilizzo di axios è che ha una sintassi molto più breve, cosa che ci consente di ridurre il codice, oltre a includere molti strumenti e funzionalità che mancano nella API fetch.</p><p>Tutte queste ragioni sono il motivo per cui è diventata la libreria HTTP di riferimento per gli sviluppatori React.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/clip-2-axios-min.gif" class="kg-image" alt="clip-2-assi-min" width="600" height="400" loading="lazy"></figure><h2 id="3-come-recuperare-i-dati-in-react-utilizzando-la-sintassi-async-await"><strong>3. Come recuperare i dati in React utilizzando la sintassi async/await</strong></h2><p>In ES7 è diventato possibile risolvere le promesse utilizzando la sintassi <code>async / await</code>.</p><p>Il vantaggio di questo approccio è che ci consente di rimuovere le nostre callback <code>.then()</code>, <code>.catch()</code>, e <code>.finally()</code> e di recuperare semplicemente i nostri dati risolti in modo asincrono scrivendo del codice sincrono e tutto ciò senza promesse.</p><p>In altre parole, non dobbiamo fare affidamento sulle funzioni di callback quando utilizziamo async / await con React.</p><p>Dobbiamo essere consapevoli del fatto che quando usiamo <code>useEffect</code>, la funzione effetto (il primo argomento) non può essere trasformata in una funzione <code>async</code>.</p><p>Se diamo un'occhiata all'errore di linting che React ci dà se abbiamo usato Create React per costruire il nostro progetto, ci verrà detto che questa funzione non può essere asincrona per prevenire la <em>race condition</em>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/clip-3-async-await-min.gif" class="kg-image" alt="clip-3-asincrono-attendono-min" width="600" height="400" loading="lazy"></figure><p>Di conseguenza, invece di rendere quella funzione asincrona, possiamo semplicemente creare nel nostro componente &nbsp;una funzione asincrona separata, che possiamo chiamare in modo sincrono. Cioè, senza anteporre la parola chiave <code>await</code> .</p><p>In questo esempio, creiamo una funzione asincrona chiamata <code>getData</code>. Chiamandola in modo sincrono all'interno di useEffect, possiamo recuperare i nostri dati come ci aspetteremmo.</p><h2 id="4-come-recuperare-i-dati-in-react-utilizzando-un-hook-react-personalizzato-usefetch-"><strong>4. Come recuperare i dati in React utilizzando un hook React personalizzato (useFetch)</strong></h2><p>Nel tempo, potresti renderti conto che diventa un po' noioso e dispendioso in termini di tempo continuare a scrivere l'hook useEffect con tutto il suo boilerplate all'interno di ogni componente in cui desideri recuperare i dati.</p><p>Per ridurre il nostro codice riutilizzato, possiamo usare un hook personalizzato come un'astrazione speciale, che possiamo scrivere noi stessi da una libreria di terze parti (come se fossimo qui, usando la libreria <code>react-fetch-hook</code>).</p><p>Un hook personalizzato che effettua la nostra richiesta HTTP ci consente di rendere i nostri componenti molto più concisi. Tutto quello che dobbiamo fare è chiamare il nostro hook nella parte superiore del nostro componente.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/clip-4-usefetch-min.gif" class="kg-image" alt="clip-4-usefetch-min" width="600" height="400" loading="lazy"></figure><p>In questo caso, otteniamo tutti i dati, il caricamento e lo stato di errore di cui abbiamo bisogno per poter utilizzare la stessa struttura per il nostro componente come prima, ma senza dover usare <code>useEffect</code>. Inoltre, non abbiamo più bisogno di scrivere imperativamente come risolvere la nostra promessa dalla nostra richiesta GET ogni volta che vogliamo fare una richiesta.</p><h2 id="5-come-recuperare-i-dati-in-react-utilizzando-la-libreria-di-query-react"><strong>5. Come recuperare i dati in React utilizzando la libreria di Query React</strong></h2><p>L'uso di hook personalizzati è un ottimo approccio per scrivere richieste HTTP molto più concise per ottenere i nostri dati e tutti i relativi stati. Ma una libreria che porta davvero il recupero dei dati con gli hook al livello successivo è React Query.</p><p>React Query non solo ci consente di utilizzare hook personalizzati che possiamo riutilizzare tra i nostri componenti in modo conciso, ma ci offre anche una grande quantità di strumenti di gestione dello stato per essere in grado di controllare quando, come e con quale frequenza i nostri dati vengono recuperati .</p><p>In particolare, la query React ci fornisce una cache, che puoi vedere di seguito tramite React Query Devtools. Questo ci consente di gestire facilmente le richieste che abbiamo fatto in base al valore della chiave che specifichiamo per ogni richiesta.</p><p>Per le richieste seguenti, la nostra query per i nostri dati utente casuali è identificata dalla stringa 'random-user' (fornita come primo argomento per <code>useQuery</code>).</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/clip-5-react-query-min.gif" class="kg-image" alt="clip-5-reagire-query-min" width="600" height="400" loading="lazy"></figure><p>Facendo riferimento a quella chiave, possiamo fare cose potenti come recuperare, convalidare o ripristinare le nostre varie query.</p><blockquote>Se ci affidiamo alla nostra soluzione di hook personalizzata o useEffect, recupereremo i nostri dati ogni volta che il nostro componente viene montato. Fare questo nella maggior parte dei casi non è necessario. Se il nostro stato esterno non è cambiato, idealmente non dovremmo mostrare lo stato di caricamento ogni volta che visualizziamo il nostro componente.</blockquote><p>React Query migliora notevolmente la nostra esperienza utente provando a servire prima i nostri dati dalla sua cache e quindi aggiornando i dati in background per visualizzare le modifiche se il nostro stato API è cambiato.</p><p>Ciò offre anche un arsenale di potenti strumenti per gestire meglio le nostre richieste in base a come i nostri dati cambiano attraverso la nostra richiesta.</p><p>Ad esempio, se la nostra applicazione ci ha consentito di aggiungere un utente diverso, potremmo voler recuperare quella query, una volta che l'utente è stato aggiunto. Se sappiamo che la query viene modificata molto frequentemente, potremmo voler specificare che dovrebbe essere aggiornata ogni minuto circa. O essere aggiornata ogni volta che l'utente clicca sulla la scheda della finestra.</p><p>In breve, React Query è la soluzione ideale non solo per effettuare richieste in modo conciso, ma anche per gestire in modo efficiente ed efficace i dati che vengono restituiti per le nostre richieste HTTP attraverso i componenti della nostra app.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ L'Hook useEffect di React per principianti assoluti ]]>
                </title>
                <description>
                    <![CDATA[ Se hai difficoltà a capire l'hook useEffect, non sei il solo. Sia i principianti che gli sviluppatori esperti trovano che sia uno degli hook più difficili da capire, perché richiede la comprensione di alcuni concetti di programmazione non familiari. In questa guida rapida, illustreremo il motivo per cui esiste questo ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/hook-useeffect-react/</link>
                <guid isPermaLink="false">622bad6907e6d705139eba6f</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Mon, 21 Mar 2022 10:35:34 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/react-useeffect-absolute-beginners.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/react-useeffect-absolute-beginners/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The React useEffect Hook for Absolute Beginners</a>
      </p><p>Se hai difficoltà a capire l'hook useEffect, non sei il solo.</p><p>Sia i principianti che gli sviluppatori esperti trovano che sia uno degli hook più difficili da capire, perché richiede la comprensione di alcuni concetti di programmazione non familiari.</p><p>In questa guida rapida, illustreremo il motivo per cui esiste questo hook, come comprenderlo meglio e come utilizzarlo correttamente oggi nei tuoi progetti React.</p><h2 id="perch-si-chiama-useeffect"><strong><strong>Perché si chiama useEffect?</strong></strong></h2><p>Quando quando i principali Hook di React sono stati aggiunto alla libreria nel 2018 (useState, useEffect e così via), molti sviluppatori sono rimasti disorientati dal nome di questo hook: "useEffect".</p><p>Che cos'è esattamente un "effetto"?</p><p>La parola effetto si riferisce a un termine di programmazione funzionale chiamato <strong><strong>"effetto collaterale"</strong></strong> .</p><p>Ma per capire davvero cos'è un effetto collaterale, dobbiamo prima cogliere il concetto di <strong><strong>funzione</strong></strong> <strong><strong>pura</strong></strong>.</p><p>Potresti non saperlo, ma la maggior parte dei componenti di React sono pensati per essere funzioni pure.</p><p>Può essere strano pensare ai componenti di React come funzioni, ma lo sono.</p><p>Lo si capisce vedendo come un normale componente funzione di React venga dichiarato come una funzione JavaScript:</p><pre><code class="language-js">function MyReactComponent() {}</code></pre><p>La maggior parte dei componenti React sono funzioni pure, il che significa che ricevono un input e producono un output prevedibile in JSX.</p><p>Per una funzione JavaScript l'input sono gli argomenti. Invece, qual è l'input per un componente React? <strong>Le proprietà</strong>!</p><p>Qui abbiamo un componente <code>User</code> che ha dichiarata una proprietà <code>name</code>. All'interno di <code>User</code>, il valore della proprietà viene visualizzato in un elemento di intestazione.</p><pre><code class="language-js">export default function App() {
  return &lt;User name="John Doe" /&gt;   
}
  
function User(props) {
  return &lt;h1&gt;{props.name}&lt;/h1&gt;; // John Doe
}</code></pre><p>Questo è una funzione pura perché, dato lo stesso input, restituirà <strong><strong>sempre</strong></strong> lo stesso output.</p><p>Se passiamo a <code>User</code> una proprietà <code>name</code> con valore "John Doe", il nostro output sarà sempre John Doe.</p><p>Potresti dire: "Chi se ne frega? Perché c'è un nome anche per questo?"</p><p>Le funzioni pure hanno il grande vantaggio di essere <strong><strong>prevedibili, affidabili e facili da testare.</strong></strong></p><p>Questo è comparato a quando dobbiamo eseguire un effetto collaterale nel nostro componente.</p><h2 id="quali-sono-gli-effetti-collaterali-di-react"><strong><strong>Quali sono gli effetti collaterali di React?</strong></strong></h2><p>Gli effetti collaterali non sono prevedibili perché sono azioni che vengono eseguite con il "mondo esterno".</p><p>Eseguiamo un effetto collaterale quando dobbiamo raggiungere l'esterno dei nostri componenti React per fare qualcosa. L'esecuzione di un effetto collaterale, tuttavia, non ci darà un risultato prevedibile.</p><p>Pensa se dovessimo richiedere dati (come i post di un blog) da un server che ha fallito e invece dei dati dei nostri post, ci fornisce una risposta con codice di stato 500.</p><p>Praticamente tutte le applicazioni si basano sugli effetti collaterali per funzionare in un modo o nell'altro, a parte le applicazioni più semplici.</p><p>Gli effetti collaterali comuni includono:</p><ul><li>Effettuare una richiesta a un'API per i dati da un server back-end</li><li>Interagire con le API del browser (ovvero &nbsp;utilizzare direttamente <code>document</code> o <code>window</code>)</li><li>Utilizzare funzioni di temporizzazione imprevedibili come <code>setTimeout</code> o <code>setInterval</code></li></ul><p>Questo è il motivo per cui esiste useEffect: per fornire un modo per gestire l'esecuzione di questi effetti collaterali in quelli che altrimenti sarebbero componenti React puri.</p><p>Ad esempio, se volessimo modificare il tag meta del titolo per visualizzare il nome dell'utente nella scheda del browser, potremmo <em><em>farlo</em></em> all'interno del componente stesso, ma non dovremmo.</p><pre><code class="language-js">function User({ name }) {
  document.title = name; 
  // Questo è un effetto collaterale. Non farlo nel corpo del componente!
    
  return &lt;h1&gt;{name}&lt;/h1&gt;;   
}</code></pre><p>Se eseguiamo un effetto collaterale direttamente nel corpo del nostro componente, interferisce con il rendering del nostro componente React.</p><p>Gli effetti collaterali dovrebbero essere separati dal processo di rendering. Se abbiamo bisogno di eseguire un effetto collaterale, dovrebbe essere fatto rigorosamente <em><em>dopo</em></em> il rendering del nostro componente.</p><p>Questo è ciò che ci offre useEffect.</p><p>In breve, <strong><strong>useEffect è uno strumento che ci consente di interagire con il mondo esterno ma non influisce sul rendering o sulle prestazioni del componente in cui si trova.</strong></strong></p><h2 id="come-si-usa-useeffect"><strong><strong>Come si usa useEffect?</strong></strong></h2><p>La sintassi di base di useEffect è la seguente:</p><pre><code class="language-js">// 1. importa useEffect
import { useEffect } from 'react';

function MyComponent() {
  // 2. chiamalo prima che il JSX venga restituito
  // 3. passagli due argomenti: una funzione e un array
  useEffect(() =&gt; {}, []);
  
  // return ...
}</code></pre><p>Il modo corretto per eseguire l'effetto collaterale nel nostro componente <code>User</code> è il seguente:</p><ol><li>Importiamo <code>useEffect</code> &nbsp;da "react"</li><li>Lo chiamiamo nel nostro componente prima che il JSX venga restituito </li><li>Gli passiamo due argomenti: una funzione e un array</li></ol><pre><code class="language-js">import { useEffect } from 'react';

function User({ name }) {
  useEffect(() =&gt; {
    document.title = name;
  }, [name]);
    
  return &lt;h1&gt;{name}&lt;/h1&gt;;   
}</code></pre><p>La funzione passata a useEffect è una funzione di callback che verrà chiamata dopo il rendering del componente.</p><p>In questa funzione possiamo eseguire l'effetto collaterale, o multipli effetti colllaterali se lo desideriamo.</p><p>Il secondo argomento è un array, chiamato array delle dipendenze, che dovrebbe includere tutti i valori su cui si basa il effetto collaterale.</p><p>Nel nostro esempio sopra, poiché stiamo cambiando il titolo in base a un valore nell'ambito esterno, <code>name</code>, dobbiamo includerlo all'interno dell'array delle dipendenze.</p><p>Quello che farà questo array è controllare e vedere se un valore (in questo caso il nome) è cambiato tra i rendering. In tal caso, eseguirà nuovamente la nostra funzione di utilizzo dell'effetto.</p><p>Questo ha senso perché se il nome cambia, vogliamo visualizzare il nuovo nome e quindi eseguire nuovamente il nostro effetto collaterale.</p><h2 id="come-correggere-gli-errori-comuni-con-useeffect"><strong><strong>Come correggere gli errori comuni con useEffect</strong></strong></h2><p>Ci sono alcuni dettagli sottili di cui essere consapevoli per evitare errori con useEffect.</p><p>Se non fornisci affatto l'array delle dipendenze e fornisci solo una funzione per useEffect, <strong>questa</strong> <strong><strong>verrà eseguit</strong>a<strong> dopo ogni rendering</strong></strong> .</p><p>Ciò può causare problemi quando si tenta di aggiornare lo stato all'interno dell'hook useEffect.</p><p>Se dimentichi di fornire le tue dipendenze correttamente e stai impostando un pezzo di stato locale quando lo stato viene aggiornato, il comportamento predefinito di React è di rieseguire il rendering del componente. E quindi, poiché useEffect viene eseguito dopo ogni singolo rendering senza l'array delle dipendenze, avremo un ciclo infinito.</p><pre><code class="language-js">function MyComponent() {
  const [data, setData] = useState([])  
    
  useEffect(() =&gt; {
    fetchData().then(myData =&gt; setData(myData))
    // Errore! useEffect viene eseguito dopo ogni rendering senza l'array delle dipendenze, causando un ciclo infinito
  }); 
}</code></pre><p>Dopo il primo rendering, useEffect verrà eseguito, lo stato verrà aggiornato, il che provocherà un re-render, che farà sì che useEffect venga eseguito nuovamente, riavviando il processo all'infinito.</p><p>Questo è chiamato un <strong><strong>ciclo infinito</strong></strong> e questo effettivamente interrompe la nostra applicazione.</p><p>Se stai aggiornando lo stato all'interno di useEffect, assicurati di fornire un array di dipendenze vuoto. Se fornisci un array vuoto, cosa che ti consiglio di fare per impostazione predefinita ogni volta che usi useEffect, ciò farà sì che la funzione dell'effetto venga eseguita solo una volta dopo che il componente è stato renderizzato la prima volta.</p><p>Un esempio comune per questo è il recupero dei dati. Per un componente, potresti voler recuperare i dati una volta, metterli nello stato e quindi visualizzarli nel tuo JSX.</p><pre><code class="language-js">function MyComponent() {
  const [data, setData] = useState([])  
    
  useEffect(() =&gt; {
    fetchData().then(myData =&gt; setData(myData))
    // Corretta! Viene eseguito una volta dopo il rendering con array vuoto
  }, []); 
   
  return &lt;ul&gt;{data.map(item =&gt; &lt;li key={item}&gt;{item}&lt;/li&gt;)}&lt;/ul&gt;
}</code></pre><h2 id="qual-la-funzione-di-pulizia-in-useeffect"><strong><strong>Qual è la funzione di pulizia in useEffect?</strong></strong></h2><p>La parte finale dell'esecuzione corretta degli effetti collaterali in React è la <strong><strong>funzione di pulizia degli effetti</strong></strong> .</p><p>A volte i nostri effetti collaterali devono essere eliminati. Ad esempio, se hai un timer per il conto alla rovescia che utilizza la funzione <code>setInterval</code>, quell'intervallo non si interromperà a meno che non utilizziamo la funzione <code>clearInterval</code>.</p><p>Un altro esempio è utilizzare la sottoscrizione con WebSocket. Le sottoscrizioni devono essere "disattivate" quando non le utilizziamo più, ed è a questo che serve la funzione di pulizia.</p><p>Se stiamo impostando lo stato usando &nbsp;<code>setInterval</code> e l'effetto collaterale non viene eliminato, quando il nostro componente si smonta e non lo stiamo più utilizzando, lo stato viene distrutto con il componente, ma la funzione <code>setInterval</code> continuerà a funzionare.</p><pre><code class="language-js">function Timer() {
  const [time, setTime] = useState(0);
    
  useEffect(() =&gt; {
    setInterval(() =&gt; setTime(1), 1000); 
    // conta fino a 1 ogni secondo
    // dobbiamo smettere di usare setInterval quando il componente viene smontato
  }, []);
}</code></pre><p>Il problema con questo se il componente si sta distruggendo, è che <code>setInterval</code> proverà ad aggiornare una variabile, un pezzo di stato <code>time</code> che non esiste più. Questo è un errore chiamato perdita di memoria.</p><p>Per utilizzare la funzione di pulizia, è necessario restituire una funzione dall'interno della funzione useEffect.</p><p>All'interno di questa funzione possiamo eseguire la nostra pulizia, in questo caso utilizzare <code>clearInterval</code> e interrompere <code>setInterval</code>.</p><pre><code class="language-js">function Timer() {
  const [time, setTime] = useState(0);
    
  useEffect(() =&gt; {
    let interval = setInterval(() =&gt; setTime(1), 1000); 

    return () =&gt; {
      // setInterval azzerato quando il componente viene smontato
      clearInterval(interval);
    }
  }, []);
}</code></pre><p>La funzione di pulizia verrà chiamata quando il componente viene smontato.</p><p>Un esempio comune di smontaggio di un componente è il passaggio a una nuova pagina o un nuovo percorso nella nostra applicazione in cui il componente non viene più visualizzato.</p><p>Quando un componente viene smontato, la nostra funzione di pulizia viene eseguita, il nostro intervallo viene cancellato e non viene più visualizzato un errore nel tentativo di aggiornare una variabile di stato che non esiste.</p><p>Infine, la pulizia degli effetti collaterali non è richiesta in tutti i casi. È richiesto solo in alcuni casi, ad esempio quando è necessario interrompere un effetto collaterale ripetuto quando il componente si smonta.<br></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Lo Stato in React per Principianti Assoluti ]]>
                </title>
                <description>
                    <![CDATA[ Uno dei concetti più essenziali che qualsiasi sviluppatore JavaScript moderno deve comprendere è lo stato. Se non capisci lo stato, non sarai in grado di utilizzare e sfruttare appieno le potenti librerie come React per costruire le tue applicazioni. Vediamo esattamente cosa è lo stato, come esiste già ora nelle ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/lo-stato-in-react-per-principianti-assoluti/</link>
                <guid isPermaLink="false">622b901207e6d705139eb9d7</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Mon, 14 Mar 2022 09:43:12 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/react-state-absolute-beginners.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/react-state/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React State for Absolute Beginners</a>
      </p><p>Uno dei concetti più essenziali che qualsiasi sviluppatore JavaScript moderno deve comprendere è lo <strong><strong>stato</strong></strong>.</p><p>Se non capisci lo stato, non sarai in grado di utilizzare e sfruttare appieno le potenti librerie come React per costruire le tue applicazioni.</p><p>Vediamo esattamente cosa è lo stato, come esiste già ora nelle tue applicazioni JavaScript e come React ci consente di gestirlo molto più facilmente con gli hook integrati come <code>useState</code>.</p><h2 id="cos-lo-stato"><strong>Cos'è lo stato?</strong></h2><p>Qualcosa che potrebbe sorprenderti è che qualsiasi sito Web o applicazione che crei con semplice JavaScript coinvolge già lo stato, anche se non è ovvio dove vive.</p><p>Ecco un semplice esempio:</p><p>Diciamo che stiamo costruendo un'applicazione contatore con JavaScript. Vogliamo che questa applicazione sia in grado di visualizzare il conteggio corrente e di aumentare e diminuire il conteggio di uno.</p><p>Consisterà solo nel conteggio corrente e in due pulsanti che rispettivamente aumentano e diminuiscono il conteggio di uno.</p><p>Ecco come apparirà la versione finale della nostra app:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/03/image-2.png" class="kg-image" alt="image-2" width="545" height="336" loading="lazy"><figcaption>L'app contatore finita</figcaption></figure><p>Ecco il markup iniziale per la nostra applicazione:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Counter App&lt;/title&gt;
    &lt;meta charset="UTF-8" /&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div&gt;
      &lt;button&gt;+ 1&lt;/button&gt;
      &lt;span&gt;0&lt;/span&gt;
      &lt;button&gt;- 1&lt;/button&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>In poche parole, <strong><strong>lo stato sono i dati che dobbiamo gestire nel tempo all'interno della nostra applicazione.</strong></strong></p><p>Lo stato viene spesso modificato tramite l'input dell'utente come in questo caso, all'interno della nostra applicazione.</p><p>Qual è lo stato nella app <em>contatore</em>? È il numero del conteggio.</p><p>L'utente può aumentare o diminuire il valore dello stato facendo clic sull'apposito pulsante. La cosa importante è che vogliamo mostrare queste modifiche al nostro utente.</p><h2 id="problemi-con-lo-stato-in-javascript-semplice"><strong>Problemi con lo stato in JavaScript semplice</strong></h2><p>Sebbene lo stato sembri un concetto semplice, ci sono due problemi con la sua gestione quando si utilizza solo normale JavaScript:</p><ol><li>Non è ovvio cosa sia lo stato o dove viva.</li><li>La lettura e l'aggiornamento dello stato sono un processo innaturale e spesso ripetitivo quando si utilizzano API browser native come <code>document</code>.</li></ol><p>Come faremmo per aggiornare lo stato del contatore quando l'utente fa clic su uno dei pulsanti?</p><p>Per prima cosa dobbiamo ottenere un riferimento a ciascun elemento. Per fare ciò in normale JavaScript, è pratica comune aggiungere un attributo <code>id</code> univoco a ciascun elemento, selezionare ogni elemento in JavaScript con il metodo <code>document.querySelector</code> e memorizzare il riferimento in una variabile locale:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Counter App&lt;/title&gt;
    &lt;meta charset="UTF-8" /&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div&gt;
      &lt;button id="increment"&gt;+ 1&lt;/button&gt;
      &lt;span id="count"&gt;0&lt;/span&gt;
      &lt;button id="decrement"&gt;- 1&lt;/button&gt;
    &lt;/div&gt;

    &lt;script&gt;
      const increment = document.querySelector("#increment");
      const count = document.querySelector("#count");
      const decrement = document.querySelector("#decrement");
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Ora che abbiamo i riferimenti a ogni elemento HTML, come facciamo a far funzionare il pulsante di incremento?</p><p>Per prima cosa dobbiamo <em>ascoltare</em> un evento di clic sul nostro pulsante di incremento. Quindi, quando si fa clic sul pulsante, è necessario ottenere il valore di conteggio corrente dall'elemento con <code>id</code> "count".</p><p>Per fare ciò, ci immergiamo nel documento HTML usando l'API <code>document</code> e otteniamo quel valore con <code>count.innerText</code>. Il valore <code>innerText</code> è una stringa, quindi lo convertiamo in un numero, aggiungiamo 1 e riscriviamo quel valore <em><em>in</em> </em><code>count.innerText</code> .</p><p>Per far funzionare il pulsante di decremento, eseguiamo nuovamente gli stessi passaggi con la differenza che usiamo l'espressione <code>Number(count.innerText - 1)</code>.</p><pre><code class="language-js">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Counter App&lt;/title&gt;
    &lt;meta charset="UTF-8" /&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div&gt;
      &lt;button id="increment"&gt;+ 1&lt;/button&gt;
      &lt;span id="count"&gt;0&lt;/span&gt;
      &lt;button id="decrement"&gt;- 1&lt;/button&gt;
    &lt;/div&gt;

    &lt;script&gt;
      const increment = document.querySelector("#increment");
      const count = document.querySelector("#count");
      const decrement = document.querySelector("#decrement");

      increment.addEventListener("click", () =&gt; {
        count.innerText = Number(count.innerText) + 1;
      });

      decrement.addEventListener("click", () =&gt; {
        count.innerText = Number(count.innerText) - 1;
      });
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Non sono molte righe di codice, ma qui puoi vedere che ci sono una serie di passaggi che sono ripetitivi e altri che non sono molto intuitivi:</p><ul><li>Aggiungere un ID arbitrario agli elementi HTML</li><li>Eseguire una query per l'elemento utilizzando JavaScript</li><li>Memorizzare il riferimento all'elemento nella variabile</li><li>Ascoltare l'evento appropriato sull'elemento</li><li>Ottenere il valore dello stato corrente utilizzando l'API <code>document</code></li><li>Riscrivere il nuovo valore di stato nella pagina con <code>.innerText</code></li></ul><p>Queste sono le molte istruzioni di basso livello necessarie per il funzionamento del programma, ma non ci aiutano a pensare allo stato sottostante.</p><p>Come abbiamo visto, lo stato vive nel browser. Ciò significa che dobbiamo prima "trovare" lo stato e poi <strong><strong>imperativamente</strong></strong> (in un modo che il computer capisce meglio di noi) aggiornare quel valore.</p><p>Fortunatamente, React ci offre un modo molto più semplice per aggiornare lo stato e <em><em>pensare</em></em> allo stato.</p><h2 id="in-che-modo-react-ci-aiuta-a-gestire-lo-stato"><strong>In che modo React ci aiuta a gestire lo stato?</strong></h2><p>Un vantaggio significativo nell'utilizzo di React e il motivo per cui è nel tuo interesse utilizzare React per sviluppare le tue applicazioni JavaScript è che offre schemi molto più semplici per aggiornare lo stato.</p><p>A differenza del normale JavaScript, React si occupa del difficile lavoro di aggiornare ciò che l'utente vede. Tutto quello che dobbiamo fare è dirgli quale stato stiamo gestendo e quale dovrebbe essere il nuovo valore.</p><p>Invece di avere lo stato che vive all'interno del browser e doverlo trovare ogni volta che dobbiamo leggerlo o aggiornarlo, possiamo semplicemente inserirlo in una variabile e quindi aggiornare il valore di quella variabile. Dopo averlo fatto, l'aggiornamento e il nuovo valore verranno visualizzati agli utenti.</p><p><strong><strong>Questo è l'intero concetto di gestione dello stato in React.</strong></strong></p><p>Invece di usare un documento HTML, possiamo scrivere tutto il nostro markup all'interno di un componente React.</p><p>È scritto in modo identico a una normale funzione JavaScript e visualizza gli stessi elementi HTML utilizzando una sintassi identica chiamata JSX.</p><pre><code class="language-js">export default function Counter() {
  return (
    &lt;div&gt;
      &lt;button&gt;+ 1&lt;/button&gt;
      &lt;span&gt;0&lt;/span&gt;
      &lt;button&gt;- 1&lt;/button&gt;
    &lt;/div&gt;
  );
}</code></pre><p>Come possiamo fare la stessa applicazione <em>contatore </em>con React?</p><p>Nell'app React, una volta identificato qual è lo stato, lo controlliamo utilizzando una variabile JavaScript.</p><p>Questa variabile può essere dichiarata in molti modi. Il modo più diffuso per gestire lo stato dei componenti è con l'<strong><strong>hook</strong> </strong> <strong><strong><code>useState</code></strong></strong> .</p><p>Un <strong><strong>hook</strong></strong> in React funziona in modo molto simile alle normali funzioni JavaScript. Ciò significa che possiamo richiamarlo nella parte superiore del nostro componente e passargli il valore predefinito come valore iniziale per la nostra app <em>contatore</em>.</p><p>Poiché il valore iniziale del nostro valore di conteggio è zero, chiamiamo semplicemente il nostro hook e gli passiamo il valore <code>0</code> e quel valore viene inserito nella nostra variabile di stato.</p><pre><code class="language-js">import { useState } from 'react';

export default function Counter() {
  // il valore count vive ed è gestito qui!
  const [count] = useState(0);  
    
  return (
    &lt;div&gt;
      &lt;button&gt;+ 1&lt;/button&gt;
      &lt;span&gt;{count}&lt;/span&gt; {/* usa le parentesi graffe per aggiungere il valore di count in JSX: 0 */}
      &lt;button&gt;- 1&lt;/button&gt;
    &lt;/div&gt;
  );
}</code></pre><p>Non c'è più bisogno di usare <code>count.innerText</code>. Possiamo semplicemente stampare e leggere il valore del nostro stato usando <code>count</code>.</p><p>Proprio come qualsiasi variabile JavaScript, possiamo nominarla come vogliamo, non deve essere necessariamente chiamata <code>count</code>: potresti &nbsp;letteralmente chiamarla con qualsiasi altra parola purché sia ​​un nome JavaScript valido.</p><p>Il valore restituito da <code>useState</code> è un array, quando lo destrutturiamo, il primo valore destrutturato è la variabile di stato. il secondo è la funzione per aggiornare lo stato.</p><pre><code class="language-js">import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);  
    
  return (
    &lt;div&gt;
      &lt;button&gt;+ 1&lt;/button&gt;
      &lt;span&gt;{count}&lt;/span&gt;
      &lt;button&gt;- 1&lt;/button&gt;
    &lt;/div&gt;
  );
}</code></pre><p>Come facciamo a far funzionare il pulsante di incremento?</p><p>Ecco cosa <em><em>non</em></em> dobbiamo fare:</p><ul><li>Non abbiamo bisogno di aggiungere un <code>id</code> agli elementi HTML</li><li>Non abbiamo bisogno di esaminare il DOM e capire quale pulsante è</li><li>Non è necessario ascoltare un evento di clic con <code>document.addEventListener</code></li></ul><p>Per aggiornare lo stato quando fai clic su un pulsante, aggiungi la prop <code>onClick</code> a ciascun pulsante, in questo modo puoi chiamare una funzione quando il pulsante viene premuto dall'utente.</p><p>Per il pulsante di incremento, aggiorneremo lo stato passando <code>count + 1</code> a <code>setCount</code>, e per il pulsante di decremento, passeremo <code>count - 1</code> a <code>setCount</code>.</p><pre><code class="language-js">import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);  
    
  function incrementCount() {
    setCount(count + 1);
  }
    
  function decrementCount() {
    setCount(count - 1);   
  }
    
  return (
    &lt;div&gt;
      &lt;button onClick={incrementCount}&gt;+ 1&lt;/button&gt;
      &lt;span&gt;{count}&lt;/span&gt;
      &lt;button onClick={decrementCount}&gt;- 1&lt;/button&gt;
    &lt;/div&gt;
  );
}</code></pre><p>Questo è tutto il codice di cui abbiamo bisogno per creare un'app contatore funzionante con React.</p><p>Quando ogni pulsante viene premuto e lo stato viene aggiornato, React eseguirà tutto il lavoro di aggiornamento della pagina in modo che l'utente possa vedere il nuovo stato.</p><p>Questo è il grande vantaggio dell'utilizzo di React rispetto al normale JavaScript: quando lo stato è gestito utilizzando hook come <code>useState</code> e React si occupa di aggiornare in modo efficiente ciò che l'utente vede, possiamo creare app più semplici e affidabili in cui lo stato è facile da vedere, leggere e aggiornare.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come creare un sito Web portfolio con React ]]>
                </title>
                <description>
                    <![CDATA[ Oggi creerai una delle app più importanti che puoi costruire per te stesso: il tuo portfolio da sviluppatore. Ogni sviluppatore React o sviluppatore web in generale, deve essere in grado di mostrare ciò che può fare a qualsiasi potenziale cliente o datore di lavoro. Questo è esattamente ciò che costruiremo ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-creare-un-sito-web-portfolio-con-react/</link>
                <guid isPermaLink="false">6228f10c07e6d705139eb4db</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Portfolio ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Fri, 11 Mar 2022 09:52:17 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/react-portfolio-2021.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/build-portfolio-website-react/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How To Build A Simple Portfolio Blog With Next.js</a>
      </p><p>Oggi creerai una delle app più importanti che puoi costruire per te stesso: il tuo portfolio da sviluppatore.</p><p>Ogni sviluppatore React o sviluppatore web in generale, deve essere in grado di mostrare ciò che può fare a qualsiasi potenziale cliente o datore di lavoro.</p><p>Questo è esattamente ciò che costruiremo in questa guida, con l'aiuto di una serie di strumenti standard del settore, tra cui React, Tailwind CSS e Netlify.</p><p>Iniziamo!</p><h2 id="come-sar-il-portfolio"><strong>Come sarà il Portfolio?</strong></h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/portfolio-1-min.gif" class="kg-image" alt="portafoglio-1-min" width="600" height="400" loading="lazy"></figure><p>Questa è la versione finale del portfolio che creerai.</p><p>Conterrà informazioni su di te, quali progetti hai realizzato, quali abilità hai utilizzato per realizzare quei progetti e includerà un modulo di contatto per i clienti o i datori di lavoro per contattarti.</p><h2 id="quali-strumenti-utilizzeremo"><strong>Quali strumenti utilizzeremo?</strong></h2><ul><li>Useremo React per creare l'interfaccia utente dell'app. Ci consentirà di comporre ogni parte della nostra landing page attraverso componenti riutilizzabili ed estendere la nostra app se vogliamo aggiungere funzionalità aggiuntive, come un blog.</li><li>Per definire lo stile della nostra applicazione, utilizzeremo Tailwind CSS. Per dare alla nostra app un aspetto professionale, Tailwind ci consentirà di applicare facilmente più stili combinando i nomi delle classi sui nostri elementi React.</li><li>Per pubblicare la nostra app sul web, utilizzeremo il servizio gratuito Netlify. Servirà il nostro progetto su un dominio personalizzato per gli utenti molto rapidamente con l'aiuto di una CDN (rete di distribuzione dei contenuti).</li></ul><h2 id="come-iniziare"><strong>Come iniziare</strong></h2><p><strong><strong><a href="https://reedbarger.com/resources/react-portfolio-2021">Puoi scaricare i file di partenza per il nostro progetto qui.</a></strong></strong></p><p>Quando prendi il codice, tutto ciò che dovrai fare è trascinare la cartella del progetto (decompresso) nell'editor di codice ed eseguire il comando:</p><pre><code class="language-bash">npm install</code></pre><p>E sei a posto!</p><h2 id="di-quali-strumenti-ho-bisogno-per-costruire-il-mio-portfolio"><strong>Di quali strumenti ho bisogno per costruire il mio portfolio?</strong></h2><p>Per eseguire l'intero processo di creazione della nostra app dall'inizio alla distribuzione, dovrai disporre di quanto segue:</p><ol><li>Node.js installato sul tuo computer. Puoi scaricarlo su nodejs.org.</li><li>Git installato sul tuo computer. Puoi scaricarlo su git-scm.com.</li><li>Consiglierei di utilizzare VS Code come editor di codice. Puoi scaricarlo su code.visualstudio.com.</li><li>Un account Netlify gratuito su netlify.com.</li><li>Un account GitHub gratuito su github.com.</li></ol><h2 id="come-costruire-la-struttura-del-portfolio"><strong>Come costruire la struttura del Portfolio</strong></h2><p>Il vantaggio dell'utilizzo di React è che potremmo espandere la nostra app a tutte le pagine che vogliamo, molto semplicemente, e aggiungere molti contenuti aggiuntivi.</p><p>Tuttavia, poiché stiamo lavorando solo con una pagina, all'interno del nostro componente <em>app</em> possiamo immaginare &nbsp;molto rapidamente i diversi componenti di cui avremo bisogno. Avremo una barra di navigazione in cima con tutti i collegamenti per passare alle diverse sezioni del nostro portfolio.</p><p>Successivamente, includeremo una sezione informazioni, una sezione per i nostri progetti, testimonianze e infine il nostro modulo di contatto.</p><p>Questa rapida pianificazione ci consente di capire come devono essere nominati i nostri componenti e in quale ordine. Possiamo andare avanti e aggiungerli tutti al nostro file App.js (in src):</p><pre><code class="language-js">// src/App.js

import React from "react";

export default function App() {
  return (
    &lt;main&gt;
      &lt;Navbar /&gt;
      &lt;About /&gt;
      &lt;Projects /&gt;
      &lt;Skills /&gt;
      &lt;Testimonials /&gt;
      &lt;Contact /&gt;
    &lt;/main&gt;
  );
}</code></pre><h2 id="come-creare-i-nostri-componenti"><strong>Come creare i nostri componenti</strong></h2><p>Ora che abbiamo elencato tutti questi componenti, dobbiamo andare avanti e crearli.</p><p>All'interno della nostra cartella di origine (src), creeremo una cartella chiamata <em>components</em> con tutti i file di cui abbiamo bisogno:</p><pre><code>my-portfolio
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│   ├── favicon.ico
│   ├── index.html
│   └── manifest.json
└── src
    ├── App.js
    ├── data.js
    ├── index.css
    ├── index.js
    └── components
        ├── About.js
        ├── Contact.js
        ├── Navbar.js
        ├── Projects.js
        ├── Skills.js
        └── Testimonials.js</code></pre><p>Quindi creeremo la struttura di base di ogni componente React e la esporteremo da quel file con <code>export default</code>:</p><pre><code class="language-js">// src/components/About.js

export default function About() {}

// ripetere la stessa struttura di base per tutti e 6 i componenti</code></pre><p>E infine assicurati di importarlo di nuovo in App.js:</p><pre><code class="language-js">// src/App.js

import React from "react";
import About from "./components/About";
import Contact from "./components/Contact";
import Navbar from "./components/Navbar";
import Projects from "./components/Projects";
import Skills from "./components/Skills";
import Testimonials from "./components/Testimonials";

export default function App() {
  return (
    &lt;main&gt;
      &lt;Navbar /&gt;
      &lt;About /&gt;
      &lt;Projects /&gt;
      &lt;Skills /&gt;
      &lt;Testimonials /&gt;
      &lt;Contact /&gt;
    &lt;/main&gt;
  );
}</code></pre><p><em><em>Nota che ci dovrebbero essere sei componenti in totale.</em></em></p><h2 id="introduzione-a-tailwind-css"><strong>Introduzione a Tailwind CSS</strong></h2><p>Una volta fatto, possiamo cominciare a lavorare con Tailwind CSS, in modo da iniziare a dare alla nostra app un aspetto di base.</p><p>Il vantaggio dell'utilizzo di Tailwind CSS è che non è necessario scrivere manualmente alcuno stile in un foglio di stile CSS. Tutto quello che dobbiamo fare è combinare più classi per creare l'aspetto che vogliamo.</p><p>Ad esempio, per dare al nostro portfolio uno sfondo scuro con testo grigio applicato a tutti i nostri componenti figlio, puoi aggiungere le seguenti classi al nostro elemento <code>main</code>:</p><pre><code class="language-js">// src/App.js

import React from "react";
import About from "./components/About";
import Contact from "./components/Contact";
import Navbar from "./components/Navbar";
import Projects from "./components/Projects";
import Skills from "./components/Skills";
import Testimonials from "./components/Testimonials";

export default function App() {
  return (
    &lt;main className="text-gray-400 bg-gray-900 body-font"&gt;
      &lt;Navbar /&gt;
      &lt;About /&gt;
      &lt;Projects /&gt;
      &lt;Skills /&gt;
      &lt;Testimonials /&gt;
      &lt;Contact /&gt;
    &lt;/main&gt;
  );
}</code></pre><h2 id="come-costruire-il-componente-about"><strong>Come costruire il componente About</strong></h2><p>Iniziamo dalla nostra prima sezione, la sezione <em>About</em>. Questo consisterà in un'introduzione di base a noi stessi e alle competenze in cui siamo specializzati.</p><p>Includerà anche alcuni collegamenti al modulo di contatto e ai nostri progetti passati. Poiché questi collegamenti saranno in parti diverse della stessa pagina, possiamo utilizzare gli hash: "/#projects" e "/#contact".</p><p>Per far funzionare questi collegamenti e per poter saltare a ciascuna sezione, imposteremo l'attributo <code>id</code> della sezione progetti su "projects" e quelli della sezione contatti su "contact".</p><pre><code class="language-js">// src/components/About.js

import React from "react";

export default function About() {
  return (
    &lt;section id="about"&gt;
      &lt;div className="container mx-auto flex px-10 py-20 md:flex-row flex-col items-center"&gt;
        &lt;div className="lg:flex-grow md:w-1/2 lg:pr-24 md:pr-16 flex flex-col md:items-start md:text-left mb-16 md:mb-0 items-center text-center"&gt;
          &lt;h1 className="title-font sm:text-4xl text-3xl mb-4 font-medium text-white"&gt;
            Hi, I'm Reed.
            &lt;br className="hidden lg:inline-block" /&gt;I love to build amazing
            apps.
          &lt;/h1&gt;
          &lt;p className="mb-8 leading-relaxed"&gt;
            Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui
            laborum quasi, incidunt dolore iste nostrum cupiditate voluptas?
            Laborum, voluptas natus?
          &lt;/p&gt;
          &lt;div className="flex justify-center"&gt;
            &lt;a
              href="#contact"
              className="inline-flex text-white bg-green-500 border-0 py-2 px-6 focus:outline-none hover:bg-green-600 rounded text-lg"&gt;
              Work With Me
            &lt;/a&gt;
            &lt;a
              href="#projects"
              className="ml-4 inline-flex text-gray-400 bg-gray-800 border-0 py-2 px-6 focus:outline-none hover:bg-gray-700 hover:text-white rounded text-lg"&gt;
              See My Past Work
            &lt;/a&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div className="lg:max-w-lg lg:w-full md:w-1/2 w-5/6"&gt;
          &lt;img
            className="object-cover object-center rounded"
            alt="hero"
            src="./coding.svg"
          /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><p>Per l'immagine sul lato destro della sezione, sto usando un file svg dalla cartella <code>public</code>, coding.svg.</p><p>Questa immagine funge semplicemente da segnaposto temporaneo. Consiglio vivamente di utilizzare un'immagine reale di te stesso.</p><h2 id="come-costruire-il-componente-projects"><strong>Come costruire il componente Projects</strong></h2><p>La nostra sezione progetti sarà composta da un elemento <code>section</code> con una <code>id</code> di "projects". Questo conterrà una galleria di tutti i progetti che abbiamo creato, che includerà immagini.</p><p>Avrà il titolo del progetto, insieme alle tecnologie che abbiamo utilizzato per realizzarlo, e un collegamento ad esso (se è distribuito).</p><pre><code class="language-js">// src/components/Projects.js

import { CodeIcon } from "@heroicons/react/solid";
import React from "react";
import { projects } from "../data";

export default function Projects() {
  return (
    &lt;section id="projects" className="text-gray-400 bg-gray-900 body-font"&gt;
      &lt;div className="container px-5 py-10 mx-auto text-center lg:px-40"&gt;
        &lt;div className="flex flex-col w-full mb-20"&gt;
          &lt;CodeIcon className="mx-auto inline-block w-10 mb-4" /&gt;
          &lt;h1 className="sm:text-4xl text-3xl font-medium title-font mb-4 text-white"&gt;
            Apps I've Built
          &lt;/h1&gt;
          &lt;p className="lg:w-2/3 mx-auto leading-relaxed text-base"&gt;
            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Explicabo
            facilis repellat ab cupiditate alias vero aliquid obcaecati quisquam
            fuga dolore.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;div className="flex flex-wrap -m-4"&gt;
          {projects.map((project) =&gt; (
            &lt;a
              href={project.link}
              key={project.image}
              className="sm:w-1/2 w-100 p-4"&gt;
              &lt;div className="flex relative"&gt;
                &lt;img
                  alt="gallery"
                  className="absolute inset-0 w-full h-full object-cover object-center"
                  src={project.image}
                /&gt;
                &lt;div className="px-8 py-10 relative z-10 w-full border-4 border-gray-800 bg-gray-900 opacity-0 hover:opacity-100"&gt;
                  &lt;h2 className="tracking-widest text-sm title-font font-medium text-green-400 mb-1"&gt;
                    {project.subtitle}
                  &lt;/h2&gt;
                  &lt;h1 className="title-font text-lg font-medium text-white mb-3"&gt;
                    {project.title}
                  &lt;/h1&gt;
                  &lt;p className="leading-relaxed"&gt;{project.description}&lt;/p&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/a&gt;
          ))}
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><p>Nota che useremo anche la libreria <code>@heroicons/react</code> per poter scrivere alcune icone SVG come componenti di React.</p><p>Stiamo importando una serie di progetti da un file data.js nella stessa cartella. Lì stiamo esportando una serie di oggetti che includono ciascuno i dati di un singolo progetto:</p><pre><code class="language-js">// src/data.js

export const projects = [
  {
    title: "React Reserve",
    subtitle: "MERN Stack",
    description:
      "Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",
    image: "./project-1.gif",
    link: "https://reactbootcamp.com",
  },
  {
    title: "React Tracks",
    subtitle: "React and Python",
    description:
      "Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",
    image: "./project-2.gif",
    link: "https://reedbarger.com",
  },
  {
    title: "DevChat",
    subtitle: "React and Firebase",
    description:
      "Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",
    image: "./project-3.gif",
    link: "https://jsbootcamp.com",
  },
  {
    title: "Epic Todo App",
    subtitle: "React Hooks",
    description:
      "Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium dolore rerum laborum iure enim sint nemo omnis voluptate exercitationem eius?",
    image: "./project-4.gif",
    link: "https://pythonbootcamp.com",
  },
];</code></pre><h2 id="come-costruire-il-componente-delle-skills"><strong>Come costruire il componente delle Skills</strong></h2><p>Compiliamo la sezione per tutte le competenze e le tecnologie che conosciamo.</p><p>Questo consisterà in un semplice elenco di tutti i principali strumenti con cui abbiamo familiarità e che possiamo utilizzare nei progetti dei nostri datori di lavoro o clienti.</p><p>Ancora una volta, importeremo un array dalla nostra cartella dati. Ma questo array è costituito da un numero di stringhe che rappresentano ciascuna delle abilità che conosciamo come JavaScript, React e Node:</p><pre><code class="language-js">// src/components/Skills.js

import { BadgeCheckIcon, ChipIcon } from "@heroicons/react/solid";
import React from "react";
import { skills } from "../data";

export default function Skills() {
  return (
    &lt;section id="skills"&gt;
      &lt;div className="container px-5 py-10 mx-auto"&gt;
        &lt;div className="text-center mb-20"&gt;
          &lt;ChipIcon className="w-10 inline-block mb-4" /&gt;
          &lt;h1 className="sm:text-4xl text-3xl font-medium title-font text-white mb-4"&gt;
            Skills &amp;amp; Technologies
          &lt;/h1&gt;
          &lt;p className="text-base leading-relaxed xl:w-2/4 lg:w-3/4 mx-auto"&gt;
            Lorem ipsum dolor sit amet consectetur, adipisicing elit. Nisi sit
            ipsa delectus eum quo voluptas aspernatur accusantium distinctio
            possimus est.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;div className="flex flex-wrap lg:w-4/5 sm:mx-auto sm:mb-2 -mx-2"&gt;
          {skills.map((skill) =&gt; (
            &lt;div key={skill} className="p-2 sm:w-1/2 w-full"&gt;
              &lt;div className="bg-gray-800 rounded flex p-4 h-full items-center"&gt;
                &lt;BadgeCheckIcon className="text-green-400 w-6 h-6 flex-shrink-0 mr-4" /&gt;
                &lt;span className="title-font font-medium text-white"&gt;
                  {skill}
                &lt;/span&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          ))}
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><h2 id="come-costruire-il-componente-testimonials"><strong>Come costruire il componente Testimonials</strong></h2><p>Nella componente Testimonials, elencheremo un paio di testimonianze, magari di clienti passati o di persone che hanno familiarità con il nostro lavoro.</p><p>Questi consisteranno in un paio di cards che mostreranno la testimonianza stessa, come anche da chi proviene e l'azienda da cui proviene questa persona.</p><p>Stiamo anche importando una array di testimonianze con una serie di oggetti che presentano la citazione, l'immagine, il nome e l'azienda.</p><pre><code class="language-js">// src/components/Testimonials

import React from "react";
import { TerminalIcon, UsersIcon } from "@heroicons/react/solid";
import { testimonials } from "../data";

export default function Testimonials() {
  return (
    &lt;section id="testimonials"&gt;
      &lt;div className="container px-5 py-10 mx-auto text-center"&gt;
        &lt;UsersIcon className="w-10 inline-block mb-4" /&gt;
        &lt;h1 className="sm:text-4xl text-3xl font-medium title-font text-white mb-12"&gt;
          Client Testimonials
        &lt;/h1&gt;
        &lt;div className="flex flex-wrap m-4"&gt;
          {testimonials.map((testimonial) =&gt; (
            &lt;div className="p-4 md:w-1/2 w-full"&gt;
              &lt;div className="h-full bg-gray-800 bg-opacity-40 p-8 rounded"&gt;
                &lt;TerminalIcon className="block w-8 text-gray-500 mb-4" /&gt;
                &lt;p className="leading-relaxed mb-6"&gt;{testimonial.quote}&lt;/p&gt;
                &lt;div className="inline-flex items-center"&gt;
                  &lt;img
                    alt="testimonial"
                    src={testimonial.image}
                    className="w-12 rounded-full flex-shrink-0 object-cover object-center"
                  /&gt;
                  &lt;span className="flex-grow flex flex-col pl-4"&gt;
                    &lt;span className="title-font font-medium text-white"&gt;
                      {testimonial.name}
                    &lt;/span&gt;
                    &lt;span className="text-gray-500 text-sm uppercase"&gt;
                      {testimonial.company}
                    &lt;/span&gt;
                  &lt;/span&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          ))}
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><h2 id="come-costruire-il-componente-contact"><strong>Come costruire il componente Contact</strong></h2><p>Alla fine della nostra <em>landing page</em>, includeremo il nostro modulo di contatto per consentire ai potenziali datori di lavoro di contattarci.</p><p>Questo modulo avrà 3 campi di inserimento: un nome, un'e-mail e un campo per scrivere il messaggio.</p><p>Per gestire questi invii di moduli, utilizzeremo lo strumento Netlify Forms per occuparci molto facilmente del salvataggio di quei messaggi.</p><pre><code class="language-js">// src/components/Contact.js

import React from "react";

export default function Contact() {
  return (
    &lt;section id="contact" className="relative"&gt;
      &lt;div className="container px-5 py-10 mx-auto flex sm:flex-nowrap flex-wrap"&gt;
        &lt;div className="lg:w-2/3 md:w-1/2 bg-gray-900 rounded-lg overflow-hidden sm:mr-10 p-10 flex items-end justify-start relative"&gt;
          &lt;iframe
            width="100%"
            height="100%"
            title="map"
            className="absolute inset-0"
            frameBorder={0}
            marginHeight={0}
            marginWidth={0}
            style={{ filter: "opacity(0.7)" }}
            src="https://www.google.com/maps/embed/v1/place?q=97+warren+st+new+york+city&amp;key=AIzaSyBFw0Qbyq9zTFTd-tUY6dZWTgaQzuU17R8"
          /&gt;
          &lt;div className="bg-gray-900 relative flex flex-wrap py-6 rounded shadow-md"&gt;
            &lt;div className="lg:w-1/2 px-6"&gt;
              &lt;h2 className="title-font font-semibold text-white tracking-widest text-xs"&gt;
                ADDRESS
              &lt;/h2&gt;
              &lt;p className="mt-1"&gt;
                97 Warren St. &lt;br /&gt;
                New York, NY 10007
              &lt;/p&gt;
            &lt;/div&gt;
            &lt;div className="lg:w-1/2 px-6 mt-4 lg:mt-0"&gt;
              &lt;h2 className="title-font font-semibold text-white tracking-widest text-xs"&gt;
                EMAIL
              &lt;/h2&gt;
              &lt;a className="text-indigo-400 leading-relaxed"&gt;
                reedbarger@email.com
              &lt;/a&gt;
              &lt;h2 className="title-font font-semibold text-white tracking-widest text-xs mt-4"&gt;
                PHONE
              &lt;/h2&gt;
              &lt;p className="leading-relaxed"&gt;123-456-7890&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;form
          netlify
          name="contact"
          className="lg:w-1/3 md:w-1/2 flex flex-col md:ml-auto w-full md:py-8 mt-8 md:mt-0"&gt;
          &lt;h2 className="text-white sm:text-4xl text-3xl mb-1 font-medium title-font"&gt;
            Hire Me
          &lt;/h2&gt;
          &lt;p className="leading-relaxed mb-5"&gt;
            Lorem ipsum dolor sit amet consectetur, adipisicing elit. Illum
            suscipit officia aspernatur veritatis. Asperiores, aliquid?
          &lt;/p&gt;
          &lt;div className="relative mb-4"&gt;
            &lt;label htmlFor="name" className="leading-7 text-sm text-gray-400"&gt;
              Name
            &lt;/label&gt;
            &lt;input
              type="text"
              id="name"
              name="name"
              className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"
            /&gt;
          &lt;/div&gt;
          &lt;div className="relative mb-4"&gt;
            &lt;label htmlFor="email" className="leading-7 text-sm text-gray-400"&gt;
              Email
            &lt;/label&gt;
            &lt;input
              type="email"
              id="email"
              name="email"
              className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"
            /&gt;
          &lt;/div&gt;
          &lt;div className="relative mb-4"&gt;
            &lt;label
              htmlFor="message"
              className="leading-7 text-sm text-gray-400"&gt;
              Message
            &lt;/label&gt;
            &lt;textarea
              id="message"
              name="message"
              className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 h-32 text-base outline-none text-gray-100 py-1 px-3 resize-none leading-6 transition-colors duration-200 ease-in-out"
            /&gt;
          &lt;/div&gt;
          &lt;button
            type="submit"
            className="text-white bg-indigo-500 border-0 py-2 px-6 focus:outline-none hover:bg-indigo-600 rounded text-lg"&gt;
            Submit
          &lt;/button&gt;
        &lt;/form&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><h2 id="come-incorporare-una-posizione-di-google-maps"><strong>Come incorporare una posizione di Google Maps</strong></h2><p>A sinistra del modulo includeremo una mappa di Google incorporata in Google Maps di dove ci troviamo.</p><p>Possiamo farlo con l'aiuto di uno strumento online: embed-map.com. Tutto quello che devi fare è inserire la tua posizione e premere "Generate HTML code".</p><p>Nel riga che ci viene fornita, non copiare tutto il codice, solo l'attributo <code>src</code> dell'elemento <em>iframe</em>. Sostituiremo quel valore con il valore <code>src</code> predefinito che abbiamo nel nostro<em> iframe</em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/portfolio-2.png" class="kg-image" alt="portafoglio-2" width="600" height="400" loading="lazy"></figure><p>Per inviare i dati dei moduli a Netlify, Netlify Forms deve riconoscere un modulo come HTML statico. Poiché la nostra app React è controllata da JavaScript e non è costituita da comune HTML, è necessario aggiungere un modulo nascosto al nostro file index.html nella cartella pubblica.</p><pre><code class="language-html">&lt;!-- public/index.html --&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;!-- contenuto di head saltato --&gt;
  &lt;/head&gt;
  &lt;body&gt;

  &lt;form name="contact" netlify netlify-honeypot="bot-field" hidden&gt;
    &lt;input type="text" name="name" /&gt;
    &lt;input type="email" name="email" /&gt;
    &lt;textarea name="message"&gt;&lt;/textarea&gt;
  &lt;/form&gt;
  
    &lt;noscript&gt;You need to enable JavaScript to run this app.&lt;/noscript&gt;
    &lt;div id="root"&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Abbiamo bisogno di nascondere questo modulo, perché non è necessario che venga visualizzato dall'utente ma solo da Netlify.</p><p>Gli daremo l'attributo <code>hidden</code> e &nbsp;l'attributo <code>name</code> che corrisponde al modulo JSX in Contact.js. Dobbiamo anche assegnargli l'attributo <code>netlify</code> in modo che Netlify Forms lo riconosca. Infine, dobbiamo includere tutti gli stessi campi di input del nostro modulo JSX: &nbsp;name, email, message.</p><h2 id="come-inviare-il-modulo-di-contatto"><strong>Come inviare il modulo di contatto</strong></h2><p>Una volta fatto, torneremo a Contact.js. Useremo JavaScript per inviare questo modulo.</p><p>Prima di tutto, creeremo uno stato dedicato per ciascuno dei valori digitati nel modulo per name, email, message:</p><pre><code class="language-js">const [name, setName] = React.useState("");
const [email, setEmail] = React.useState("");
const [message, setMessage] = React.useState("");</code></pre><p>Memorizziamo ciò che l'utente digita in ciascuno degli input nello <em>stato</em> con l'aiuto dell'handler &nbsp;<code>onChange</code>.</p><p>Per gestire l'invio del modulo, aggiungeremo il prop <code>onSubmit</code> ad esso. La funzione che verrà chiamata, <code>handleSubmit</code>, effettuerà una richiesta di post all'endpoint "/" con tutti i nostri dati del modulo.</p><p>Imposteremo le intestazioni della richiesta per indicare che stiamo inviando i dati del modulo. Per il corpo della richiesta, includeremo il nome del modulo e tutti i dati del modulo tramite le variabili di stato &nbsp;<code>name</code>, <code>email</code> e <code>message</code>.</p><pre><code class="language-js">// src/components/Contact.js

import React from "react";

export default function Contact() {
  const [name, setName] = React.useState("");
  const [email, setEmail] = React.useState("");
  const [message, setMessage] = React.useState("");

  function encode(data) {
    return Object.keys(data)
      .map(
        (key) =&gt; encodeURIComponent(key) + "=" + encodeURIComponent(data[key])
      )
      .join("&amp;");
  }

  function handleSubmit(e) {
    e.preventDefault();
    fetch("/", {
      method: "POST",
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
      body: encode({ "form-name": "contact", name, email, message }),
    })
      .then(() =&gt; alert("Message sent!"))
      .catch((error) =&gt; alert(error));
  }

  return (
    &lt;section id="contact" className="relative"&gt;
      &lt;div className="container px-5 py-10 mx-auto flex sm:flex-nowrap flex-wrap"&gt;
        &lt;div className="lg:w-2/3 md:w-1/2 bg-gray-900 rounded-lg overflow-hidden sm:mr-10 p-10 flex items-end justify-start relative"&gt;
          &lt;iframe
            width="100%"
            height="100%"
            title="map"
            className="absolute inset-0"
            frameBorder={0}
            marginHeight={0}
            marginWidth={0}
            style={{ filter: "opacity(0.7)" }}
            src="https://www.google.com/maps/embed/v1/place?q=97+warren+st+new+york+city&amp;key=AIzaSyBFw0Qbyq9zTFTd-tUY6dZWTgaQzuU17R8"
          /&gt;
          &lt;div className="bg-gray-900 relative flex flex-wrap py-6 rounded shadow-md"&gt;
            &lt;div className="lg:w-1/2 px-6"&gt;
              &lt;h2 className="title-font font-semibold text-white tracking-widest text-xs"&gt;
                ADDRESS
              &lt;/h2&gt;
              &lt;p className="mt-1"&gt;
                97 Warren St. &lt;br /&gt;
                New York, NY 10007
              &lt;/p&gt;
            &lt;/div&gt;
            &lt;div className="lg:w-1/2 px-6 mt-4 lg:mt-0"&gt;
              &lt;h2 className="title-font font-semibold text-white tracking-widest text-xs"&gt;
                EMAIL
              &lt;/h2&gt;
              &lt;a className="text-indigo-400 leading-relaxed"&gt;
                reedbarger@email.com
              &lt;/a&gt;
              &lt;h2 className="title-font font-semibold text-white tracking-widest text-xs mt-4"&gt;
                PHONE
              &lt;/h2&gt;
              &lt;p className="leading-relaxed"&gt;123-456-7890&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;form
          netlify
          name="contact"
          onSubmit={handleSubmit}
          className="lg:w-1/3 md:w-1/2 flex flex-col md:ml-auto w-full md:py-8 mt-8 md:mt-0"&gt;
          &lt;h2 className="text-white sm:text-4xl text-3xl mb-1 font-medium title-font"&gt;
            Hire Me
          &lt;/h2&gt;
          &lt;p className="leading-relaxed mb-5"&gt;
            Lorem ipsum dolor sit amet consectetur, adipisicing elit. Illum
            suscipit officia aspernatur veritatis. Asperiores, aliquid?
          &lt;/p&gt;
          &lt;div className="relative mb-4"&gt;
            &lt;label htmlFor="name" className="leading-7 text-sm text-gray-400"&gt;
              Name
            &lt;/label&gt;
            &lt;input
              type="text"
              id="name"
              name="name"
              className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"
              onChange={(e) =&gt; setName(e.target.value)}
            /&gt;
          &lt;/div&gt;
          &lt;div className="relative mb-4"&gt;
            &lt;label htmlFor="email" className="leading-7 text-sm text-gray-400"&gt;
              Email
            &lt;/label&gt;
            &lt;input
              type="email"
              id="email"
              name="email"
              className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 text-base outline-none text-gray-100 py-1 px-3 leading-8 transition-colors duration-200 ease-in-out"
              onChange={(e) =&gt; setEmail(e.target.value)}
            /&gt;
          &lt;/div&gt;
          &lt;div className="relative mb-4"&gt;
            &lt;label
              htmlFor="message"
              className="leading-7 text-sm text-gray-400"&gt;
              Message
            &lt;/label&gt;
            &lt;textarea
              id="message"
              name="message"
              className="w-full bg-gray-800 rounded border border-gray-700 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-900 h-32 text-base outline-none text-gray-100 py-1 px-3 resize-none leading-6 transition-colors duration-200 ease-in-out"
              onChange={(e) =&gt; setMessage(e.target.value)}
            /&gt;
          &lt;/div&gt;
          &lt;button
            type="submit"
            className="text-white bg-indigo-500 border-0 py-2 px-6 focus:outline-none hover:bg-indigo-600 rounded text-lg"&gt;
            Submit
          &lt;/button&gt;
        &lt;/form&gt;
      &lt;/div&gt;
    &lt;/section&gt;
  );
}</code></pre><p>Come puoi vedere sopra, stiamo codificando i dati del modulo con una funzione speciale <code>encode</code> che vedi qui.</p><p>Se il messaggio viene inviato correttamente, visualizzeremo un avviso che dice "Message sent". Altrimenti, se si verifica un errore, avviseremo l'utente di tale situazione.</p><h2 id="come-costruire-il-componente-navbar"><strong>Come costruire il componente Navbar</strong></h2><p>L'ultimo passaggio è creare il nostro componente Navbar.</p><p>Vogliamo che questa barra di navigazione rimanga in cima alla nostra app su dispositivi di grandi dimensioni e non sia ferma sullo schermo su dispositivi mobili.</p><p>Inoltre, vogliamo includere collegamenti a ciascuna delle nostre sezioni importanti per il nostro progetto come capacità, testimonianze e il nostro modulo di contatto:</p><pre><code class="language-js">// src/components/Navbar.js

import { ArrowRightIcon } from "@heroicons/react/solid";
import React from "react";

export default function Navbar() {
  return (
    &lt;header className="bg-gray-800 md:sticky top-0 z-10"&gt;
      &lt;div className="container mx-auto flex flex-wrap p-5 flex-col md:flex-row items-center"&gt;
        &lt;a className="title-font font-medium text-white mb-4 md:mb-0"&gt;
          &lt;a href="#about" className="ml-3 text-xl"&gt;
            Reed Barger
          &lt;/a&gt;
        &lt;/a&gt;
        &lt;nav className="md:mr-auto md:ml-4 md:py-1 md:pl-4 md:border-l md:border-gray-700	flex flex-wrap items-center text-base justify-center"&gt;
          &lt;a href="#projects" className="mr-5 hover:text-white"&gt;
            Past Work
          &lt;/a&gt;
          &lt;a href="#skills" className="mr-5 hover:text-white"&gt;
            Skills
          &lt;/a&gt;
          &lt;a href="#testimonials" className="mr-5 hover:text-white"&gt;
            Testimonials
          &lt;/a&gt;
        &lt;/nav&gt;
        &lt;a
          href="#contact"
          className="inline-flex items-center bg-gray-800 border-0 py-1 px-3 focus:outline-none hover:bg-gray-700 rounded text-base mt-4 md:mt-0"&gt;
          Hire Me
          &lt;ArrowRightIcon className="w-4 h-4 ml-1" /&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/header&gt;
  );
}</code></pre><p>In che modo questo componente rimane in cima alla pagina su un dispositivo più grande? Con l'aiuto della classe <code>md:sticky</code> sul nostro elemento <code>header</code>.</p><p>Questa classe significa che avrà la regola di stile <code>position: sticky;</code> applicata a partire da un punto di interruzione di medie dimensioni (768px).</p><h2 id="come-distribuire-il-tuo-portfolio"><strong>Come distribuire il tuo Portfolio</strong></h2><p>Ora per rendere attivo il nostro portfolio, dobbiamo trasferire la nostra applicazione su GitHub.</p><p>Se non hai familiarità con Git e GitHub, sarebbe necessario un po' di tempo solo per imparare a come inviare il tuo codice al tuo account GitHub per la prima volta. È un'abilità essenziale che qualsiasi sviluppatore deve conoscere.</p><p>Dopo aver acquisito familiarità con questo processo, possiamo prima creare un nuovo repository Github. Successivamente, eseguiremo <code>git add .</code>, <code>git commit -m "Deploy"</code>, creando il nostro git remoto e quindi <code>git push -u origin master</code>.</p><p>Una volta che il nostro progetto è su GitHub, possiamo andare su Netlify e selezionare l'opzione "Choose Site from Git". Quindi sceglieremo GitHub per la nostra distribuzione continua e selezioneremo il repository GitHub in cui abbiamo appena inviato il nostro codice.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/portfolio-3-min.gif" class="kg-image" alt="portafoglio-3-min" width="600" height="400" loading="lazy"></figure><p>Dopodiché, il nostro progetto verrà pubblicato automaticamente sul web!</p><h2 id="cosa-viene-dopo"><strong>Cosa viene dopo</strong></h2><p>Congratulazioni! Ora hai un'app &nbsp;portfolio live sul Web che mostra tutti i tuoi progetti e le tue abilità ai potenziali datori di lavoro.</p><p>Il prossimo passo da fare sarebbe impostare un dominio personalizzato, preferibilmente con il tuo nome (es. <a href="https://reedbarger.com/">reedbarger.com</a> ). Poiché Netlify include un DNS, puoi facilmente configurare un dominio personalizzato con loro.</p><p>Cerca di aggiungere un blog alla tua app React per mostrare ancora di più la tua conoscenza da sviluppatore ai potenziali datori di lavoro.</p><p>Rendi il tuo portfolio personale un'espressione di te stesso e di ciò che ti appassiona come sviluppatore e avrai successo!</p><h2 id="vuoi-il-modo-n-1-per-imparare-react"><strong>Vuoi il modo n. 1 per imparare React?</strong></h2><p><strong><strong><a href="http://bit.ly/join-react-bootcamp">Il Bootcamp React</a></strong></strong> prende tutto ciò che dovresti sapere sull'apprendimento di React e lo raggruppa in un unico pacchetto completo, inclusi video, cheatsheet e bonus speciali.</p><p>Ottieni le informazioni privilegiate che <strong><strong>centinaia</strong></strong> di sviluppatori hanno già utilizzato per padroneggiare React, per trovare il lavoro dei loro sogni e assumere il controllo del loro futuro:</p><figure class="kg-card kg-image-card"><img src="https://reedbarger.nyc3.digitaloceanspaces.com/react-bootcamp-banner.png" class="kg-image" alt="Il Bootcamp di reazione" width="600" height="400" loading="lazy"></figure><p><br><em><em>Clicca qui per essere avvisato quando apre</em>.</em></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come passare dati ed eventi tra componenti in React ]]>
                </title>
                <description>
                    <![CDATA[ Se stai tentando di implementare operazioni CRUD utilizzando gli endpoint API, potresti scoprire che è difficile gestire i dati su più componenti. O forse hai un modale, ma vuoi attivarlo da un componente diverso. Capire come affrontare questi scenari può essere difficile. In questo tutorial, ti mostrerò come puoi farlo. ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-passare-dati-ed-eventi-tra-componenti-in-react/</link>
                <guid isPermaLink="false">6228ea3707e6d705139eb493</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Thu, 10 Mar 2022 09:20:42 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/Colorful-Animal-Crossing-Icons-Icon-Set-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</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>Se stai tentando di implementare operazioni CRUD utilizzando gli endpoint API, potresti scoprire che è difficile gestire i dati su più componenti.</p><p>O forse hai un modale, ma vuoi attivarlo da un componente diverso.</p><p>Capire come affrontare questi scenari può essere difficile.</p><p>In questo tutorial, ti mostrerò come puoi farlo.</p><h2 id="come-passare-i-dati-tra-un-componente-padre-e-un-componente-figlio"><strong>Come passare i dati tra un componente padre e un componente figlio</strong></h2><p>In primo luogo, passiamo i dati tra un componente padre e un componente figlio. .</p><p>Innanzitutto, dovrai creare due componenti, un <em>Parent </em>e un <em>Child</em>.</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import React from 'react'

export default function Parent() {
  return (
    &lt;div&gt;
      
    &lt;/div&gt;
  )
}
</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Parent.js</font></font></figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import React from 'react'

export default function Child() {
    return (
        &lt;div&gt;
            
        &lt;/div&gt;
    )
}
</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Child.js</font></font></figcaption></figure><p>Successivamente, importerai il componente <em>Child</em> nel componente <em>Parent</em> e lo restituirai.</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import React from 'react'
import Child from './Child';

export default function Parent() {
  return (
    &lt;div&gt;
      &lt;Child/&gt;
    &lt;/div&gt;
  )
}</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Chiama il componente figlio nel componente padre</font></font></figcaption></figure><p>Quindi creerai una funzione e un pulsante per attivare quella funzione. Inoltre, creerai uno stato utilizzando l'Hook <em><em>useState</em></em> &nbsp;per gestire i dati.</p><pre><code class="language-jsx">import React from 'react'
import Child from './Child';
import { Button } from 'semantic-ui-react';
import { useState } from 'react';
import './App.css';

export default function Parent() {
  const [data, setData] = useState('');
  
  const parentToChild = () =&gt; {
    setData("This is data from Parent Component to the Child Component.");
  }
  return (
    &lt;div className="App"&gt;
      &lt;Child/&gt;
      
      &lt;div&gt;
        &lt;Button primary onClick={() =&gt; parentToChild()}&gt;Click Parent&lt;/Button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}
</code></pre><p>Come puoi vedere qui, stiamo chiamando la funzione <em><em>parentToChild</em></em> sul pulsante <em><em>Click Parent</em></em> . Quando si fa clic sul pulsante Parent, esso memorizzerà "This is data from Parent Component to the Child Component" nella variabile <em><em>dat</em>a<em> .</em></em></p><p>Passiamo ora lo stato dei dati ai nostri componenti figlio. Puoi farlo usando i props.</p><p>Passa i dati come props quando chiami il componente figlio, in questo modo:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">&lt;Child parentToChild={data}/&gt;</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Parent.js</font></font></figcaption></figure><p>Qui stiamo passando i dati nel componente figlio come <em><em>data <strong><strong>.</strong></strong></em></em></p><p><code>data</code> è il dato che dobbiamo trasmettere, e <code>parentToChild</code> è il nome del prop.</p><p>Successivamente, è il momento di acquisire i dati nel componente figlio. Ed è molto semplice.</p><p>Qui, ci possono essere due casi.</p><p>Caso 1: se stai utilizzando un componente funzionale, prendi semplicemente parentToChild nei parametri.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'

export default function Child({parentToChild}) {
    return (
        &lt;div&gt;
            {parentToChild}
        &lt;/div&gt;
    )
}</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente funzionale di reazione</font></font></figcaption></figure><p>Caso 2: se hai un componente di classe, usa semplicemente <code>this.props.parentToChild</code>.</p><figure class="kg-card kg-code-card"><pre><code>import React, { Component } from 'react'

export default class Child extends Component {
    render() {
        return (
            &lt;div&gt;
                {this.props.parentToChild}
            &lt;/div&gt;
        )
    }
}</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente della classe di reazione</font></font></figcaption></figure><p>In ogni caso, otterrai gli stessi risultati:</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-132836.png" class="kg-image" alt="Screenshot-2021-06-06-132836" width="600" height="400" loading="lazy"></figure><p>Quando facciamo clic sul pulsante <code>Click Parent</code>, vedremo i dati come output sullo schermo.</p><pre><code class="language-jsx">import React from 'react'
import Child from './Child';
import { Button } from 'semantic-ui-react';
import { useState } from 'react';
import './App.css';

export default function Parent() {
  const [data, setData] = useState('');
  
  const parentToChild = () =&gt; {
    setData("This is data from Parent Component to the Child Component.");
  }
  return (
    &lt;div className="App"&gt;
      &lt;Child parentToChild={data}/&gt;
      
      &lt;div className="child"&gt;
        &lt;Button primary onClick={() =&gt; parentToChild()}&gt;Click Parent&lt;/Button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}</code></pre><p>Sopra vedrai il codice completo per <code>Parent Component</code>.</p><h2 id="come-passare-i-dati-tra-un-componente-figlio-e-un-componente-padre"><strong>Come passare i dati tra un componente figlio e un componente padre</strong></h2><p>Questo è un po' più complicato.</p><p>Innanzitutto, devi creare una funzione nel componente padre chiamata &nbsp; <code>childToParent</code> e uno stato vuoto chiamato <code>data</code>.</p><figure class="kg-card kg-code-card"><pre><code>const [data, setData] = useState('');

const childToParent = () =&gt; {
   
}</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente genitore</font></font></figcaption></figure><p>Quindi, passa la funzione <code>childToParent</code> come supporto al componente figlio.</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">&lt;Child childToParent={childToParent}/&gt;</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Passaggio di childToParent al componente figlio.</font></font></figcaption></figure><p>Ora, nel nostro componente figlio, accetta questa chiamata di funzione come prop e assegnala a un evento onClick.</p><p>Inoltre, dichiara uno stato che contiene alcuni dati sotto forma di stringa o numero.</p><p>Passa i dati nella funzione <code>parentToChild</code> come parametri.</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import React from 'react'
import { Button } from 'semantic-ui-react';

export default function Child({childToParent}) {
    const data = "This is data from Child Component to the Parent Component."
    return (
        &lt;div&gt;
            &lt;Button primary onClick={() =&gt; childToParent(data)}&gt;Click Child&lt;/Button&gt;
        &lt;/div&gt;
    )
}</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente figlio</font></font></figcaption></figure><p>Successivamente, nel componente padre, accetta questi dati nella funzione <code>childToParent</code> come parametro. Quindi imposta i dati usando l'hook useState.</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import './App.css';
import { useState } from 'react';
import Child from './Child';

function Parent() {
  const [data, setData] = useState('');
  
  const childToParent = (childdata) =&gt; {
    setData(childdata);
  }

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

export default Parent;
</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente genitore</font></font></figcaption></figure><p>Quindi, mostra quella variabile di dati nella funzione di ritorno.</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import './App.css';
import { useState } from 'react';
import Child from './Child';

function Parent() {
  const [data, setData] = useState('');
  
  const childToParent = (childdata) =&gt; {
    setData(childdata);
  }

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

export default Parent;</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente genitore</font></font></figcaption></figure><p>I dati figlio sovrascriveranno i dati padre quando si fa clic sul pulsante &nbsp;<code>Click Child</code><em><em> </em></em>.</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>Ora puoi passare i dati da <strong><strong>Child a Parent</strong></strong> e <strong><strong>da Parent a Child</strong></strong> come un professionista.</p><h3 id="puoi-anche-trasmettere-eventi-come-onclick-o-onchange"><strong>Puoi anche trasmettere eventi come onClick o OnChange</strong></h3><p>Basta chiamare un metodo di avviso nella funzione <code>childToParent</code><em><em> </em></em>e passare quella funzione come supporto al componente figlio <em><em>.</em></em></p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import './App.css';
import Child from './Child';

function Parent() {
  const childToParent = () =&gt; {
    alert("This is an alert from the Child Component")
  }

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

export default Parent;</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente genitore</font></font></figcaption></figure><p>E nel componente figlio , accetta la <em><em>funzione</em> </em><code>childToParent</code><em><em> </em></em>come prop. Quindi assegnalo a un evento onClick su un pulsante.</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import React from 'react'
import { Button } from 'semantic-ui-react';

export default function Child({childToParent}) {
    return (
        &lt;div&gt;
            &lt;Button primary onClick={() =&gt; childToParent()}&gt;Click Child&lt;/Button&gt;
        &lt;/div&gt;
    )
}</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Componente figlio</font></font></figcaption></figure><p>La tua funzione nel componente padre <em><em>verrà</em></em> richiamata quando fai clic sul pulsante nel componente figlio e vedrai questo avviso:</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>Questo è tutto!</p><p>Puoi <a href="https://github.com/nishant-666/Passing-data-in-React">trovare il codice su Github</a> se vuoi ulteriormente sperimentare.</p><blockquote>Bene, questo è tutto gente. Buon apprendimento.</blockquote> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ La Guida per Principianti a React ]]>
                </title>
                <description>
                    <![CDATA[ > Sei interessato a imparare React? Ottieni il mio manuale React [https://flaviocopes.com/page/react-handbook/] React è una libreria JavaScript che mira a semplificare lo sviluppo di interfacce visive. Sviluppato da Facebook e rilasciato pubblicamente nel 2013, è usato in alcuni dei codici più utilizzati al mondo. Alimenta Facebook e Instagram tra molte, ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/la-guida-per-principianti-a-react/</link>
                <guid isPermaLink="false">62224e55db2217050c2ed49d</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Thu, 10 Mar 2022 08:45:03 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/1_uKVfsFREG2HMCL8hJdcZ5Q.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/the-beginners-guide-to-react-9be65f50a55c/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Beginner’s Guide to React</a>
      </p><blockquote>Sei interessato a imparare React? Ottieni il mio <a href="https://flaviocopes.com/page/react-handbook/">manuale React</a></blockquote><p>React è una libreria JavaScript che mira a semplificare lo sviluppo di interfacce visive.</p><p>Sviluppato da Facebook e rilasciato pubblicamente nel 2013, è usato in alcuni dei codici più utilizzati al mondo. Alimenta Facebook e Instagram tra molte, molte altre società di software.</p><p>Il suo obiettivo principale è semplificare il ragionamento su un'interfaccia e sul suo stato in qualsiasi momento dividendo l'interfaccia utente in una raccolta di componenti.</p><p>React viene utilizzato per creare applicazioni Web a pagina singola, insieme a molte altre librerie e framework disponibili già prima che React prendesse vita.</p><h3 id="perch-react-cos-popolare"><strong>Perché React è così popolare?</strong></h3><p>React ha preso d'assalto il mondo dello sviluppo web front end. Come mai?</p><h4 id="meno-complesso-delle-alternative"><strong>Meno complesso delle alternative</strong></h4><p>Al momento dell'annuncio di React, Ember.js e Angular 1.x erano le scelte predominanti per i framework. Entrambi hanno imposto troppe convenzioni sul codice è ciò ha fatto si che il porting di un'app esistente non fosse affatto conveniente.</p><p>React è stato creato per essere molto facile da integrare in un progetto esistente. È così che hanno dovuto fare su Facebook per introdurlo nella codebase già esistente. Inoltre, questi due framework hanno portato troppo al tavolo, mentre React ha scelto solo di implementare il livello View invece dell'intero stack MVC.</p><h4 id="tempismo-perfetto"><strong>Tempismo perfetto</strong></h4><p>Allo stesso tempo, Angular 2.x è stato annunciato da Google, insieme all'incompatibilità con le versioni precedenti e ai grandi cambiamenti che avrebbe portato. Passare da Angular 1 a 2 è stato come passare a un framework diverso. E quindi questo fatto, insieme ai miglioramenti della velocità di esecuzione che React prometteva, ha reso React qualcosa che gli sviluppatori erano ansiosi di provare.</p><h4 id="supportato-da-facebook"><strong>Supportato da Facebook</strong></h4><p>Essere supportati da Facebook avvantaggia un progetto se si rivela un successo. Ma non è una garanzia, e ci sono molti progetti open source falliti sia da Facebook che da Google (tra gli altri).</p><h3 id="react-davvero-cos-semplice"><strong>React è davvero così semplice?</strong></h3><p>Anche se ho detto che React è più semplice dei framework alternativi, immergersi in React è comunque complesso. Ciò è dovuto principalmente alle tecnologie di contorno che possono essere integrate con React, come Redux, Relay o GraphQL.</p><p>React in sé ha un'API molto piccola.</p><p>Non c'è molto di più in React oltre a questi concetti:</p><ul><li>Componenti</li><li>JSX</li><li>State</li><li>Props</li></ul><p>Vedremo ognuno di loro nei miei prossimi paragrafi.</p><h3 id="jsx"><strong>JSX</strong></h3><p>Molti sviluppatori, me compreso, a prima vista hanno pensato che JSX fosse orribile e hanno rapidamente respinto React.</p><p>Anche se dicevano che JSX non era richiesto, usare React senza JSX era penoso.</p><p>Mi ci sono voluti un paio d'anni per esaminarlo occasionalmente per iniziare a digerire JSX, e ora lo preferisco in gran parte all'alternativa (ovvero, usando i modelli).</p><p>Il principale vantaggio dell'utilizzo di JSX è che stai interagendo solo con oggetti JavaScript, non con modelli di stringhe.</p><p>JSX non è HTML incorporato.</p><p>Molti tutorial per i principianti di React preferiscono posticipare l'introduzione di JSX in un secondo momento, perché presumono che il lettore stia meglio senza di esso. Dato che ora sono un fan di JSX, tuttavia, ci entrerò immediatamente.</p><p>Ecco come definire un tag h1 contenente una stringa:</p><pre><code class="language-jsx">const element = &lt;h1&gt;Hello, world!&lt;/h1&gt;</code></pre><p>Sembra uno strano mix di JavaScript e HTML, ma in realtà è tutto JavaScript.</p><p>Quello che sembra HTML è in realtà <em>zucchero sintattico</em> per definire i componenti e il loro posizionamento all'interno del markup.</p><p>All'interno di un'espressione JSX, gli attributi possono essere inseriti molto facilmente:</p><pre><code class="language-jsx">const myId = 'test' 
const element = &lt;h1 id={myId}&gt;Hello, world!&lt;/h1&gt;</code></pre><p>Devi solo prestare attenzione a quando un attributo ha un trattino (<code>-</code>), che viene invece convertito nella sintassi camelCase, nonché a questi due casi speciali:</p><ul><li><code>class</code> diventa <code>className</code></li><li><code>for</code> diventa <code>htmlFor</code></li></ul><p>perché sono parole riservate in JavaScript.</p><p>Ecco uno frammento di codice JSX che racchiude due componenti in un tag &nbsp;<code>div</code>:</p><pre><code class="language-jsx">&lt;div&gt; 
  &lt;BlogPostsList /&gt;
  &lt;Sidebar /&gt; 
&lt;/div&gt;</code></pre><p>Un tag deve sempre essere chiuso, perché questo è più XML che HTML (se ricordi i giorni XHTML, questo sarà familiare, ma da allora la sintassi libera di HTML5 ha vinto). In questo caso viene utilizzato un tag a chiusura automatica.</p><p>JSX, una volta introdotto con React, non è più una tecnologia solo di React.</p><h3 id="componenti-di-react"><strong>Componenti di React</strong></h3><h4 id="che-cos-un-componente-react"><strong>Che cos'è un componente React?</strong></h4><p>Un componente è un pezzo isolato dell'interfaccia. Ad esempio, in una tipica home page di un blog, potresti trovare il componente Barra laterale e il componente Elenco post del blog. Sono a loro volta composti dai componenti stessi, quindi potresti avere un elenco di componenti dei post del blog, ciascuno per ogni post del blog e ognuno con le sue proprietà peculiari.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/Ok51aJciCr9ybh8lww0UL2Hl7g37lC2MJjne" class="kg-image" alt="Ok51aJciCr9ybh8lww0UL2Hl7g37lC2MJjne" width="471" height="322" loading="lazy"></figure><p>React lo rende molto semplice: tutto è un componente.</p><p>Anche i semplici tag HTML sono componenti a sé stanti e vengono aggiunti per impostazione predefinita.</p><p>Le due righe successive sono equivalenti: fanno la stessa cosa. Uno con <strong><strong>JSX</strong></strong> , uno senza, iniettando <code>&lt;h1&gt;Hello World!&lt;/h1&gt;</code> in un elemento con id <code>app</code>.</p><pre><code class="language-jsx">import React from 'react' 
import ReactDOM from 'react-dom' 

ReactDOM.render( 
  &lt;h1&gt;Hello World!&lt;/h1&gt;, 
  document.getElementById('app') 
)

ReactDOM.render( 
  React.DOM.h1(null, "Hello World!"), 
  document.getElementById('app') 
)</code></pre><p>Vedi, <code>React.DOM</code> espone per noi un componente <code>h1</code>. Quali altri tag HTML sono disponibili? Tutti quelli possibili! Puoi controllare cosa offre <code>React.DOM</code> digitandolo nella Console del browser:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/9DaF1EtL86DXgUhe2wvb92sjYFLx6S5nxcIr" class="kg-image" alt="9DaF1EtL86DXgUhe2wvb92sjYFLx6S5nxcIr" width="538" height="349" loading="lazy"></figure><p>(l'elenco continua...)</p><p>I componenti integrati sono belli, ma li supererai rapidamente. Ciò in cui React eccelle è permetterci di comporre un'interfaccia utente componendo componenti personalizzati.</p><h3 id="componenti-personalizzati"><strong>Componenti personalizzati</strong></h3><p>Ci sono 2 modi per definire un componente in React:</p><p>Un componente stateless non gestisce lo stato interno ed è solo una funzione:</p><pre><code class="language-jsx">const BlogPostExcerpt = () =&gt; {
 return (
    &lt;div&gt;
      &lt;h1&gt;Titolo&lt;/h1&gt;
      &lt;p&gt;Descrizione&lt;/p&gt;
    &lt;/div&gt; 
  ) 
}</code></pre><p>Un componente stateful è una classe, che gestisce lo stato nelle proprie proprietà:</p><pre><code class="language-jsx">import React, { Component } from 'react'

class BlogPostExcerpt extends Component { 
  render() { 
    return ( 
      &lt;div&gt;
        &lt;h1&gt;Titolo&lt;/h1&gt; 
        &lt;p&gt;Descrizione&lt;/p&gt; 
      &lt;/div&gt; 
    ) 
  } 
}</code></pre><p>Allo stato attuale, sono equivalenti perché non c'è ancora una gestione dello stato (cosa che vedremo nei prossimi paragrafi).</p><p>C'è una terza forma che usa la sintassi <code>ES5</code>/<code>ES2015</code> senza le classi:</p><pre><code class="language-jsx">import React from 'react'

React.createClass({ 
  render() { 
    return ( 
      &lt;div&gt; 
        &lt;h1&gt;Titolo&lt;/h1&gt;
        &lt;p&gt;Descrizione&lt;/p&gt; 
      &lt;/div&gt; 
    ) 
  } 
})</code></pre><p>Raramente lo vedrai nelle moderne codebase <code>&gt; ES6</code>.</p><p>Props è il modo in cui i componenti ottengono le loro proprietà. A partire dal componente superiore, ogni componente figlio riceve i suoi props dal genitore. In un componente stateless, props è tutto ciò che viene passato e sono accessibili aggiungendo <code>props</code> come argomento della funzione:</p><pre><code class="language-jsx">const BlogPostExcerpt = (props) =&gt; { 
  return ( 
    &lt;div&gt; 
      &lt;h1&gt;{props.titolo}&lt;/h1&gt; 
      &lt;p&gt;{props.descrizione}&lt;/p&gt; 
    &lt;/div&gt; 
  ) 
}</code></pre><p>In un componente stateful, &nbsp;i props vengono passati per impostazione predefinita. Non è necessario aggiungere nulla di speciale e sono accessibili come <code>this.props</code> in un'istanza di Component.</p><pre><code class="language-jsx">import React, { Component } from 'react'

class BlogPostExcerpt extends Component { 
  render() { 
    return ( 
      &lt;div&gt;
        &lt;h1&gt;{this.props.titolo}&lt;/h1&gt;  
        &lt;p&gt;{this.props.descrizione}&lt;/p&gt; 
      &lt;/div&gt; 
    ) 
  } 
}</code></pre><h3 id="proptypes"><strong>PropTypes</strong></h3><p>Poiché JavaScript è un linguaggio tipizzato dinamicamente, non abbiamo davvero un modo per imporre il tipo di una variabile in fase di compilazione. Se passiamo tipi non validi, falliranno in fase di esecuzione o daranno risultati strani se i tipi sono compatibili ma non nel modo che ci aspettiamo.</p><p>Flow e TypeScript aiutano molto, ma React ha un modo per verificare direttamente i tipi di props. Anche prima di eseguire il codice, i nostri strumenti (editor, linter) possono rilevare quando stiamo passando i valori sbagliati:</p><pre><code class="language-jsx">import PropTypes from 'prop-types';
import React from 'react' 

class BlogPostExcerpt extends Component { 
  render() { 
    return ( 
      &lt;div&gt; 
        &lt;h1&gt;{this.props.titolo}&lt;/h1&gt; 
        &lt;p&gt;{this.props.descrizione}&lt;/p&gt; 
      &lt;/div&gt; 
    ) 
  } 
}

BlogPostExcerpt.propTypes = { 
  titolo: PropTypes.string, 
  descrizione: PropTypes.string 
};

export default BlogPostExcerpt</code></pre><h3 id="quali-tipi-possiamo-usare"><strong>Quali tipi possiamo usare</strong></h3><p>Questi sono i tipi fondamentali che possiamo accettare:</p><ul><li>PropTypes.array</li><li>PropTypes.bool</li><li>PropTypes.func</li><li>PropTypes.number</li><li>PropTypes.object</li><li>PropTypes.string</li><li>PropTypes.symbol</li></ul><p>Possiamo accettare uno di due tipi:</p><pre><code>PropTypes.oneOfType([ PropTypes.string, PropTypes.number ]),</code></pre><p>Possiamo accettare uno dei tanti valori:</p><pre><code>PropTypes.oneOf(['Test1', 'Test2']),</code></pre><p>Possiamo accettare un'istanza di una classe:</p><pre><code>PropTypes.instanceOf(Qualcosa)</code></pre><p>Possiamo accettare qualsiasi nodo React:</p><pre><code>PropTypes.node</code></pre><p>o anche di qualsiasi tipo:</p><pre><code>PropTypes.any</code></pre><p>Gli array hanno una sintassi speciale che possiamo usare per accettare un array di un tipo particolare:</p><pre><code>PropTypes.arrayOf(PropTypes.string)</code></pre><p>Possiamo comporre una proprietà di un oggetto usando:</p><pre><code class="language-jsx">PropTypes.shape({ 
  color: PropTypes.string, 
  fontSize: PropTypes.number 
})</code></pre><h3 id="propriet-richieste"><strong>Proprietà richieste</strong></h3><p>L'aggiunta di <code>isRequired</code> a qualsiasi opzione PropTypes farà sì che React restituisca un errore se quella proprietà è mancante:</p><pre><code>PropTypes.arrayOf(PropTypes.string).isRequired, PropTypes.string.isRequired,</code></pre><h3 id="valori-predefiniti-per-i-props"><strong>Valori predefiniti per i props</strong></h3><p>Se un valore non è richiesto, è necessario specificare un valore predefinito per esso se manca quando il componente viene inizializzato.</p><pre><code class="language-jsx">BlogPostExcerpt.propTypes = { 
  title: PropTypes.string, 
  description: PropTypes.string 
}

BlogPostExcerpt.defaultProps = { 
  titolo: '', 
  descrizione: '' 
}</code></pre><p>Alcuni strumenti, come ESLint, hanno la capacità di imporre la definizione dei defaultProps per un Component con alcuni propType non esplicitamente richiesti.</p><h3 id="come-vengono-passati-i-props"><strong>Come vengono passati i props</strong></h3><p>Quando si inizializza un componente, si passa il props in un modo simile agli attributi HTML:</p><pre><code class="language-jsx">const desc = 'Una descrizione'
//...
&lt;BlogPostExcerpt title="Un post del blog" descrizione={desc} /&gt;</code></pre><p>Abbiamo passato il titolo come una semplice stringa (cosa che possiamo fare <em><em>solo</em></em> con le stringhe!), e la descrizione come una variabile.</p><h3 id="children"><strong>Children</strong></h3><p>Un prop speciale è <code>children</code>. Questo contiene il valore di tutto ciò che viene passato nel componente <code>body</code>. Per esempio:</p><pre><code class="language-jsx">&lt;BlogPostExcerpt title="Un post del blog" descrizione={desc}&gt; 
  Qualcosa 
&lt;/BlogPostExcerpt&gt;</code></pre><p>In questo caso, all'interno <code>BlogPostExcerpt</code> potremmo accedere a “Qualcosa” tramite l'utilizzo di &nbsp;<code>this.props.children</code>.</p><p>Mentre Props consente a un componente di ricevere proprietà dal suo genitore (potrebbero essere "istruito" per stampare alcuni dati, ad esempio), lo stato consente a un componente di assumere una vita propria ed essere indipendente dall'ambiente circostante.</p><p>Ricorda: solo i componenti basati sulla classe possono avere uno stato. Quindi, se devi gestire lo stato in un componente senza stato (basato su funzioni), devi prima "aggiornarlo" a un componente di classe:</p><pre><code class="language-jsx">const BlogPostExcerpt = () =&gt; { 
  return ( 
    &lt;div&gt;
      &lt;h1&gt;Titolo&lt;/h1&gt;
      &lt;p&gt;Descrizione&lt;/p&gt; 
    &lt;/div&gt; 
  )
}</code></pre><p>diventa:</p><pre><code class="language-jsx">import React, { Component } from 'react'

class BlogPostExcerpt extends Component { 
  render() { 
    return (
      &lt;div&gt;  
        &lt;h1&gt;Titolo&lt;/h1&gt; 
        &lt;p&gt;Descrizione&lt;/p&gt;
      &lt;/div&gt;
    ) 
  } 
}</code></pre><h3 id="impostazione-dello-stato-predefinito"><strong>Impostazione dello stato predefinito </strong></h3><p>Nel costruttore del componente, inizializza <code>this.state</code>. Ad esempio, il componente BlogPostExcerpt potrebbe avere uno stato <code>cliccato</code>:</p><pre><code class="language-jsx">class BlogPostExcerpt extends Component {
  constructor(props) { 
    super(props) 
    this.state = { cliccato: false } 
  }

  render() { 
    return (
      &lt;div&gt; 
        &lt;h1&gt;Titolo&lt;/h1&gt;
        &lt;p&gt;Descrizione&lt;/p&gt; 
      &lt;/div&gt; 
    ) 
  } 
}</code></pre><h3 id="accesso-allo-stato"><strong>Accesso allo stato</strong></h3><p>È possibile accedere allo stato <em><em>cliccato</em> </em>facendo riferimento a <code>this.state.cliccato</code>:</p><pre><code class="language-jsx">class BlogPostExcerpt extends Component {
  constructor(props) { 
    super(props)
    this.state = { cliccato: false }
  }

  render() { 
    return (
      &lt;div&gt; 
        &lt;h1&gt;Title&lt;/h1&gt; 
        &lt;p&gt;Descrizione&lt;/p&gt; 
        &lt;p&gt;Cliccato: {this.state.cliccato}&lt;/p&gt; 
      &lt;/div&gt; 
    ) 
  } 
}</code></pre><h3 id="mutarne-lo-stato"><strong>Mutarne lo stato</strong></h3><p>Uno stato non dovrebbe mai essere mutato usando</p><pre><code>this.state.cliccato = true</code></pre><p>Invece, dovresti sempre usare <code>setState()</code>, passandolo come oggetto:</p><pre><code>this.setState({ cliccato: true })</code></pre><p>L'oggetto può contenere un sottoinsieme o un superinsieme dello stato. Solo le proprietà che passi saranno mutate. Quelle omesse verranno lasciate nel loro stato attuale.</p><h4 id="perch-dovresti-sempre-usare-setstate-"><strong>Perché dovresti sempre usare <code>setState()</code></strong></h4><p>Il motivo è che utilizzando questo metodo, React sa che lo stato è cambiato. Inizierà quindi la serie di eventi che porteranno al nuovo rendering del componente, insieme a eventuali aggiornamenti DOM.</p><h3 id="lo-stato-incapsulato"><strong>Lo stato è incapsulato</strong></h3><p>Un genitore di un Component non può dire se il figlio è <em>stateful</em> o <em>stateless</em>. Lo stesso vale per i figli di un Component.</p><p>Essere <em>stateful</em> o <em>stateless</em> (basato su classi o funzionale) è solo un dettaglio di implementazione di cui gli altri componenti non devono preoccuparsi.</p><p>Questo ci porta al flusso di dati unidirezionale</p><h3 id="flusso-di-dati-unidirezionale"><strong>Flusso di dati unidirezionale</strong></h3><p>Uno stato è sempre di proprietà di un componente. Tutti i dati interessati da questo stato possono interessare solo i componenti sotto di esso: i suoi figli.</p><p>La modifica di uno stato su un componente non influirà mai sul suo genitore, sui suoi fratelli o su qualsiasi altro componente nell'applicazione, solo sui suoi figli.</p><p>Questo è il motivo per cui, molte volte, lo stato viene spostato in alto nell'albero dei componenti.</p><h3 id="spostare-lo-stato-nell-albero"><strong>Spostare lo stato nell'albero</strong></h3><p>A causa delle regole del flusso di dati unidirezionale, se due componenti devono condividere uno stato, lo stato deve essere spostato su un predecessore comune.</p><p>Spesso, l'antenato più vicino è il posto migliore per gestire lo stato, ma non è una regola obbligatoria.</p><p>Lo stato viene trasmesso ai componenti che necessitano di quel valore tramite props:</p><pre><code class="language-jsx">class Converter extends React.Component { 
  constructor(props) { 
    super(props)
    this.state = { currency: '€' } 
  }

  render() { 
    return ( 
      &lt;div&gt; 
        &lt;Display currency={this.state.currency} /&gt;
        &lt;CurrencySwitcher currency={this.state.currency} /&gt;
      &lt;/div&gt; 
    ) 
  } 
}</code></pre><p>Lo stato può essere mutato da un componente figlio passando una funzione mutante come prop:</p><pre><code class="language-jsx">class Converter extends React.Component { 
  constructor(props) { 
    super(props) 
    this.state = { currency: '€' } 
  }

  handleChangeCurrency = (event) =&gt; { 
    this.setState({ 
      currency: this.state.currency === '€' ? '$' : '€' 
    }) 
  }

  render() { 
    return ( 
      &lt;div&gt; 
        &lt;Display currency={this.state.currency} /&gt; 
        &lt;CurrencySwitcher currency={this.state.currency} handleChangeCurrency={this.handleChangeCurrency} /&gt; 
      &lt;/div&gt; 
    ) 
  } 
}

const CurrencySwitcher = (props) =&gt; { 
  return ( 
    &lt;button onClick={props.handleChangeCurrency}&gt; 
      Current currency is {props.currency}. Change it! 
    &lt;/button&gt; 
  ) 
}

const Display = (props) =&gt; { 
  return ( 
    &lt;p&gt;Current currency is {props.currency}.&lt;/p&gt; 
  ) 
}</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/W5hfnSrCoSOqkbTNbDn0b1bOocYiHkO70ZgB" class="kg-image" alt="W5hfnSrCoSOqkbTNbDn0b1bOocYiHkO70ZgB" width="283" height="104" loading="lazy"></figure><h3 id="eventi"><strong>Eventi</strong></h3><p>React fornisce un modo semplice per gestire gli eventi. Preparati a salutare <code>addEventListener</code> :)</p><p>Nel precedente articolo sullo Stato hai visto questo esempio:</p><pre><code class="language-jsx">const CurrencySwitcher = (props) =&gt; { 
  return ( 
    &lt;button onClick={props.handleChangeCurrency}&gt; 
      Current currency is {props.currency}. Change it! 
    &lt;/button&gt; 
  ) 
}</code></pre><p>Se usi JavaScript da un po', è proprio come i vecchi gestori di eventi JavaScript. Ma questa volta stai definendo tutto in JavaScript, non nel tuo HTML, e stai passando una funzione, non una stringa.</p><p>I nomi degli eventi effettivi sono leggermente diversi, perché in React usi camelCase per tutto. Così <code>onclick</code> diventa <code>onClick</code>, <code>onsubmit</code> diventa <code>onSubmit</code>.</p><p>Per riferimento, questo è l'HTML della vecchia scuola con eventi JavaScript aggiunti:</p><pre><code class="language-jsx">&lt;button onclick="handleChangeCurrency()"&gt; ... &lt;;/button&gt;</code></pre><h3 id="gestori-di-eventi"><strong>Gestori di eventi</strong></h3><p>È una convenzione avere gestori di eventi definiti come metodi sulla classe Component:</p><pre><code class="language-jsx">class Converter extends React.Component { handleChangeCurrency = (event) =&gt; { this.setState({ currency: this.state.currency === '€' ? '$' : '€' }) } }</code></pre><p>Tutti i gestori ricevono un oggetto evento che aderisce, cross-browser, alla <a href="https://www.w3.org/TR/DOM-Level-3-Events/" rel="noopener">specifica W3C UI Events</a> .</p><h3 id="vincola-this-nei-metodi"><strong>Vincola <code>this</code> nei metodi</strong></h3><p>Non dimenticare di associare i metodi. I metodi delle classi ES6 per impostazione predefinita non sono vincolati. Ciò significa che <code>this</code> non è definito a meno che tu non definisca i metodi come:</p><pre><code class="language-jsx">class Converter extends React.Component { 
  handleClick = (e) =&gt; { /* ... */ } 
  //... 
}</code></pre><p>quando si utilizza la sintassi dell'inizializzatore della proprietà con Babel (abilitata per impostazione predefinita in <code>create-react-app</code>).</p><p>Altrimenti devi associarlo manualmente nel costruttore:</p><pre><code class="language-jsx">class Converter extends React.Component { 
  constructor(props) { 
    super(props); 
    this.handleClick = this.handleClick.bind(this); 
  }

  handleClick(e) {} 
}</code></pre><h3 id="il-riferimento-agli-eventi"><strong>Il riferimento agli eventi</strong></h3><p>Ci sono molti eventi supportati, quindi ecco un elenco di riepilogo.</p><h4 id="appunti"><strong>Appunti</strong></h4><ul><li>onCopy</li><li>onCut</li><li>onPaste</li></ul><h4 id="composizione"><strong>Composizione</strong></h4><ul><li>onCompositionEnd</li><li>onCompositionStart</li><li>onCompositionUpdate</li></ul><h4 id="tastiera"><strong>Tastiera</strong></h4><ul><li>onKeyDown</li><li>onKeyPress</li><li>onKeyUp</li></ul><h4 id="focus"><strong>Focus</strong></h4><ul><li>onFocus</li><li>onBlur</li></ul><h4 id="form"><strong>Form</strong></h4><ul><li>onChange</li><li>onInput</li><li>onSubmit</li></ul><h4 id="mouse"><strong>Mouse</strong></h4><ul><li>onClick</li><li>onContextMenu</li><li>onDoubleClick</li><li>onDrag</li><li>onDragEnd</li><li>onDragEnter</li><li>onDragExit</li><li>onDragLeave</li><li>onDragOver</li><li>onDragStart</li><li>onDrop</li><li>onMouseDown</li><li>onMouseEnter</li><li>onMouseLeave</li><li>onMouseMove</li><li>onMouseOut</li><li>onMouseOver</li><li>onMouseUp</li></ul><h4 id="selezione"><strong>Selezione</strong></h4><ul><li>onSelect</li></ul><h4 id="touch"><strong>Touch</strong></h4><ul><li>onTouchCancel</li><li>onTouchEnd</li><li>onTouchMove</li><li>onTouchStart</li></ul><h4 id="ui"><strong>UI</strong></h4><ul><li>onScroll</li></ul><h4 id="rotellina-del-mouse"><strong>Rotellina del mouse</strong></h4><ul><li>onWheel</li></ul><h4 id="media"><strong>Media</strong></h4><ul><li>onAbort</li><li>onCanPlay</li><li>onCanPlayThrough</li><li>onDurationChange</li><li>onEmptied</li><li>onEncrypted</li><li>onEnded</li><li>onError</li><li>onLoadedData</li><li>onLoadedMetadata</li><li>onLoadStart</li><li>onPause</li><li>onPlay</li><li>onPlaying</li><li>onProgress</li><li>onRateChange</li><li>onSeeked</li><li>onSeeking</li><li>onStalled</li><li>onSuspend</li><li>onTimeUpdate</li><li>onVolumeChange</li><li>onWaiting</li></ul><h4 id="immagine"><strong>Immagine</strong></h4><ul><li>onLoad</li><li>onError</li></ul><h4 id="animation"><strong>Animation</strong></h4><ul><li>onAnimationStart</li><li>onAnimationEnd</li><li>onAnimationIteration</li></ul><h4 id="transizione"><strong>Transizione</strong></h4><ul><li>onTransitionEnd</li></ul><h3 id="approccio-dichiarativo-di-react"><strong>Approccio dichiarativo di React</strong></h3><p>Ti imbatterai in articoli che descrivono React come un <strong><strong>approccio dichiarativo alla creazione di interfacce utente</strong></strong> .</p><p>Per ulteriori informazioni sulla programmazione dichiarativa, vedi <a href="https://flaviocopes.com/javascript-functional-programming/#declarative-programming">programmazione dichiarativa</a>.</p><h3 id="approccio-dichiarativo-di-react-1"><strong>Approccio dichiarativo di React</strong></h3><p>React ha reso il suo "approccio dichiarativo" piuttosto popolare e in primo piano, quindi ha permeato il mondo del front end insieme a React.</p><p>Non è davvero un concetto nuovo, ma React ha reso la creazione di interfacce utente molto più dichiarative rispetto ai modelli HTML. Puoi creare interfacce Web senza nemmeno toccare direttamente il DOM e puoi avere un sistema di eventi senza dover interagire con gli eventi DOM effettivi.</p><p>Ad esempio, la ricerca di elementi nel DOM utilizzando jQuery o eventi DOM è un approccio iterativo.</p><p>L'approccio dichiarativo di React lo astrae per noi. Diciamo semplicemente a React che vogliamo che un componente venga renderizzato in un modo specifico e non dobbiamo mai interagire con il DOM per farvi riferimento in seguito.</p><h3 id="il-dom-virtuale"><strong>Il DOM virtuale</strong></h3><p>Molti framework esistenti, prima che React entrasse in scena, manipolavano direttamente il DOM su ogni modifica.</p><h3 id="il-vero-dom"><strong>Il “vero” DOM</strong></h3><p>Che cos'è il DOM, prima di tutto? Il DOM ( <em><em>Document Object Model</em></em> ) è una rappresentazione ad albero della pagina, partendo dal tag <code>&lt;html&gt;</code> , scendendo in ciascuno dei figli, detti nodi.</p><p>È conservato nella memoria del browser e collegato direttamente a ciò che vedi in una pagina. Il DOM ha un'API che puoi utilizzare per attraversarlo, accedere a ogni singolo nodo, filtrarli e modificarli.</p><p>L'API è la sintassi familiare che probabilmente hai visto molte volte, se non stavi utilizzando l'API astratta fornita da jQuery e amici:</p><pre><code class="language-jsx">document.getElementById(id) 
document.getElementsByTagName(name) 
document.createElement(name) 
parentNode.appendChild(node) 
element.innerHTML 
element.style.left 
element.setAttribute()
element.getAttribute() 
element.addEventListener() 
window.content 
window.onload 
window.dump()
window.scrollTo()</code></pre><p>React conserva una copia della rappresentazione DOM, perché il Virtual DOM riguarda il rendering di React.</p><h3 id="il-dom-virtuale-1"><strong>Il DOM virtuale</strong></h3><p>Ogni volta che il DOM cambia, il browser deve eseguire due operazioni intensive: repaint (modifiche visive o di contenuto a un elemento che non influiscono sul layout e sul posizionamento rispetto ad altri elementi) e reflow (ricalcola il layout di una porzione della pagina — o l'intero layout di pagina).</p><p>React utilizza un DOM virtuale per aiutare il browser a utilizzare meno risorse quando è necessario apportare modifiche a una pagina.</p><p>Quando si chiama <code>setState()</code> su un Component, specificando uno stato diverso dal precedente, React contrassegna quel Component come <strong>sporco</strong> . Questa è la chiave: reagire solo agli aggiornamenti quando un componente cambia lo stato in modo esplicito.</p><p>Quello che succede dopo è:</p><ul><li>React aggiorna il Virtual DOM relativo ai componenti contrassegnati come sporchi (con alcuni controlli aggiuntivi, come attivare <code>shouldComponentUpdate()</code>)</li><li>Esegue l'algoritmo divergente per riconciliare le modifiche</li><li>Aggiorna il vero DOM</li></ul><h3 id="perch-il-virtual-dom-utile-batching"><strong>Perché il Virtual DOM è utile: batching</strong></h3><p>La cosa fondamentale è che React esegue in batch gran parte delle modifiche ed esegue un aggiornamento unico al vero DOM. Lo fa cambiando tutti gli elementi che devono essere modificati contemporaneamente, quindi il repaint e il reflow che il browser deve eseguire per attuare le modifiche, vengono eseguiti solo una volta.</p><blockquote>Interessato a imparare React? Ottieni il mio <a href="https://flaviocopes.com/page/react-handbook/">manuale React</a></blockquote> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Spiegazione dei cicli in JavaScript: ciclo For, ciclo While, ciclo Do...while e altro ]]>
                </title>
                <description>
                    <![CDATA[ I cicli vengono utilizzati in JavaScript per eseguire attività ripetute in base a una condizione. Le condizioni in genere restituiscono true o false. Un ciclo continuerà a funzionare fino a quando la condizione da noi definita ritorna  false. Ciclo for Sintassi for (inizializzazione; condizione; espressioneFianle) {   // ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/spiegazione-dei-loop-in-javascript/</link>
                <guid isPermaLink="false">6228916007e6d705139eb2e2</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Thu, 10 Mar 2022 08:14:36 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/5f9c9c92740569d1a4ca32f7.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/javascript-loops-explained-for-loop-for/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Loops Explained: For Loop, While Loop, Do...while Loop, and More</a>
      </p><p>I cicli vengono utilizzati in JavaScript per eseguire attività ripetute in base a una condizione. Le condizioni in genere restituiscono <code>true</code> o <code>false</code>. Un ciclo continuerà a funzionare fino a quando la condizione da noi definita ritorna <code>false</code>.</p><h2 id="ciclo-for"><strong>Ciclo <code>for</code></strong></h2><h3 id="sintassi"><strong><strong><strong>Sintassi</strong></strong></strong></h3><pre><code class="language-js">for (inizializzazione; condizione; espressioneFianle) {
  // codice
}
</code></pre><p>Il ciclo <code>for</code> è costituito da tre espressioni facoltative, seguite da un blocco di codice:</p><ul><li><code>inizializzazione</code> - Questa espressione viene eseguita prima dell'esecuzione del primo ciclo e viene solitamente utilizzata per creare un contatore.</li><li><code>condizione</code> - Questa espressione viene controllata ogni volta prima dell'esecuzione del ciclo. Se restituisce <code>true</code>, l'<code>istruzione</code> o il codice nel ciclo viene eseguito. Se restituisce <code>false</code>, il ciclo si interrompe. E se questa espressione viene omessa, restituisce automaticamente <code>true</code>.</li><li><code>espressioneFinale</code>- Questa espressione viene eseguita dopo ogni iterazione del ciclo. Questa è solitamente usata per incrementare un contatore, ma può anche essere usata per decrementare un contatore.</li></ul><p>È possibile omettere una qualsiasi di queste tre espressioni o le istruzioni nel blocco di codice.</p><p>I cicli <code>for</code> sono comunemente usati per eseguire il blocco di codice un determinato numero di volte. Inoltre, puoi usare <code>break</code> per uscire anticipatamente dal ciclo, prima che l'espressione <code>condizione</code> ritorni <code>false</code>.</p><h3 id="esempi"><strong><strong><strong>Esempi</strong></strong></strong></h3><p>1. Iterare tra numeri interi da 0 a 8:</p><pre><code class="language-js">for (let i = 0; i &lt; 9; i++) {
  console.log(i);
}

// Output:
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8</code></pre><p>2. Utilizzare <code>break</code> per uscire da un ciclo <code>for</code> prima che la <code>condizione</code> sia <code>false</code>:</p><pre><code class="language-js">for (let i = 1; i &lt; 10; i += 2) {
  if (i === 7) {
    break;
  }
  console.log('Elefanti totali: ' + i);
}

// Output:
// Elefanti totali: 1
// Elefanti totali: 3
// Elefanti totali: 5</code></pre><h3 id="errore-comune-superare-i-limiti-di-un-array"><strong>Errore comune: superare <strong><strong><strong><strong>i limiti di</strong></strong> un A</strong></strong>rray</strong></h3><p>Quando si esegue l'iterazione su un array, è facile superare accidentalmente i limiti dell'array stesso.</p><p>Ad esempio, il tuo ciclo potrebbe provare a fare riferimento al 4° elemento di un array con solo 3 elementi:</p><pre><code class="language-js">const arr = [ 1, 2, 3 ];

for (let i = 0; i &lt;= arr.length; i++) {
  console.log(arr[i]);
}

// Output:
// 1
// 2
// 3
// undefined</code></pre><p>Esistono due modi per correggere questo codice: impostare la <code>condizione</code> su <code>i &lt; arr.length</code> o <code>i &lt;= arr.length - 1</code>.</p><h2 id="ciclo-for-in"><strong>Ciclo <code>for...in</code></strong></h2><h3 id="sintassi-1"><strong>Sintassi</strong></h3><pre><code class="language-js">for (proprietà in oggetto) {
  // codice
}</code></pre><p>Il ciclo &nbsp;<code>for...in</code> esegue un'iterazione sulle proprietà di un oggetto. Per ogni proprietà viene eseguito il codice nel blocco di istruzioni.</p><h3 id="esempi-1"><strong>Esempi</strong></h3><p>1. Iterare sulle proprietà di un oggetto e stampare il nome e il valore nella console:</p><pre><code class="language-js">const capitali = {
  a: "Atene",
  b: "Belgrado",
  c: "Cairo"
};

for (let key in capitali) {
  console.log(key + ": " + capitali[key]);
}

// Output:
// a: Atene
// b: Belgrado
// c: Cairo
</code></pre><h3 id="errore-comune-comportamento-imprevisto-durante-l-iterazione-su-un-array"><strong>Errore comune: <strong><strong>comportamento imprevisto durante l'iterazione su un array</strong></strong></strong></h3><p>Sebbene sia possibile utilizzare un ciclo <code>for...in</code> per eseguire l'iterazione su un array, è consigliabile utilizzare invece un normale ciclo <code>for</code> o un ciclo <code>for...of</code>.</p><p>Il ciclo <code>for...in</code> può scorrere su array e oggetti simili a array, ma potrebbe non accedere sempre agli indici dell'array in ordine.</p><p>Inoltre, il ciclo <code>for...in</code> restituisce tutte le proprietà e le proprietà ereditate per un array o un oggetto simile a un array, e ciò può portare a comportamenti imprevisti.</p><p>Ad esempio, questo semplice ciclo funziona come previsto:</p><pre><code class="language-js">const array = [1, 2, 3];

for (const i in array) {
  console.log(i);
}

// 0
// 1
// 2
</code></pre><p>Ma se qualcosa come una libreria JS che stai usando modifica direttamente il prototipo dell' <code>Array</code>, un un ciclo &nbsp;<code>for...in</code> &nbsp;scorrerà anche su quello:</p><pre><code class="language-js">const array = [1, 2, 3];

Array.prototype.someMethod = true;

for (const i in array) {
  console.log(i);
}

// 0
// 1
// 2
// someMethod
</code></pre><p>Sebbene la modifica di prototipi di sola lettura come <code>Array</code> o <code>Object</code> vada direttamente contro le migliori pratiche, potrebbe essere un problema con alcune librerie o basi di codice.</p><p>Inoltre, poiché <code>for...in</code> è pensato per gli oggetti, è molto più lento con gli array rispetto ad altri cicli.</p><p>In breve, ricorda di usare solo i cicli <code>for...in</code> per scorrere gli oggetti, non gli array.</p><h2 id="ciclo-for-of"><strong>Ciclo <code>for...of</code></strong></h2><h3 id="sintassi-2"><strong>Sintassi</strong></h3><pre><code class="language-js">for (variabile of oggetto) {
  // codice
}
</code></pre><p>Il ciclo <code>for...of</code> esegue un'iterazione sui valori di molti tipi di iterabili, inclusi gli array e i tipi di raccolta speciali come <code>Set</code> e <code>Map</code>. Per ogni valore nell'oggetto iterabile, viene eseguito il codice nel blocco di codice.</p><h3 id="esempi-2"><strong>Esempi</strong></h3><p>1. Iterare su un array:</p><pre><code class="language-js">const arr = [ "Fred", "Tom", "Bob" ];

for (let i of arr) {
  console.log(i);
}

// Output:
// Fred
// Tom
// Bob
</code></pre><p>2. Iterare su &nbsp;<code>Map</code>:</p><pre><code class="language-js">const m = new Map();
m.set(1, "nero");
m.set(2, "rosso");

for (let n of m) {
  console.log(n);
}

// Output:
// [1, nero]
// [2, rosso]
</code></pre><p>3. Iterare su &nbsp;<code>Set</code>:</p><pre><code class="language-js">const s = new Set();
s.add(1);
s.add("rosso");

for (let n of s) {
  console.log(n);
}

// Output:
// 1
// rosso
</code></pre><h2 id="ciclo-while"><strong>Ciclo <code>while</code></strong></h2><h3 id="sintassi-3"><strong>Sintassi</strong></h3><pre><code class="language-js">while (condizione) {
  // istruzione
}
</code></pre><p>Il ciclo <code>while</code> inizia valutando la <code>condizione</code>. Se <code>condizione</code> restituisce <code>true</code>, il codice nel blocco delle istruzioni viene eseguito. Se <code>condizione </code> restituisce <code>false</code>, il codice nel blocco delle istruzioni non viene eseguito e il ciclo termina.</p><h3 id="esempi-"><strong>Esempi:</strong></h3><ol><li>Mentre una variabile è inferiore a 10, stampala sulla console e incrementala di 1:</li></ol><pre><code class="language-js">let i = 1;

while (i &lt; 10) {
  console.log(i);
  i++;
}

// Output:
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
</code></pre><h2 id="ciclo-do-while"><strong>Ciclo <code>do...while</code></strong></h2><h3 id="sintassi-"><strong>Sintassi:</strong></h3><pre><code class="language-js">do {
  // istruzione
} while (condizione);
</code></pre><p>Il ciclo <code>do...while</code> è strettamente correlato al ciclo <code>while</code>. In un ciclo <code>do...while</code>, la <code>condizione </code> &nbsp;viene verificata alla fine di ogni iterazione del ciclo, anziché all'inizio prima dell'esecuzione del ciclo.</p><p>Ciò significa che è garantito che il codice in un ciclo &nbsp;<code>do...while</code> venga eseguito almeno una volta, anche se l'espressione <code>condizione </code> &nbsp;restituisce già <code>true</code>.</p><h3 id="esempio-"><strong>Esempio:</strong></h3><ol><li>Mentre una variabile è inferiore a 10, stampala sulla console e incrementala di 1:</li></ol><pre><code class="language-js">let i = 1;

do {
  console.log(i);
  i++;
} while (i &lt; 10);

// Output:
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
</code></pre><p>2. Eseguire il push su un array, anche se la <code>condizione </code> restituisce <code>true</code>:</p><pre><code class="language-js">const myArray = [];
let i = 10;

do {
  myArray.push(i);
  i++;
} while (i &lt; 10);

console.log(myArray);

// Output:
// [10]</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Imparare gli Hook di React: una Guida per Principianti ]]>
                </title>
                <description>
                    <![CDATA[ I componenti funzionali non erano sempre il metodo preferito per dichiarare i componenti in React. Prima dell'introduzione di React versione 16.8, i componenti funzionali erano trattati in modo molto simile ai cittadini di seconda classe. Non erano in grado di gestire lo stato, la logica e molte altre funzionalità di ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/imparare-gli-hook-di-react-una-guida-per-principianti/</link>
                <guid isPermaLink="false">6224ccaddb2217050c2ed646</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Mon, 07 Mar 2022 09:05:43 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/The-Beginner-s-Guide-to-React-Hooks.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/the-beginners-guide-to-react-hooks/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Learn React Hooks – A Beginner's Guide</a>
      </p><p>I componenti funzionali non erano sempre il metodo preferito per dichiarare i componenti in React.</p><p>Prima dell'introduzione di React versione 16.8, i componenti funzionali erano trattati in modo molto simile ai cittadini di seconda classe. Non erano in grado di gestire lo stato, la logica e molte altre funzionalità di React e le abbiamo utilizzate solo per il rendering di componenti molto semplici nell'interfaccia utente.</p><p>React versione 16.8 ha risolto questi problemi introducendo gli Hook in React, che consentono agli sviluppatori di utilizzare queste funzionalità di React nei componenti funzionali.</p><p>In questo articolo imparerai:</p><ul><li>Cosa sono gli Hook di React</li><li>Quattro comuni Hook di React con esempi di come scriverli nelle tue applicazioni</li><li>Infine, daremo un'occhiata a come scrivere i tuoi Hook di React personalizzati</li></ul><p>Gli hook sono funzioni integrate di React introdotte nella versione 16.8. Consentono di utilizzare le funzionalità della libreria React come i metodi del ciclo di vita, lo stato e il contesto nei componenti funzionali senza doversi preoccupare di riscriverli in una classe.</p><p>Ogni nome degli Hook di React è preceduto dalla parola <code>"use"</code>. Ad esempio, <code>useState</code> o <code>useEffect</code>. Questo formato è stato scelto perché gli Hook consentono agli sviluppatori di utilizzare le funzionalità speciali della libreria React. Quindi stai usando ( <code>use</code>) quella caratteristica speciale della libreria di React.</p><h2 id="perch-usare-gli-hook-di-react"><strong>Perché usare gli Hook di React?</strong></h2><p>Molti sviluppatori sono scettici sull'apprendimento degli Hook di React. Ma tu non dovresti esserlo. Ecco alcuni motivi per cui dovresti iniziare a usare gli Hook di React:</p><h3 id="le-classi-in-react-possono-creare-confusione"><strong>Le classi in React possono creare confusione</strong></h3><p>Le classi sono un ostacolo all'apprendimento corretto di React. Per usarli, devi capire come funziona la parola chiave <code>this</code>. È inoltre necessario ricordare costantemente di associare i gestori di eventi, nonché altri metodi ridondanti incontrati quando si lavora con le classi in React.</p><h3 id="i-componenti-classe-sono-complessi-e-possono-essere-difficili-da-capire"><strong>I componenti classe sono complessi e possono essere difficili da capire</strong></h3><p>I componenti classe sono generalmente di grandi dimensioni e cercano di eseguire molte operazioni. A lungo andare, diventano difficili da capire.</p><p>Gli hook risolvono questo problema consentendo di separare componenti di grandi dimensioni in varie funzioni più piccole, anziché dover forzare tutta la logica in un unico componente.</p><h3 id="gli-hook-hanno-componenti-pi-corti-e-una-migliore-leggibilit-"><strong>Gli Hook hanno componenti più corti e una migliore leggibilità</strong></h3><p>I componenti classe sono dotati di molto codice standard. Considera il componente Contatore qui seguito:</p><pre><code class="language-javascript">class Contatore extends Component {
    constructor(props) {
        super(props)
        this.state = {
        	conto: 1,
        }
    }
    render() {
        return (
            &lt;div&gt;
                Il Conteggio Attuale: {this.state.conto}
                &lt;div&gt;
                &lt;button onClick={this.setState({ conto: this.state.conto + 1 })}&gt;
                addiziona
                &lt;/button&gt;
                &lt;button onClick={this.setState({ conto: this.state.conto - 1 })}&gt;
                sottrai
                &lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;
    );
    }
}</code></pre><p>Ecco il codice equivalente che utilizza il componente funzionale e React Hooks:</p><pre><code class="language-javascript">function Contatore ()  {
    const [conto, setConto] = useState(1);
    return (
        &lt;div&gt;
            Il Conteggio Attuale: {this.state.conto}
            &lt;div&gt;
                &lt;button onClick={() =&gt; setConto(conto + 1)}&gt;addiziona&lt;/button&gt;
                &lt;button onClick={() =&gt; setConto(conto - 1)}&gt;sottrai&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    );
};</code></pre><p>Nota come il componente della classe sia molto più complesso. Hai bisogno di una classe per estendere React, un costruttore per inizializzare lo stato e devi fare riferimento alla parola chiave <code>this</code> ovunque.</p><p>L'uso di componenti funzionali rimuove molto di questo, quindi il nostro codice diventa più breve e più facile da leggere e mantenere.</p><h2 id="regole-per-l-uso-degli-hook-di-react"><strong>Regole per l'uso degli Hook di React</strong></h2><p>Quando si utilizzano gli Hook di React ci sono alcune regole a cui attenersi:</p><ul><li><strong><strong>Chiama solo hook al livello superiore di un componente</strong></strong> : non dovresti usare hook all'interno di loop, condizioni o funzioni nidificate. Invece, usa sempre Hook al livello più alto della tua funzione React, prima di qualsiasi parola chiave di ritorno.</li><li><strong><strong>Chiama solo hook da React Functions</strong></strong> : non chiamare mai hook da normali funzioni JavaScript. Puoi:<br>✅ Chiamare Hook dai componenti funzionali di React.<br>✅ Chiama Hook da Hook personalizzati.</li></ul><h2 id="hook-di-react-pi-comuni"><strong>Hook di React più comuni</strong></h2><p>Ad oggi, React ha 10 hook integrati. Diamo un'occhiata ai quattro più comuni:</p><ul><li><code>useState</code></li><li><code>useEffect</code></li><li><code>useContext</code></li><li><code>useReducer</code></li></ul><h3 id="l-hook-usestate"><strong>L'Hook useState </strong></h3><p>L'Hook useState<strong> </strong>consente di creare, aggiornare e manipolare lo stato all'interno dei componenti funzionali.</p><p>React ha questo concetto di <em>stato</em>, che sono variabili che contengono dati da cui dipendono i nostri componenti e che possono cambiare nel tempo. Ogni volta che queste variabili cambiano, React aggiorna l'interfaccia utente eseguendo nuovamente il rendering del componente nel DOM con i valori correnti delle variabili di stato.</p><p>L'hook accetta un singolo argomento opzionale: un valore iniziale per lo stato. Quindi restituisce una matrice di due valori:</p><ul><li>La variabile di stato</li><li>Una funzione per aggiornare lo stato</li></ul><p>Come esempio, diamo un'occhiata a un componente <em>contatore</em>:</p><p>Per utilizzare un Hook, il primo passo è importare l'Hook nella parte superiore del file:</p><pre><code class="language-javascript">import { useState } from "react";</code></pre><p>Quindi, inizializza Hook con un valore. Poiché restituisce un array, puoi utilizzare la destrutturazione dell'array per accedere ai singoli elementi nell'array, in questo modo:</p><pre><code class="language-javascript">const [conto, setConto] = useState(0);</code></pre><p>Con ciò, il codice del componente sarà:</p><pre><code class="language-javascript">import { useState } from "react";

function Contatore() {
    // Dichiara una nuova variabile di stato, che chiameremo "conto"
    const [conto, setConto] = useState(0);
    return (
        &lt;div&gt;
        Current Cart Count: {count}
            &lt;div&gt;
            &lt;button onClick={() =&gt; setConto(conto - 1)}&gt;Add to cart&lt;/button&gt;
            &lt;button onClick={() =&gt; setConto(conto + 1)}&gt;Remove from cart&lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    );
}</code></pre><p>Ecco come apparirà il componente una volta renderizzato.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Counter.gif" class="kg-image" alt="Contatore" width="600" height="400" loading="lazy"></figure><p>Facendo clic sul pulsante <strong><strong>Add to cart</strong></strong> o <strong><strong>Remove from cart</strong></strong>, il valore del conteggio della variabile di stato cambierà e il componente verrà visualizzato nuovamente con il valore aggiornato dello stato.</p><h3 id="l-hook-useeffect"><strong>L'Hook useEffect </strong></h3><p>Se hai familiarità con i metodi del ciclo di vita della classe React, puoi pensare a l'Hook &nbsp;<code>useEffect</code> come ai metodi del ciclo di vita <code>componentDidMount</code>, <code>componentDidUpdate</code>, e <code>componentWillUnmount</code> tutti combinati in un'unica funzione. Ti consente di replicare i metodi del ciclo di vita di React nei componenti funzionali.</p><p>L'Hook <code>useEffect</code> ti consente di eseguire effetti collaterali nei componenti delle funzioni. Gli effetti collaterali sono azioni che possono essere eseguite insieme alle operazioni principali di un componente, come le interazioni con API esterne, la modifica delle variabili di stato e il recupero dei dati.</p><p>L'hook <code>useEffect</code> accetta 2 argomenti:</p><ul><li>Una funzione con il codice da eseguire</li><li>Un array che contiene un elenco di valori dall'ambito del componente (props, contesto e variabili di stato), noto come array di dipendenza, che dice a l'Hook di essere eseguito ogni volta che il suo valore viene aggiornato. Se non viene fornito, l'Hook verrà eseguito dopo ogni rendering.</li></ul><p>Ecco un esempio di utilizzo di Hook:</p><pre><code class="language-javascript">import { useState, useEffect } from "react";
function Contatore() {
    // Dichiara variabili di stato
    const [conto, setConto] = useState(0);
    const [prodotto, setProdotto] = useState("Eggs");
    useEffect(() =&gt; {
    	console.log(`${product} will rule the world!`);
    });
    return (
        &lt;div&gt;
        Current {product}'s count: {conto}
            &lt;div&gt;
                &lt;button onClick={() =&gt; setConto(conto + 1)}&gt;Add to cart&lt;/button&gt;
                &lt;button onClick={() =&gt; setconto(conto - 1)}&gt;Remove from cart&lt;/button&gt;
                Change Product:{" "}
                &lt;input type="text" onChange={(e) =&gt; setProdotto(e.target.value)} /&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    );
}</code></pre><p>Nell'esempio, l'effetto verrà eseguito dopo ogni aggiornamento dello stato.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Effect-default.gif" class="kg-image" alt="Effetto predefinito" width="600" height="400" loading="lazy"></figure><h4 id="come-attivare-condizionalmente-un-effetto"><strong>Come attivare condizionalmente un Effetto</strong></h4><p>Per eseguire l'Hook solo quando determinati valori sono cambiati, passare le variabili come dipendenza nell'array:</p><pre><code class="language-javascript">useEffect(() =&gt; {
	console.log(`${product} will rule the world!`);
}, [prodotto]); // Eseguire nuovamente l'effetto solo se il valore del prodotto cambia</code></pre><p>Con questa modifica, Hook verrà eseguito solo al primo rendering e quando il valore del prodotto viene modificato.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Effect-dependency-array.gif" class="kg-image" alt="Matrice di dipendenza dagli effetti" width="600" height="400" loading="lazy"></figure><h4 id="come-eseguire-una-volta-al-primo-rendering"><strong>Come eseguire una volta al primo rendering</strong></h4><p>Se vuoi che un effetto venga eseguito solo una volta al primo rendering, come fare chiamate API quando il componente viene renderizzato per la prima volta, puoi passare un array vuoto come sua dipendenza in questo modo:</p><pre><code class="language-javascript">useEffect(() =&gt; {
	console.log("Questo viene eseguito una volta al primo rendering");
}, []);</code></pre><p>Fornendo un array vuoto, dice a Hook di rimanere in ascolto per zero cambiamenti di stato, quindi verrà eseguito solo una volta.</p><h3 id="l-hook-usecontext"><strong>L'Hook useContext </strong></h3><p>L'Hook <code>useContext</code> funziona con l'API React Context. Fornisce un modo per rendere accessibili dati particolari a tutti i componenti dell'applicazione, indipendentemente dalla loro profondità di annidamento.</p><p>React ha un flusso di dati unidirezionale, in cui i dati possono essere passati solo da genitore a figlio. Per passare i dati (come lo stato) da un componente padre a un componente figlio, dovrai passarli manualmente come <em>prop</em> attraverso vari livelli a seconda di quanto profondamente è nidificato il componente figlio.</p><p>Per dati come la lingua preferita dall'utente, il tema o le proprietà dell'utente autenticato, è noioso doverli passare manualmente nell'albero dei componenti.</p><p>L'API Context di React e l'Hook <code>useContext</code> semplificano il passaggio dei dati tra tutti i componenti dell'app.</p><p>Accetta un oggetto di contesto creato utilizzando <code>React.createContext</code> e restituisce il contesto corrente in questo modo:</p><pre><code class="language-javascript">const valore = useContext(QualcheContesto);</code></pre><p>Diamo un'occhiata a un esempio di come funziona l'Hook:</p><p>Innanzitutto, crea un contesto per utilizzare l'Hook. Ad esempio, ecco un UserContext per ottenere il valore degli utenti correnti:</p><pre><code class="language-javascript">import React from "react";
// alcuni valori di contesto fittizi
const utenti = [
{
    nome: "Harry Potter",
    occupazione: "Wizard",
},
{
    nome: "Kent Clark",
    occupazione: "Super hero,
},
];

export const UserContext = React.createContext(utenti);</code></pre><p>Ogni contesto ha un wrapper Provider, che consente ai suoi componenti figli di sottoscrivere le modifiche nel contesto e trasmette il valore del contesto attraverso un valore prop.</p><p>Se il valore prop del provider viene aggiornato, i suoi componenti figlio ad esso collegato, verranno nuovamente visualizzati con il nuovo valore di contesto.</p><pre><code class="language-javascript">function Utenti() {
return (
    &lt;UserContext.Provider valore={utenti}&gt;
    &lt;UserProfile /&gt;
    &lt;/UserContext.Provider&gt;
);
}</code></pre><p>Nell'esempio, <code>UserProfile</code> viene resa come componente di consumo del contesto.</p><pre><code class="language-javascript">import React, { useContext } from "react";
import { UserContext } from "./App";

export function UserProfile() {
    const utenti = useContext(UserContext);
    return (
        &lt;div&gt;
            {users.map((utente) =&gt; (
            &lt;li&gt;
            I am {utente.nome} and I am a {utente.occupazione
            ))}
        &lt;/div&gt;
    );
}</code></pre><p>Questo visualizzerà le proprietà degli utenti correnti:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2025/03/rendered-page.png" class="kg-image" alt="rendered-page" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2025/03/rendered-page.png 600w, https://www.freecodecamp.org/italian/news/content/images/2025/03/rendered-page.png 977w" sizes="(min-width: 720px) 720px" width="977" height="477" loading="lazy"></figure><h3 id="l-hook-usereducer"><strong>L'Hook useReducer </strong></h3><p>L'Hook <code>useReducer</code> è un'alternativa all'Hook &nbsp;<code>useState</code>. La differenza è che consente una logica più complessa e aggiornamenti di stato che coinvolgono più sottovalori.</p><p>Simile a <code>useState</code>, <code>useReducer</code> ti consente di creare variabili simili a uno stato che aggiornano l'interfaccia utente ogni volta che cambiano.</p><p>Questo Hook accetta 2 argomenti: una funzione riduttore e uno stato iniziale.</p><p><code>useReducer(riduttore, statoIniziale);</code></p><p>Restituisce una matrice di due valori che possono essere destrutturati nel valore corrente dello stato e una funzione di invio.</p><pre><code class="language-javascript">const [stato, spedizione] = useReducer(riduttore, statoIniziale);</code></pre><p>Impariamo i suoi argomenti e i valori restituiti:</p><ul><li><strong><strong>stat</strong>o</strong> : questo è il valore corrente di statoIniziale passato all'Hook.</li><li><strong><strong>riduttore</strong></strong> : il riduttore è una funzione che accetta lo stato e un'azione. Sulla base di questi argomenti determina come cambierà il valore di stato.</li><li><strong>spedizione</strong>: la funzione di spedizione è il modo in cui passiamo un'azione alla funzione di riduzione. Invia l'azione da utilizzare per aggiornare lo stato.</li></ul><p>In genere, ripetiamo il tipo di azioni eseguite nella nostra app tramite un'istruzione switch per determinare come cambierà il valore dello stato. Ecco come Hook aggiorna i valori del suo stato.</p><pre><code class="language-javascript">function riduttore(stato, azione) {
    switch (azione.type) {
        case "CASE_1":
        return {
        	aggiornaStato,
        };
        case "CASE_2":
        return {
        	aggiornaStato,
        };
        default:
        	return stato;
    }
}</code></pre><p>La funzione di spedizione di solito invia un oggetto nel formato:</p><pre><code class="language-javascript">spedizione({ type: "ACTION_TYPE", payload: argomentiOpzionali });</code></pre><p>Dove type è la descrizione dell'azione e payload sono gli argomenti che vuoi passare al riduttore.</p><h2 id="come-creare-hook-personalizzati"><strong>Come creare Hook personalizzati</strong></h2><p>Un Hook personalizzato è l'idea di estrarre la logica dei componenti comunemente usati dall'interfaccia utente in funzioni JavaScript utilizzando gli Hook di React già disponibili. Questo ti aiuta a prevenire la duplicazione del codice e ti consente di rendere tale logica riutilizzabile all'interno di più componenti.</p><p>Diamo un'occhiata a un esempio di hook personalizzato che restituirà una risposta da qualsiasi URL API valido che gli passiamo.</p><pre><code class="language-javascript">//useFetch.js
import { useState, useEffect } from "react";

export function useFetch(url) {
	//values
    const [data, setData] = useState(null);
    const [error, setError] = useState("");
    useEffect(() =&gt; {
        fetch(url)
        .then(res =&gt; {
            if (!res.ok) {
            throw Error("qualcosa di sbagliato, non è stato possibile connettersi alla risorsa");
        }
        setData(res.json());
        })
        .then(() =&gt; {
        	setError("");
        })
        .catch( error =&gt; {
            console.warn(`scusa si è verificato un errore, dovuto a ${error.message} `);
            setData(null);
            setError(error.message);
        });
    }, [url]);
    return [data, error];
}</code></pre><p>Ora puoi usare questa logica ovunque nella tua app semplicemente importando la funzione e passando un percorso API come argomento, invece di scrivere tutto da zero.</p><h2 id="ricapitolando"><strong>Ricapitolando</strong></h2><p>Spero che tu abbia compreso quanto sono utili gli Hook di React. Ti consentono di creare al volo componenti efficaci senza preoccuparti dei problemi che derivano dall'uso dei componenti di classe.</p><p>Dal permetterti di concentrarti sulla scrittura del tuo codice principale al permetterti di creare i tuoi Hook personalizzati… Gli Hook di React sono così fantastici! Sono entusiasta che li possa provare tu stesso.</p><p>Se hai trovato utile questo articolo, condividilo con i tuoi amici e la tua rete. Inoltre, sentiti libero di connetterti con me su <a href="https://twitter.com/Victor_codejs">Twitter</a> e sul mio <a href="https://vickyikechukwu.hashnode.dev/">blog</a> dove condivido una vasta gamma di articoli e risorse didattici gratuite.</p><p>Grazie per la lettura e buona codifica!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come funziona davvero la blockchain? Ho creato un'app per mostrartelo. ]]>
                </title>
                <description>
                    <![CDATA[ di Sean Han Secondo Wikipedia, una blockchain è: > Un database distribuito utilizzato per mantenere un elenco di record in continua crescita, chiamati blocchi . Sembra carino, ma come funziona? Per illustrare una blockchain, utilizzeremo un'interfaccia a riga di comando open source chiamata Blockchain CLI [https://github.com/seanseany/blockchain-cli] . Ho anche creato ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-funziona-davvero-la-blockchain-ho-creato-unapp-per-mostrartelo/</link>
                <guid isPermaLink="false">62224484db2217050c2ed475</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Mon, 07 Mar 2022 08:34:07 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/1_Y3c_hIqCuiDH4x-8dObVyg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-does-blockchain-really-work-i-built-an-app-to-show-you-6b70cd4caf7d/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How does blockchain really work? I built an app to show you.</a>
      </p><p>di Sean Han</p><p>Secondo Wikipedia, una blockchain è:</p><blockquote>Un database distribuito utilizzato per mantenere un elenco di record in continua crescita, chiamati <em><em>blocchi</em></em> .</blockquote><p>Sembra carino, ma come funziona?</p><p>Per illustrare una blockchain, utilizzeremo un'interfaccia a riga di comando open source chiamata <a href="https://github.com/seanseany/blockchain-cli" rel="noopener">Blockchain CLI</a> .</p><p>Ho anche creato una <a href="http://blockchaindemo.io/" rel="noopener">versione basata su browser di questo qui</a> .</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/zSZrnGuYhLmiKeazyIjY-TyzCTcZBjBZoQ1x" class="kg-image" alt="zSZrnGuYhLmiKeazyIjY-TyzCTcZBjBZoQ1x" width="800" height="583" loading="lazy"></figure><h3 id="installazione-della-versione-dell-interfaccia-della-riga-di-comando"><strong><strong>Installazione della versione dell'interfaccia della riga di comando</strong></strong></h3><p>Se non lo hai già fatto, installa <a href="https://nodejs.org/download/" rel="noopener">Node.js</a> .</p><p>Quindi esegui quanto segue nel tuo terminale:</p><pre><code class="language-bash"># Clona questo repository
$ git clone https://github.com/seanseany/blockchain-cli

# Vai nel repository
$ cd blockchain-cli

# Installa le dipendenze
$ npm install

# Avvia l'app
$ npm start</code></pre><p>Dovresti vedere <code>? Welcome to Blockchain CLI!</code> e il prompt &nbsp;<code>blockchain → </code> pronto a ricevere comandi.</p><h3 id="che-aspetto-ha-un-blocco"><strong><strong>Che aspetto ha un blocco?</strong></strong></h3><p>Per vedere la tua blockchain attuale, inserisci <code>blockchain</code> o <code>bc</code> nel prompt dei comandi. Dovresti vedere un blocco come l'immagine qui sotto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/EJwQgibxDMqIpDvroRN-k5R4CWR5ZZj6-vIw" class="kg-image" alt="EJwQgibxDMqIpDvroRN-k5R4CWR5ZZj6-vIw" width="616" height="420" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Un blocco sulla blockchain</font></font></figcaption></figure><ul><li><strong><strong>Indice (blocco n.):</strong></strong> quale blocco è? (Il blocco Genesis ha indice 0)</li><li><strong><strong>Hash:</strong></strong> il blocco è valido?</li><li><strong><strong>Hash precedente:</strong></strong> il blocco precedente è valido?</li><li><strong><strong>Timestamp:</strong></strong> quando è stato aggiunto il blocco?</li><li><strong><strong>Dati:</strong></strong> quali informazioni sono memorizzate nel blocco?</li><li><strong><strong>Nonce:</strong></strong> quante iterazioni abbiamo passato prima di trovare un blocco valido?</li></ul><h4 id="blocco-genesis"><strong><strong>Blocco </strong>Genesis</strong></h4><p>Ogni blockchain inizierà con <code>? Genesis Block.</code> Come vedrai più avanti, ogni blocco sulla blockchain dipende dal blocco precedente. Quindi, il blocco Genesis è necessario per estrarre il nostro primo blocco.</p><h3 id="cosa-succede-quando-viene-estratto-un-nuovo-blocco"><strong><strong>Cosa succede quando viene estratto un nuovo blocco?</strong></strong></h3><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/p0XcmG5w3eBvkxEejjPVd99nNBCzUqrhdxbQ" class="kg-image" alt="p0XcmG5w3eBvkxEejjPVd99nNBCzUqrhdxbQ" width="262" height="28" loading="lazy"></figure><p>Estraiamo il nostro primo blocco. &nbsp;Digita <code>mine freeCodeCamp♥︎</code> nel prompt.</p><p>La blockchain esamina l'ultimo blocco sulla blockchain per l'indice e l'hash precedente. In questo caso il blocco Genesis è l'ultimo blocco.</p><ul><li><strong><strong>Indice:</strong></strong> o+1 = 1</li><li><strong><strong>Hash precedente:</strong></strong> 0000018035a828da0…</li><li><strong><strong>Timestamp:</strong></strong> quando viene aggiunto il blocco</li><li><strong><strong>Dati:</strong></strong> freeCodeCamp❤</li><li><strong><strong>Hash:</strong></strong> ??</li><li><strong><strong>Nonce:</strong></strong> ??</li></ul><h3 id="come-viene-calcolato-l-hash"><strong><strong>Come viene calcolato l'hash?</strong></strong></h3><p>Un <strong><strong>valore hash è un valore</strong></strong> numerico di lunghezza fissa che identifica i dati in modo univoco.</p><p>L'hash viene calcolato prendendo l'indice, l'hash del blocco precedente, il timestamp, i dati del blocco e nonce come input.</p><pre><code class="language-js">CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)</code></pre><p>L'algoritmo SHA256 calcolerà un hash univoco, dati questi input. Gli stessi input restituiranno sempre lo stesso hash.</p><h4 id="hai-notato-i-quattro-0-iniziali-nell-hash-del-blocco"><strong><strong>Hai notato i quattro 0 iniziali nell'hash del blocco?</strong></strong></h4><p>I quattro 0 iniziali sono un requisito minimo per un hash valido. Il numero di 0 iniziali richiesti è chiamato <strong><strong>difficoltà</strong></strong> .</p><pre><code class="language-js">function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i &lt; b; i ++) {
      if (hash[i] !== '0') {
          break;
      }
  }
  return i &gt;= difficulty;
}</code></pre><p>Questo è anche noto come il sistema <a href="https://en.wikipedia.org/wiki/Proof-of-work_system" rel="noopener">Proof-of-Work</a> .</p><h3 id="cos-un-nonce"><strong><strong>Cos'è un nonce?</strong></strong></h3><p>Un nonce è un numero utilizzato per trovare un hash valido.</p><pre><code class="language-js">let nonce = 0;
let hash;
let input;

while(!isValidHashDifficulty(hash)) {     
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}</code></pre><p>Il nonce itera finché l'hash non è valido. Nel nostro caso, un hash valido ha almeno quattro 0 iniziali. Il processo per trovare un nonce che corrisponda a un hash valido è il <strong><strong>mining</strong></strong> .</p><p><strong><strong>All'aumentare</strong></strong> della difficoltà, il numero di possibili hash validi <strong><strong>diminuisce</strong></strong><em><em>. </em></em>Con meno hash validi possibili, ci vuole più potenza di elaborazione per trovare un hash valido.</p><h3 id="perch-importante"><strong><strong>Perché è importante?</strong></strong></h3><p>È importante perché mantiene immutabile la blockchain.</p><p>Se abbiamo la seguente blockchain A → B → C, e qualcuno vuole cambiare i dati sul Blocco A. Ecco cosa succede:</p><ol><li>Modifiche ai dati sul blocco A.</li><li>L'hash del blocco A cambia perché i dati vengono utilizzati per calcolare l'hash.</li><li>Il blocco A diventa non valido perché il suo hash non ha più quattro 0 iniziali.</li><li>L'hash del blocco B cambia perché l'hash del blocco A è stato utilizzato per calcolare l'hash del blocco B.</li><li>Il blocco B diventa non valido perché il suo hash non ha più quattro 0 iniziali.</li><li>L'hash del blocco C cambia perché l'hash del blocco B è stato utilizzato per calcolare l'hash del blocco C.</li><li>Il blocco C diventa non valido perché il suo hash non ha più quattro 0 iniziali.</li></ol><p>L'unico modo per mutare un blocco sarebbe minare di nuovo il blocco e tutti i blocchi successivi. Poiché vengono sempre aggiunti nuovi blocchi, è quasi impossibile mutare la blockchain.</p><p>Spero che questo tutorial ti sia stato utile!</p><p>Se desideri provare una versione web della demo, vai su <a href="http://blockchaindemo.io/" rel="noopener">http://blockchaindemo.io</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cos'è Blockchain e come funziona? ]]>
                </title>
                <description>
                    <![CDATA[ Se sei appassionato di tecnologia, ci sono buone possibilità che tu abbia sentito i termini Bitcoin, Crypto, Ethereum o anche "registri distribuiti e decentralizzati". Probabilmente hai sentito parlare di criptovaluta e algoritmi di crittografia, della fine degli "intermediari" e così via. Comunemente si è portati a pensare che le criptovalute ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/cose-blockchain-e-come-funziona/</link>
                <guid isPermaLink="false">62210bd7db2217050c2ed37f</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web3 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Mon, 07 Mar 2022 08:26:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/5f9c9ca4740569d1a4ca335e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/what-is-blockchain-and-how-does-it-work/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is Blockchain and how does it work?</a>
      </p><p>Se sei appassionato di tecnologia, ci sono buone possibilità che tu abbia sentito i termini Bitcoin, Crypto, Ethereum o anche "registri distribuiti e decentralizzati".</p><p>Probabilmente hai sentito parlare di criptovaluta e algoritmi di crittografia, della fine degli "intermediari" e così via.</p><p>Comunemente si è portati a pensare che le criptovalute (es: Bitcoin, Ripple, Ethereum, Litecoin, ecc.) e la Blockchain siano la stessa cosa. Ma non così.</p><p><a href="https://en.wikipedia.org/wiki/Cryptocurrency">Le criptovalute</a> sono un'applicazione intelligente di una tecnologia molto più intelligente: <a href="http://en.wikipedia.org/wiki/Blockchain_(database)" rel="nofollow noopener">la Blockchain</a> .</p><p>In questo post tratterò alcuni dei concetti di base della Blockchain in modo da capire di cosa si tratta, come deve essere concettualizzata e cosa si può costruire su di essa.</p><p>Ma come per tutte le cose, ha più senso se capisci <em><em>perché</em></em> sono state inventate, prima di entrare in quello che fanno. In questo modo ti sarà più facile capire per quale problema da risolvere è stata progettata la blockchain.</p><h2 id="perch-usare-blockchain"><strong>Perché usare blockchain?</strong></h2><p>Ottima domanda. Sono così felice che tu l'abbia chiesto. Sediamoci e facciamo un piccolo esperimento mentale.</p><p>Cosa succede se tu e il tuo migliore amico conducete <em><em><em><em>indipendentemente</em></em> e separatamente</em></em> la stessa campagna di petizioni? Diciamo che è per la causa "Liberate i criceti".</p><p>Diciamo che la conduci rispettando una sequenza identica al tuo amico e nello stesso sobborgo, ma tiri fuori un diverso numero di adesioni alla petizione. Quale versione della petizione firmata è la “fonte di verità”?</p><p>Dovresti risalire lungo i due elenchi di firme, una firma alla volta, per individuare l'<em><em><em><em>ultima</em></em></em></em> discrepanza. E poi dovresti lavorare più indietro per identificare il primo risultato che diverge tra le due liste. Prima di tale punto di origine della divergenza, tutte le altre firme nei due elenchi dovrebbero corrispondere.</p><p>Quindi una cosa è sicura. Prima di questo punto di divergenza, entrambe le liste sono in accordo, quindi quelle firme rappresentano il numero minimo di persone che hanno firmato per sostenere la liberazione dei criceti.</p><p>Sebbene possa funzionare bene per criceti e piccoli sondaggi suburbani, non funziona così bene nel mondo digitale. Oppure votazioni, operazioni bancarie, transazioni finanziarie, trasferimento di proprietà fondiarie, adempimento di obblighi contrattuali, ecc. Sono necessarie "terze parti di fiducia" indipendenti per verificare una catena di eventi e rassicurarti solennemente che la "catena di custodia" non è stata interrotta.</p><p>Una "catena di custodia" a volte può anche essere chiamata "provenienza" - entrambe significano la stessa cosa: la sequenza di eventi storici relativi ai dati in questione.</p><p>Ecco perché ci sono governi che hanno l'ultima parola sulla tua identità, e i voti devono essere contati fisicamente e ricontati da centinaia di volontari, e gli impiegati in uffici squallidi tengono registri e certificati per confermare se possiedi o meno la tua fattoria o la staccionata bianca del bungalow.</p><p>Ecco perché hai bisogno di intermediari finanziari per assicurarti che quando acquisti il tuo pupazzo da collezione di Darth Vader, utilizzando una carta di credito, il denaro (valore) venga "rimosso" dal tuo account e "immesso" sul conto del venditore.</p><p>Questo è tecnicamente chiamato il "<a href="https://en.wikipedia.org/wiki/Double-spending">problema della doppia spesa</a>": come ci si assicura di non spendere gli stessi soldi due volte? Senza qualcuno che lo faccia, potresti spendere i soldi e allo stesso tempo continuare a possedere quei soldi stessi.</p><p>Quindi è davvero un grosso problema: la vita moderna richiede che ci affidiamo, ci fidiamo e paghiamo intermediari di terze parti "fidati" per garantire che il valore (il denaro) effettivamente "passi di mano" digitalmente. Ecco perché esistono Visa e MasterCard e perché PayPal e altri si collegano ai tuoi conti bancari.</p><blockquote>Al centro del perché della Blockchain c'è questo problema: come fai a sapere che una sequenza di eventi non è stata manomessa per alterare lo stato attuale?</blockquote><p>È qui che si inserisce la Blockchain. Chiaro finora?</p><h2 id="come-funziona-blockchain"><strong>Come funziona Blockchain</strong></h2><p>Allo scopo di comunicare un concetto con semplicità, posso prendermi delle libertà con alcuni degli aspetti tecnici e nascosti di questa tecnologia. Il mio obiettivo è farti capire di cosa si tratta e avere un modello mentale di come funziona. Per questo, potrei aver bisogno di essere un po' sciolto con la precisione al fine di migliorare le probabilità di comprensione, specialmente per i non madrelingua.</p><p>Per la precisione, è essenziale ricordare che la Blockchain è una tecnologia, un codice software matematicamente complesso. E Bitcoin (o Ethereum o qualsiasi altra criptovaluta offerta) sono solo applicazioni di questa tecnologia.</p><p>Quindi i principi chiave sono:</p><ul><li>Le blockchain vengono "estratte" (prodotte attraverso il dispendio di sforzi, come nell'estrazione dell'oro) da computer potenti e affamati di risorse – chiamati nodi, che si trovano sulla stessa rete.</li><li>Catene di registrazioni di transazioni crittografate digitalmente e con timestamp sono raggruppate in "blocchi", che vengono mantenuti su un "registro" da ciascun nodo. Quando le transazioni vengono aggiunte a un blocco, i blocchi vengono collegati tra loro in modo lineare e cronologico come "catene". Quindi l'intero record/registro viene sincronizzato attraverso la rete di nodi in modo tale che tutte le "catene" di blocchi sui nodi dovrebbero raccontare la stessa identica cosa circa l'iter di una determinata transazione. Quindi otteniamo "blocco + catena = blockchain". È una lunga e complicata lista concatenata.</li><li>Ogni blocco in una catena ha il proprio ID, un hash crittografico unico e specifico per ogni blocco. Quell'hash viene anche memorizzato nel blocco <em><em>successivo della catena, causando un collegamento. </em></em>Un blocco può memorizzare migliaia di transazioni e la più piccola modifica ai dati di quel blocco risulterebbe in un nuovo hash. Quindi, se un hash cambia ma il blocco successivo ha un hash diverso, sappiamo che alcuni dati nel blocco precedente sono stati manomessi.</li><li>Man mano che centinaia diventano migliaia di nodi (e ne vengono aggiunti altri continuamente), ogni nodo deve "concordare" sulla cronologia dei blocchi/registro – questo è chiamato "consenso critico". Uno dei modi in cui si ottiene il consenso è attraverso l'hash crittografico di cui abbiamo parlato prima.</li><li>In caso di discrepanze nel registro (ad esempio l'hash di un blocco non corrisponde al riferimento del blocco successivo all'hash del blocco precedente), il registro con la catena più lunga di transazioni valide incorporate sarà quello “corretto” – la fonte di verità. Eventuali nodi che lavorano su altri nodi (versioni più corte) della catena passano a quella più lunga. Ciò mantiene il consenso critico (questo concetto è estremamente semplificato, ma per ora sufficiente).</li><li>Qualsiasi intercettazione o modifica malevola di un registro (di nuovo, ad esempio, quando l'hash di un blocco non corrisponde) creerebbe immediatamente una discrepanza con tutte le altre versioni. Avrebbe anche una "storia" di blocco più breve a confermarlo, il che rende quella versione manomessa un elemento sospetto nella rete blockchain dove la lunghezza conta (ehm).</li><li>Replicare quella discrepanza su <em><em><em><em>tutte</em></em></em></em> le versioni registro - l'intera rete blockchain - è un compito così enorme che è poco pratico dal punto di vista computazionale e accadrebbe solo se i malintenzionati avessero improvvisamente il controllo sulla <em><em><em><em>maggior parte</em></em></em></em> dei nodi che estraggono blockchain e li cambiassero tutti piuttosto rapidamente. Questo tipo di attacco coordinato alla maggior parte dei nodi della rete è spesso chiamato <a href="https://en.bitcoin.it/wiki/Majority_attack">attacco del 51%</a> .</li></ul><p>È interessante notare che Satoshi Nakamoto afferma nel <a href="http://bitcoin.org/bitcoin.pdf">white paper originale di Bitcoin</a> ,</p><blockquote>“ <em><em><em><em>In quanto tale, la verifica è affidabile fintanto che i nodi onesti controllano la rete, ma è più vulnerabile se la rete è sopraffatta da un utente malintenzionato. </em></em></em></em>"</blockquote><p>Tuttavia, altrove <a href="http://en.wikipedia.org/wiki/Satoshi_Nakamoto" rel="nofollow noopener">lui/lei/l'organizzazione</a> (non sappiamo chi sia "Satoshi") sottolinea con calma che modificare le passate transazioni nei blocchi, sull'intera rete di nodi, richiederebbe all'attaccante di rifare la catena di custodia in quei blocchi, e tutti i blocchi aggiunti dopo. Quindi dovrebbe correre come un pazzo per raggiungere e superare il lavoro dei nodi che non sono sotto il suo controllo (in modo che possa riscrivere il registro, per così dire).</p><p>E per questo motivo, la "<em><em><em><em>probabilità che un attaccante lento </em></em></em>recuperi il ritardo,<em><em><em> diminuisce esponenzialmente man mano che vengono aggiunti blocchi successivi</em></em></em></em>".</p><p>L'assoluta complessità programmatica, il ritmo e il volume delle attività nodali rendono difficile per i falsari/attaccanti recuperare il ritardo, per non parlare di superare i nuovi blocchi costantemente estratti.</p><p>Questo ha senso. È come la bugia che dici a un membro della famiglia sul motivo per cui non hai potuto partecipare al saggio di flauto dei loro figli. E poi devi inseguire pazzamente tutti gli altri membri della famiglia e assicurarti di aver detto loro la stessa bugia in modo che quando la persona interessata a cui hai mentito tira fuori l'argomento, tutti siano consapevoli di questa bugia e tengano il tuo gioco. Sembra estenuante.</p><p>Per concludere, la caratteristica distintiva di una blockchain è che è un registro distribuito su molti, molti nodi ed è estremamente intensivo dal punto di vista computazionale (costoso) aggiungere nodi a quella rete.</p><p>Pertanto, ogni registro deve essere "consapevole" di tutte le transazioni e deve avere una versione concordata (che avrà la "catena di custodia" più lunga dietro di sé) attraverso l'intera rete a cui verrà aggiunta la transazione successiva.</p><blockquote><em><em>Come <a href="http://bitcoin.org/bitcoin.pdf" rel="nofollow noopener">dichiara Satoshi Nakamoto</a> nel white paper originale di Bitcoin, "<em><em>L'unico modo per confermare l'assenza di una transazione è essere a conoscenza di tutte le transazioni.</em></em>"</em></em></blockquote><p>È importante sottolineare che la blockchain "<a href="https://en.wikipedia.org/wiki/Disintermediation">dis-intermediata</a>" è fidata, quindi non dobbiamo pagare commissioni di transazione a "terze parti fidate" per essere affidabili e mantenerci onesti noi e le controparti con cui trattiamo . La blockchain garantisce in modo programmatico la verità (provenienza) della cronologia delle transazioni in essa contenute.</p><h3 id="allora-perch-dovremmo-preoccuparci"><strong>Allora perché dovremmo preoccuparci?</strong></h3><p>Ebbene, eliminando la necessità di “intermediari di fiducia” qualsiasi intermediario che fa pagare un compenso modesto per averci dato il dono della certezza ha bisogno di trovare un nuovo lavoro. E questo ha un impatto sulle banche che tradizionalmente offrono tali servizi assicurativi.</p><p>Significa anche che possiamo programmare "<a href="https://en.wikipedia.org/wiki/Smart_contract">contratti intelligenti</a>" tra il promittente e il promesso che si accorgono automaticamente (digitalmente) se quella promessa è stata mantenuta o meno.</p><p>Ciò ha consentito a un'artista davvero esperta di tecnologia come <a href="http://fortune.com/2016/09/22/blockchain-music-disruption/" rel="nofollow noopener">Imogen Heap di vendere la sua musica direttamente</a> al suo pubblico di ascolto e di riscuotere le sue quote direttamente da loro piuttosto che perdere la maggior parte dei guadagni per etichette discografiche, manager e altri "intermediari di fiducia".</p><p>Probabilmente cambierà il modo in cui la proprietà intellettuale sarà protetta, accessibile, condivisa, distribuita e sviluppata su Internet.</p><p>Potrebbe anche significare che la flotta di conducenti di Uber effettua transazioni direttamente con le persone che desiderano un passaggio piuttosto che affidarsi a Uber per coordinare e controllare il flusso di informazioni e denaro.</p><p>Potrebbe significare che potrei inviarti direttamente piccole somme di denaro praticamente senza commissioni (microtransazioni). Potrebbe significare che i milioni di persone senza banca nel mondo che hanno uno smartphone possono iniziare a effettuare transazioni ben oltre i loro tradizionali confini del mondo fisico.</p><p>In modo sorprendente, i governi stanno guardando oltre la semplice criptovaluta pensando al modo con cui implementare questa tecnologia , <a href="http://dci.mit.edu/assets/papers/spielman_thesis.pdf" rel="nofollow noopener">ad esempio per </a><a href="http://www.redherring.com/startups/georgia-pilots-sweden-ponders-blockchain-future-europes-land-registries/" rel="nofollow noopener">registrare la proprietà terriera</a> .</p><p>In effetti, potremmo creare un mondo di vere transazioni digitali peer-to-peer per il trasferimento di valore che sia distribuito, orizzontale, rimuova la necessità di fare affidamento sulla fiducia e soprattutto richieda una straordinaria potenza di calcolo per manometterlo. Queste transazioni potrebbero essere tra persone, macchine e dispositivi.</p><p>Potrebbe quindi offrire un nuovo paradigma di sicurezza per la protezione dei dati raccolti e trasferiti attraverso "l'internet delle cose".</p><p>Personalmente credo che la complessità del mondo moderno sia oscurata dietro i touchscreen intuitivi. La tecnologia blockchain sarà rapidamente integrata nel nostro universo tecnologico senza che noi ne saremo pienamente consapevoli, proprio come utilizziamo il DNA ricombinante del lievito per la produzione di insulina sintetica dagli anni '70.</p><p>I cambiamenti e i risparmi sui costi saranno ampiamente definiti cambiamenti tecnologici, come quella "cosa interweby" o qualche altra frase vaga e all-inclusive.</p><p>Un problema: funzionerà finché possiamo confidare che un "sistema senza fiducia" codificato e progettato dagli esseri umani (di chi ci fidiamo?) promuoverà la causa di processi senza-fiducia in un mondo diffidente e inaffidabile . Potrebbe essere necessario leggere questa frase più volte.</p><h2 id="ricapitolando"><strong>Ricapitolando</strong></h2><p>OK – ora dovresti essere ragionevolmente consapevole delle basi della blockchain. Ma se sei interessato c'è molto altro da imparare.</p><p>Puoi discutere se la blockchain sia utile o troppo pubblicizzata, rivoluzionaria o noiosa. Ma è difficile ignorare che è piuttosto interessante come concetto.</p><p>Ecco un video davvero fantastico di Anders Brownworth che spiega il tutto con un modello blockchain. Consiglio vivamente di guardarlo.</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.25%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/_160oMzblY8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Contenuti incorporati" loading="lazy" name="fitvid0" 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: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 760px; height: 427.5px;"></iframe>
          </div>
        </div>
      </figure><p>E come esercizio di apprendimento, puoi costruire la tua blockchain direttamente nel tuo browser o nella tua riga di comando. Ecco un breve <a href="https://www.freecodecamp.org/news/how-does-blockchain-really-work-i-built-an-app-to-show-you-6b70cd4caf7d/">tutorial su come costruire la tua blockchain</a>.</p><p>Se hai commenti su questo articolo o pensi che avrei potuto spiegare meglio alcune parti di questo, twittami su <a href="https://twitter.com/zubinpratap">@ZubinPratap</a></p><p>Se vuoi saperne di più sul mio viaggio nel codice, dai un'occhiata <a href="http://podcast.freecodecamp.org/53-zubin-pratap-from-lawyer-to-developer">all'episodio 53</a> del <a href="http://podcast.freecodecamp.org/">podcast freeCodeCamp</a> , dove Quincy (fondatore di freeCodeCamp) e io condividiamo le nostre esperienze come cambi di carriera che potrebbero aiutarti nel tuo viaggio. Puoi anche accedere al podcast su <a href="https://itunes.apple.com/au/podcast/ep-53-zubin-pratap-from-lawyer-to-developer/id1313660749?i=1000431046274&amp;mt=2">iTunes</a> , <a href="https://www.stitcher.com/podcast/freecodecamp-podcast/e/59201373?autoplay=true">Stitcher</a> e <a href="https://open.spotify.com/episode/4lG0RGpzriG5vXRMgza05C">Spotify</a>.</p><p>Terrò anche alcuni AMA e webinar nei prossimi mesi. Se questo ti interessa, per favore fatemelo sapere andando <a href="http://www.matchfitmastery.com/">qui</a> . E, naturalmente, puoi anche twittarmi su <a href="https://twitter.com/zubinpratap">@ZubinPratap</a> .</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Spiegazione dell'istruzione If...Else in C ]]>
                </title>
                <description>
                    <![CDATA[ Il flusso di codice condizionale è la capacità di modificare il modo in cui un pezzo di codice si comporta in base a determinate condizioni. In tali situazioni puoi usare le istruzioni if. L'istruzione if è anche nota come dichiarazione decisionale, poiché prende una decisione sulla base di una data ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/spiegazione-dellistruzione-if-else-in-c/</link>
                <guid isPermaLink="false">621e6350db2217050c2ed144</guid>
                
                    <category>
                        <![CDATA[ Programmazione C ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Fri, 04 Mar 2022 09:08:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/5f9c9da9740569d1a4ca38ef.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/if-statements-in-c/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">If...Else Statement in C Explained</a>
      </p><p>Il flusso di codice condizionale è la capacità di modificare il modo in cui un pezzo di codice si comporta in base a determinate condizioni. In tali situazioni puoi usare le istruzioni <code>if</code>.</p><p>L'istruzione <code>if</code> è anche nota come dichiarazione decisionale, poiché prende una decisione sulla base di una data condizione o espressione. Il blocco di codice all'interno della dichiarazione <code>if</code> viene eseguito se la condizione restituisce <em>true</em>. Invece, il codice all'interno delle parentesi graffe viene ignorato se la condizione restituisce <em>false</em> e il codice dopo l'istruzione <code>if</code> viene eseguito.</p><h3 id="sintassi-di-un-istruzione-if"><strong>Sintassi di un'istruzione <code>if</code></strong></h3><pre><code class="language-text">if (condizioneTest) {
   // istruzioni
}</code></pre><h3 id="un-semplice-esempio"><strong>Un semplice esempio</strong></h3><p>Diamo un'occhiata a un esempio di quanto appena detto:</p><pre><code class="language-c">#include &lt;stdio.h&gt;
#include &lt;stdbool.h&gt;

int main(void) {
    if(true) {
        printf("La condizone è Vera!\n");
    }

    return 0;
}</code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code class="language-text">La condizone è Vera!</code></pre><p>Se il codice tra parentesi dell'istruzione <code>if</code> è vero, tutto ciò che è racchiuso tra le parentesi graffe viene eseguito. In questo caso, <code>true</code> restituisce vero, quindi il codice esegue la funzione <code>printf</code>.</p><h3 id="istruzioni-if-else"><strong>Istruzioni <code>if..else</code> </strong></h3><p>In un'istruzione <code>if...else</code>, se il codice tra parentesi tonde dell'istruzione <code>if</code> è vero, viene eseguito il codice tra parentesi graffe. Ma se la condizione tra parentesi è falsa, viene eseguito tutto il codice all'interno delle parentesi graffe dell'istruzione &nbsp;<code>else</code>.</p><p>Ovviamente, l'esempio sopra non è molto utile in questo caso perché <code>true</code> restituisce sempre vero. Eccone un altro un po' più pratico:</p><pre><code class="language-c">#include &lt;stdio.h&gt;

int main(void) {
    int n = 2;

    if(n == 3) { // compara n con 3
        printf("La condizione è Vera!\n");
    } 
    else { // se la prima condizione non è vera, vai a questo blocco di codice
        printf("La condizione è Falsa!\n");
    }

    return 0;
}</code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code class="language-text">La condizione è Falsa!</code></pre><p>Qui, ci sono alcune differenze importanti. Primo, <code>stdbool.h</code> non è stato incluso. Va bene perché <code>true</code> e <code>false</code> non vengono utilizzati come nel primo esempio. In C, come in altri linguaggi di programmazione, puoi utilizzare istruzioni che restituiscono vero o falso anziché utilizzare direttamente i valori booleani <code>true</code> o <code>false</code>.</p><p>Notare anche la condizione tra parentesi dell'istruzione <code>if</code>: <code>n == 3</code>. Questa condizione confronta <code>n</code> e il numero 3. <code>==</code> è l'operatore di confronto ed è una delle numerose operazioni di confronto in C.</p><h3 id="if-else-nidificato"><strong><code>if...else</code> nidificato</strong></h3><p>Le istruzioni <code>if...else</code> consentono di scegliere tra due possibilità. Ma a volte devi scegliere tra tre o più possibilità.</p><p>Ad esempio, la funzione segno in matematica restituisce -1 se l'argomento è minore di zero, +1 se l'argomento è maggiore di zero e restituisce zero se l'argomento è zero.</p><p>Il codice seguente implementa questa funzione:</p><pre><code class="language-c">if (x &lt; 0)
   segno = -1;
else
   if (x == 0)
      segno = 0;
   else
      segno = 1;</code></pre><p>Come puoi vedere, una seconda istruzione <code>if...else</code> è annidata all'interno dell'istruzione <code>else</code> della prima <code>if..else</code>.</p><p>Se <code>x</code> è minore di 0, allora <code>segno</code> è impostato su -1. Invece, se <code>x</code> non è inferiore a 0, viene eseguita la seconda istruzione <code>if...else</code>. Lì, se <code>x</code> è uguale a 0, <code>segno</code> è anche impostato a 0. Ma se <code>x</code> è maggiore di 0, <code>segno</code> è invece impostato a 1.</p><p>Piuttosto che un'istruzione <code>if...else</code> nidificata, i principianti usano spesso una catena di istruzioni &nbsp;<code>if</code>:</p><pre><code class="language-c">if (x &lt; 0) {
   segno = -1;
}
   
if (x == 0) {
   segno = 0;
}
   
if (x &gt; 0) {
   segno = 1;
}</code></pre><p>Sebbene funzioni, non è consigliabile poiché non è chiaro che solo una delle istruzioni di assegnazione ( <code>segno = ...</code>) debba essere eseguita a seconda del valore di <code>x</code>. È anche inefficiente: ogni volta che il codice viene eseguito, tutte e tre le condizioni vengono verificate, anche se una o due non devono esserlo.</p><h3 id="istruzioni-else-if"><strong>Istruzioni else...if</strong></h3><p>Le istruzioni <code>if...else</code> sono un'alternativa a una catena di istruzioni <code>if</code>. Considera quanto segue:</p><pre><code class="language-c">#include &lt;stdio.h&gt;

int main(void) {
    int n = 5;

    if(n == 5) {
        printf("n è uguale a 5!\n");
    } 
    else if (n &gt; 5) {
        printf("n è maggiore di 5!\n");
    }

    return 0;
}</code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code class="language-text">n è uguale a 5!</code></pre><p>Se la condizione per l'istruzione <code>if</code> risulta falsa, la condizione per l'istruzione <code>else...if</code> &nbsp;viene verificata. Se tale condizione restituisce vero, viene eseguito il codice all'interno delle parentesi graffe dell'istruzione <code>else...if</code>.</p><h3 id="operatori-di-confronto"><strong>Operatori di confronto</strong></h3><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead 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: 16px; vertical-align: baseline;"><tr 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: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">NOME DELL'OPERATORE</font></font></th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">UTILIZZO</font></font></th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: left; text-transform: uppercase; background-color: var(--gray10);"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">RISULTATO</font></font></th></tr></thead><tbody 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: 16px; vertical-align: baseline;"><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Uguale a</font></font></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a == b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">True se<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">è uguale a<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">, false altrimenti</font></font></td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Non uguale a</font></font></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a != b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">True se<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">diverso da<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">, false altrimenti</font></font></td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Più grande di</font></font></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &gt; b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">True se<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">è maggiore di<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">, false altrimenti</font></font></td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Maggiore o uguale a</font></font></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &gt;= b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">True se<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">è maggiore o uguale a<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">, false altrimenti</font></font></td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Meno di</font></font></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &lt; b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Vero se<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">è minore di<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">, falso in caso contrario</font></font></td></tr><tr 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: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Minore o uguale a</font></font></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a &lt;= b</code></td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">True se<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">a</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">è minore o uguale a<span>&nbsp;</span></font></font><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">b</code><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">, false altrimenti</font></font></td></tr></tbody></table><!--kg-card-end: html--><h2 id="operatori-logici"><strong><strong><strong>Operatori logici</strong></strong></strong></h2><p>Potremmo voler eseguire un po' di codice se qualcosa non è vero, o se due cose sono vere. Per questo abbiamo gli operatori logici:</p><!--kg-card-begin: html--><table style="
    box-sizing: inherit;
    margin: 0.5em 0px 2.5em;
    padding: 0px;
    border: 0px;
    font-style: normal;
    font-variant-ligatures: normal;
    font-variant-caps: normal;
    font-variant-numeric: inherit;
    font-variant-east-asian: inherit;
    font-weight: 400;
    font-stretch: inherit;
    line-height: inherit;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,
      Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    font-size: 1.6rem;
    vertical-align: top;
    border-spacing: 0px;
    border-collapse: collapse;
    display: inline-block;
    overflow-x: auto;
    max-width: 100%;
    width: auto;
    white-space: nowrap;
    background: radial-gradient(
          at left center,
          rgba(0, 0, 0, 0.2) 0px,
          rgba(0, 0, 0, 0) 75%
        )
        0px center / 10px 100% no-repeat scroll,
      radial-gradient(
          at right center,
          rgba(0, 0, 0, 0.2) 0px,
          rgba(0, 0, 0, 0) 75%
        )
        100% center / 10px 100% scroll rgb(255, 255, 255);
    color: rgb(10, 10, 35);
    letter-spacing: normal;
    orphans: 2;
    text-align: start;
    text-transform: none;
    widows: 2;
    word-spacing: 0px;
    -webkit-text-stroke-width: 0px;
    text-decoration-thickness: initial;
    text-decoration-style: initial;
    text-decoration-color: initial;
  ">
  <thead 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: 16px;
      vertical-align: baseline;
    ">
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <th style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: 700;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 1.2rem;
          vertical-align: baseline;
          color: var(--gray85);
          letter-spacing: 0.2px;
          text-align: left;
          text-transform: uppercase;
          background-color: var(--gray10);
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">NOME DELL'OPERATORE</font></font>
      </th>
      <th style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: 700;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 1.2rem;
          vertical-align: baseline;
          color: var(--gray85);
          letter-spacing: 0.2px;
          text-align: left;
          text-transform: uppercase;
          background-color: var(--gray10);
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">UTILIZZO</font></font>
      </th>
      <th style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: 700;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 1.2rem;
          vertical-align: baseline;
          color: var(--gray85);
          letter-spacing: 0.2px;
          text-align: left;
          text-transform: uppercase;
          background-color: var(--gray10);
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">RISULTATO</font></font>
      </th>
    </tr>
  </thead>
  <tbody 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: 16px;
      vertical-align: baseline;
    ">
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">Not (<span>&nbsp;</span></font></font><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">!</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">)</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
        ">
        <code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">!(a == 3)</code>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">Vero se<span>&nbsp;</span></font><strong style="
              box-sizing: inherit;
              margin: 0px;
              padding: 0px;
              border: 0px;
              font-style: inherit;
              font-variant: inherit;
              font-weight: 700;
              font-stretch: inherit;
              line-height: inherit;
              font-family: inherit;
              font-size: 16px;
              vertical-align: baseline;
              color: var(--gray85);
            "><font style="box-sizing: inherit; vertical-align: inherit"></font></strong></font><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">a</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit"><span>&nbsp;</span>è<span>&nbsp;</span></font><font style="box-sizing: inherit; vertical-align: inherit">non uguale a 3</font></font><strong style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 700;
            font-stretch: inherit;
            line-height: inherit;
            font-family: inherit;
            font-size: 16px;
            vertical-align: baseline;
            color: var(--gray85);
          "><font style="box-sizing: inherit; vertical-align: inherit"></font></strong><font style="box-sizing: inherit; vertical-align: inherit"></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">And (<span>&nbsp;</span></font></font><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">&amp;&amp;</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">)</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
        ">
        <code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">a == 3 &amp;&amp; b == 6</code>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">Vero se<span>&nbsp;</span></font></font><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">a</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit"> è uguale a 3<span>&nbsp;</span></font></font><strong style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 700;
            font-stretch: inherit;
            line-height: inherit;
            font-family: inherit;
            font-size: 16px;
            vertical-align: baseline;
            color: var(--gray85);
          "><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">ed</font></font></strong><span>&nbsp;</span><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">b</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit"><span>&nbsp;</span>è uguale a 6</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">Or (<span>&nbsp;</span></font></font><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">||</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">)</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
        ">
        <code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">a == 2 || b == 4</code>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">Vero se<span>&nbsp;</span></font></font><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">a</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit"> è uguale a 2<span>&nbsp;</span></font></font><strong style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 700;
            font-stretch: inherit;
            line-height: inherit;
            font-family: inherit;
            font-size: 16px;
            vertical-align: baseline;
            color: var(--gray85);
          "><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">o</font></font></strong><span>&nbsp;</span><code style="
            box-sizing: inherit;
            margin: 0px;
            padding: 0px 5px 2px;
            border: 0px;
            font-style: inherit;
            font-variant: inherit;
            font-weight: 400 !important;
            font-stretch: inherit;
            line-height: 1em;
            font-family: 'Roboto Mono', monospace;
            font-size: 0.8em;
            vertical-align: baseline;
            background: var(--gray15);
          ">b</code><font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit"><span>&nbsp;</span>è uguale a 4</font></font>
      </td>
    </tr>
  </tbody>
</table>

<!--kg-card-end: html--><p>Per esempio:</p><pre><code class="language-c">#include &lt;stdio.h&gt;

int main(void) {
    int n = 5;
    int m = 10;

    if(n &gt; m || n == 15) {
        printf("n è maggiore di m, oppure n è uguale a 15\n");
    } 
    else if( n == 5 &amp;&amp; m == 10 ) {
        printf("n è uguale a 5 e m è uguale a 10!\n");
    } 
    else if ( !(n == 6)) {
        printf("Non è vero che n è uguale a 6!\n");
    }
    else if (n &gt; 5) {
        printf("n è maggiore di 5!\n");
    }

    return 0;
}</code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code class="language-text">n è uguale a 5 e m è uguale a 10!</code></pre><p><strong>Una nota importante sui confronti in C</strong></p><p>Abbiamo accennato in precedenza che ogni confronto controlla se qualcosa è vero o falso, ma questo è vero solo in parte. C è molto leggero e vicino all'hardware su cui è in esecuzione. Con l'hardware è facile verificare se qualcosa è 0 o falso, ma verificare qualsiasi altra cosa è molto più difficile.</p><p>Invece è molto più accurato dire che i confronti stanno davvero controllando se qualcosa è 0 / false o se è un altro valore.</p><p>Ad esempio, questa istruzione<em> if</em> &nbsp;è vera e valida:</p><pre><code class="language-c">if(12452) {
    printf("Questa è vera!\n")
}</code></pre><p>In base alla progettazione, 0 è falso e, per convenzione, 1 è vero. Infatti, dando uno sguardo alla libreria <code>stdbool.h</code>:</p><pre><code class="language-c">#define false   0
#define true    1</code></pre><p>Anche se c'è molto altro, questo è il fulcro di come funzionano i booleani e di come funziona la libreria. Queste due righe indicano al compilatore di sostituire la parola <code>false</code> con 0 e <code>true</code> con 1.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Definitori di formato in C ]]>
                </title>
                <description>
                    <![CDATA[ Gli identificatori di formato definiscono il tipo di dati da stampare sull'output standard. È necessario utilizzare gli identificatori di formato sia che si stampi l'output formattato con printf() e sia che si accetti l'input con  scanf(). Alcuni degli identificatori % che puoi utilizzare in ANSI C sono i seguenti: ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/definitori-di-formato-in-c/</link>
                <guid isPermaLink="false">621cddacb6d677050431905c</guid>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Fri, 04 Mar 2022 09:08:24 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/02/5f9c9d9c740569d1a4ca38a4.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/format-specifiers-in-c/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Format Specifiers in C</a>
      </p><p>Gli identificatori di formato definiscono il tipo di dati da stampare sull'output standard. È necessario utilizzare gli identificatori di formato sia che si stampi l'output formattato con <code>printf()</code> e sia che si accetti l'input con <code>scanf()</code>.</p><p>Alcuni degli identificatori % che puoi utilizzare in ANSI C sono i seguenti:</p><!--kg-card-begin: html--><table style="
    box-sizing: inherit;
    margin: 0.5em 0px 2.5em;
    padding: 0px;
    border: 0px;
    font-style: inherit;
    font-variant: inherit;
    font-weight: inherit;
    font-stretch: inherit;
    line-height: inherit;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,
      Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    font-size: 1.6rem;
    vertical-align: top;
    border-spacing: 0px;
    border-collapse: collapse;
    display: inline-block;
    overflow-x: auto;
    max-width: 100%;
    width: auto;
    white-space: nowrap;
    background: radial-gradient(
          at left center,
          rgba(0, 0, 0, 0.2) 0px,
          rgba(0, 0, 0, 0) 75%
        )
        0px center / 10px 100% no-repeat scroll,
      radial-gradient(
          at right center,
          rgba(0, 0, 0, 0.2) 0px,
          rgba(0, 0, 0, 0) 75%
        )
        100% center / 10px 100% scroll;
  ">
  <thead 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: 16px;
      vertical-align: baseline;
    ">
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <th style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: 700;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 1.2rem;
          vertical-align: baseline;
          color: var(--gray85);
          letter-spacing: 0.2px;
          text-align: left;
          text-transform: uppercase;
          background-color: var(--gray10);
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">SPECIFICATORE</font></font>
      </th>
      <th style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: 700;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 1.2rem;
          vertical-align: baseline;
          color: var(--gray85);
          letter-spacing: 0.2px;
          text-align: left;
          text-transform: uppercase;
          background-color: var(--gray10);
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">USATO PER</font></font>
      </th>
    </tr>
  </thead>
  <tbody 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: 16px;
      vertical-align: baseline;
    ">
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%c</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un unico carattere</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%s</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">una stringa</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%hi</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">short (con segno)</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%hu</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">short (senza segno)</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%Lf</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">long double</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%n</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">non stampa nulla</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%d</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un intero decimale (si assume base 10)</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%i</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un numero intero decimale (rileva automaticamente la base)</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%o</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un intero ottale (in base 8).</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%x</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un intero esadecimale (base 16)</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%p</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un indirizzo (o puntatore)</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%f</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un numero in virgola mobile per i float</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%u</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">int decimale senza segno</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%e</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un numero in virgola mobile in notazione scientifica</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%E</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">un numero in virgola mobile in notazione scientifica</font></font>
      </td>
    </tr>
    <tr 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: 16px;
        vertical-align: baseline;
      ">
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to right,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">%%</font></font>
      </td>
      <td style="
          box-sizing: inherit;
          margin: 0px;
          padding: 6px 12px;
          border: var(--gray10) 1px solid;
          font-style: inherit;
          font-variant: inherit;
          font-weight: inherit;
          font-stretch: inherit;
          line-height: inherit;
          font-family: inherit;
          font-size: 16px;
          vertical-align: baseline;
          background-image: linear-gradient(
            to left,
            rgb(255, 255, 255) 50%,
            rgba(255, 255, 255, 0) 100%
          );
          background-position: 100% 0px;
          background-size: 20px 100%;
          background-repeat: no-repeat;
        ">
        <font style="box-sizing: inherit; vertical-align: inherit"><font style="box-sizing: inherit; vertical-align: inherit">il simbolo %</font></font>
      </td>
    </tr>
  </tbody>
</table>
<!--kg-card-end: html--><h2 id="esempi-"><strong><strong>Esempi:</strong></strong></h2><h3 id="identificatore-di-formato-a-carattere-singolo-c-"><strong>I<strong>dentificatore di formato a carattere singolo</strong> <strong><code>%c</code>:</strong></strong></h3><pre><code class="language-c">#include &lt;stdio.h&gt; 

int main() { 
  char first_ch = 'f'; 
  printf("%c\n", first_ch); 
  return 0; 
} </code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code>f</code></pre><h3 id="identificatore-di-formato-stringa-s-"><strong>I<strong>dentificatore di formato stringa</strong> <strong><code>%s</code>:</strong></strong></h3><pre><code class="language-c">#include &lt;stdio.h&gt; 

int main() { 
  char str[] = "freeCodeCamp"; 
  printf("%s\n", str); 
  return 0; 
} </code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code>freeCodeCamp</code></pre><h3 id="immissione-di-caratteri-con-l-identificatore-di-formato-c-"><strong><strong>Immissione di caratteri con l'identificatore di formato</strong> <strong><code>%c</code>:</strong></strong></h3><pre><code class="language-c">#include &lt;stdio.h&gt; 

int main() { 
  char user_ch; 
  scanf("%c", &amp;user_ch); // l'utente inserisce Y
  printf("%c\n", user_ch); 
  return 0; 
} </code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code>Y</code></pre><h3 id="input-stringa-con-l-identificatore-di-formato-s-"><strong><strong>Input stringa con l'identificatore di formato</strong> <strong><code>%s</code>:</strong></strong></h3><pre><code class="language-c">#include &lt;stdio.h&gt; 

int main() { 
  char user_str[20]; 
  scanf("%s", user_str); // l'utente inserisce fCC
  printf("%s\n", user_str); 
  return 0; 
} </code></pre><p><strong>Output:</strong></p><pre><code>fCC</code></pre><h3 id="identificatori-di-formato-intero-decimale-d-e-i-"><strong>I<strong>dentificatori di formato intero decimale</strong> <strong><code>%d</code></strong> <strong>e <code>%i</code>:</strong></strong></h3><pre><code class="language-c">#include &lt;stdio.h&gt; 

int main() { 
  int found = 2015, curr = 2020; 
  printf("%d\n", found); 
  printf("%i\n", curr); 
  return 0; 
} </code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code>2015
2020</code></pre><h3 id="identificatori-di-formato-dei-numeri-in-virgola-mobile-f-e-e-"><strong>I<strong>dentificatori di formato dei numeri in virgola mobile</strong> <strong><code>%f</code></strong> <strong>e <code>%e</code>:</strong></strong></h3><pre><code class="language-c">#include &lt;stdio.h&gt;

int main() { 
  float num = 19.99; 
  printf("%f\n", num); 
  printf("%e\n", num); 
  return 0; 
}</code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code>19.990000
1.999000e+01</code></pre><h3 id="identificatore-di-formato-intero-ottale-o-"><strong>I<strong>dentificatore di formato intero ottale</strong> <strong><code>%o</code>:</strong></strong></h3><pre><code>#include &lt;stdio.h&gt; 

int main() { 
  int num = 31; 
  printf("%o\n", num); 
  return 0; 
}</code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code>37</code></pre><h3 id="identificatore-di-formato-intero-esadecimale-x-"><strong>I<strong>dentificatore di formato intero esadecimale</strong> <strong><code>%x</code></strong> <strong>:</strong></strong></h3><pre><code class="language-c">#include &lt;stdio.h&gt; 

int main() { 
  int c = 28; 
  printf("%x\n", c); 
  return 0; 
} </code></pre><p><strong>Output<strong>:</strong></strong></p><pre><code>1c</code></pre> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
