<?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[ Ilenia Magoni - 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[ Ilenia Magoni - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 05 Jun 2026 20:05:46 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/author/ilenia/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Come scrivere lettere accentate e segni diacritici su Mac ]]>
                </title>
                <description>
                    <![CDATA[ Se stai scrivendo in una lingua diversa dal solito, probabilmente potresti aver bisogno di conoscere il modo per digitare delle lettere con accenti o segni diacritici non presenti sulla tastiera, come in über, crêpe o español. Fortunatamente ci sono un paio di modi semplici per farlo su un Mac. In ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-scrivere-lettere-accentate-e-segni-diacritici-su-mac/</link>
                <guid isPermaLink="false">62ec1e6c5cda1d06d40dc917</guid>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Fri, 23 Sep 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/08/acc.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-type-letters-with-accents-on-mac/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Type Letters with Accents on Mac</a>
      </p><p>Se stai scrivendo in una lingua diversa dal solito, probabilmente potresti aver bisogno di conoscere il modo per digitare delle lettere con accenti o segni diacritici non presenti sulla tastiera, come in über, crêpe o español.</p><p>Fortunatamente ci sono un paio di modi semplici per farlo su un Mac. In quest'articolo, esamineremo i metodi principali in modo che tu possa includere facilmente gli accenti in quello che scrivi.</p><h2 id="il-metodo-tieni-premuto-su-mac">Il metodo "tieni premuto" su Mac</h2><p>Se non sei di fretta e vuoi vedere tutte le opzioni comuni degli accenti in un colpo d'occhio, c'è un modo molto semplice per farlo.</p><p>Puoi semplicemente tenere premuto il tasto di cui vuoi vedere gli accenti e ti verranno mostrate svariate opzioni al di sopra della lettera, in questo modo:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/11/Press-and-hold-accent-method.png" class="kg-image" alt="Press-and-hold-accent-method" width="600" height="400" loading="lazy"><figcaption>Per esempio, tieni premuto il tasto "e"...</figcaption></figure><p>Quando vedi il tipo di accento di cui hai bisogno, digita il numero corrispondente e l'accento verrà aggiunto alla lettera. Puoi anche usare le frecce sinistra/destra (e invio) per selezionare quello che desideri.</p><p>Quindi, per esempio, se vuoi aggiungere la seconda delle opzioni qui sopra, dovrai tenere premuto il tasto "e" e poi digitare "2" (o premere la freccia destra una volta e poi invio).</p><p>Questo metodo funziona bene se non ti interessa il tempo che ci vuole al menu per comparire. Tuttavia, non sono sempre inclusi tutti gli accenti di ogni lingua e rallenta il tuo ritmo, soprattutto se stai scrivendo un intero articolo pieno di accenti. È un bel po' di tempo in più.</p><p>Fortunatamente c'è un altro metodo comune che sfrutta delle scorciatoie da tastiera e che ti offre ugualmente tutte le opzioni.</p><h2 id="il-metodo-del-tasto-option-su-mac">Il metodo del tasto Option su Mac</h2><p>Il tasto Option ti aiuta ad aggiungere a un testo tutti i tipi di accenti e segni diacritici. Tieni premuto il tasto Option, poi premi il tasto "e", rilasciali e premi il tasto della lettera a cui vuoi aggiungere l'accento.</p><p>Ad esempio, se vuoi aggiungere un accento acuto (´) alle lettere a, e, i, o, u, devi premere Option + e, e poi la lettera a cui vuoi aggiungere l'accento. Ad esempio, Option + e + a ti dà "á".</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/11/quincy-accent-tweet.png" class="kg-image" alt="quincy-accent-tweet" width="600" height="400" loading="lazy"><figcaption>Info sugli accenti dal fondatore di freeCodeCamp.</figcaption></figure><p>E se hai bisogno di un tipo diverso di accento, come un accento grave o una dieresi? Non preoccuparti – ci sono combinazioni del tasto Option per questo e altro.</p><h4 id="lettere-minuscole">Lettere minuscole</h4><ul><li>Option + i + lettera = â, ê, î, ô, û</li><li>Option + n + lettera = ñ, ã, õ</li><li>Option + u + lettera = ä, ë, ï, ö, ü, ÿ</li><li>Option + ` + lettera = à, è, ì, ò, ù</li><li>Option + a = å</li><li>Option + ' = æ</li><li>Option + q = œ</li><li>Option + o = ø</li><li>Option + c = ç</li></ul><h4 id="lettere-maiuscole">Lettere maiuscole</h4><ul><li>Option + Shift + W = À</li><li>Option + Shift + A = Å</li><li>Option + Shift + E = È</li><li>Option + Shift + V = É</li><li>Option + Shift + R = Ì</li><li>Option + Shift + T = Ò</li><li>Option + Shift + U = Ù</li><li>Option + Shift + ' = Æ</li><li>Option + Shift + Q = Œ</li><li>Option + Shift + O = Ø</li><li>Option + Shift + C = Ç</li></ul><h4 id="simboli">Simboli</h4><ul><li>Option + 1 = ¡</li><li>Option + Shift + ? = ¿</li><li>Option + 5 = ∞</li></ul><p>Una volta che hai memorizzato queste combinazioni puoi incorporare ognuna di esse nel tuo flusso di scrittura tipico. E puoi sempre mettere un segnalibro a questo articolo se dovessi dimenticarle 🙂.</p><h2 id="bonus-altre-combinazioni-con-il-tasto-option-su-mac">Bonus: altre combinazioni con il tasto Option su Mac</h2><p>E se hai bisogno di usare dei simboli matematici? O il simbolo dell'Euro? Avrai bisogno di qualcosa in più delle opzioni per gli accenti.</p><p>Lo sapevi che la tua tastiera base nasconde tutti questi caratteri in (quasi) piena vista?</p><p>Tenendo premuto il tasto Option e premendo una qualsiasi lettera/numero/segno di punteggiatura, puoi ottenere dei caratteri completamente diversi da ciò che vedi sulla tua tastiera.</p><p>Quindi come fai a sapere quale combinazione di tasti premere? Non preoccuparti – il tuo Mac conosce la risposta. Occorrono solo pochi passaggi per ottenere questa informazione.</p><h3 id="step-1-vai-alle-preferenze-di-sistema"><strong>Step 1: Vai alle Preferenze di Sistema</strong></h3><p>Trova l'icona Apple nell'angolo in alto a sinistra e cliccaci su. Poi seleziona "Preferenze di Sistema" dal menu a tendina.</p><p>Seleziona l'icona della tastiera e vedrai questo riquadro:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/11/keyboard-customization.png" class="kg-image" alt="keyboard-customization" width="600" height="400" loading="lazy"><figcaption>Come personalizzare la tua tastiera.</figcaption></figure><p>Assicurati che l'opzione "Mostra i visori tastiera e emoji nella barra dei menu" sia selezionata.</p><h3 id="step-2-clicca-sull-icona-della-tastiera-nella-barra-del-menu"><strong>Step 2: Clicca sull'icona della tastiera nella barra del menu</strong></h3><p>Vedrai una piccola icona di una tastiera nella barra del menu in alto, proprio vicino ai simboli del bluetooth e del wifi. Cliccaci su e seleziona "Mostra visore tastiera".</p><p>Si aprirà un'immagine della tastiera nel modo in cui è configurata sul tuo Mac:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/09/image-2.png" class="kg-image" alt="image-2" width="575" height="243" loading="lazy"><figcaption>La configurazione di base della tastiera</figcaption></figure><h3 id="step-3-premi-il-tasto-option"><strong>Step 3: Premi il tasto Option</strong></h3><p>Adesso, se tieni premuto il tasto Option, potrai vedere cos'altro sono in grado di fare i tasti, così:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/09/image-1.png" class="kg-image" alt="image-1" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/09/image-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/2022/09/image-1.png 931w" sizes="(min-width: 720px) 720px" width="931" height="505" loading="lazy"></figure><p>Puoi vedere i segni diacritici più comuni evidenziati in arancione nell'immagine qui sopra. Questi sono i tasti che quando combinati col tasto Option ti permettono di scrivere i caratteri che abbiamo visto nella sezione precedente.</p><p>Vedrai anche che ci sono altri simboli utili, come simboli di valute, simboli matematici e via dicendo. Quindi se hai bisogno di rinfrescarti velocemente la memoria sul tasto da premere, ad esempio, per la lettera greca µ (mu), puoi vedere questa immagine.</p><h2 id="come-aggiungere-accenti-e-segni-diacritici-con-la-tastiera-internazionale-su-windows">Come aggiungere accenti e segni diacritici con la Tastiera Internazionale su Windows</h2><p>Se vuoi usare delle scorciatoie per aggiungere accenti e caratteri speciali con semplici combinazioni di tasti (senza usare i codici Alt), puoi abilitare la tastiera internazionale.</p><p>Prima di tutto, premi il tasto Windows, digita "Lingua" e clicca su "Impostazioni di lingua" per aprire il menu:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/09/image-7.png" class="kg-image" alt="image-7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/09/image-7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2022/09/image-7.png 911w" sizes="(min-width: 720px) 720px" width="911" height="671" loading="lazy"><figcaption>Il menu della lingua di Windows 10</figcaption></figure><p>Nel menu "Lingue preferite" clicca su "Italiano" e poi "Opzioni" per aprire il menu "Opzioni di lingua":</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/09/image-8.png" class="kg-image" alt="image-8" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/09/image-8.png 600w, https://www.freecodecamp.org/italian/news/content/images/2022/09/image-8.png 622w" width="622" height="661" loading="lazy"><figcaption>Il menu Opzioni di lingua su Windows 10</figcaption></figure><p>Sotto "Tastiere", clicca sul pulsante "Aggiungi tastiera" e scegli "Americano internazionale" per aggiungere la tastiera internazionale al tuo sistema.</p><p>Per abilitare la tastiera internazionale, sposta il mouse sulla barra delle applicazioni, clicca su "ITA IT" e poi clicca su "ITA INTL":</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/09/image-9.png" class="kg-image" alt="image-9" width="300" height="285" loading="lazy"><figcaption>Usa il menu testiera nella taskbar per abilitare la tastiera internazionale.</figcaption></figure><p>Alternativamente, tieni premuto il tasto Windows e poi premi la barra spaziatrice per cambiare il layout della tastiera con le altre tastiere installate.</p><p>La differenza principale tra la tastiera italiana e quella internazionale è che non sono presenti le lettere accentate e i segni di punteggiatura sono in tasti diversi. Però puoi avere accesso in maniera semplice a tante altre lettere accentate.</p><p>Qui sotto puoi vedere la tastiera qwerty italiana classica, e la tastiera qwerty internazionale.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/08/image-10.png" class="kg-image" alt="image-10" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/08/image-10.png 600w, https://www.freecodecamp.org/italian/news/content/images/2022/08/image-10.png 910w" sizes="(min-width: 720px) 720px" width="910" height="306" loading="lazy"><figcaption>Tastiera qwerty italiana</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/08/image-9.png" class="kg-image" alt="image-9" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/08/image-9.png 600w, https://www.freecodecamp.org/italian/news/content/images/2022/08/image-9.png 911w" sizes="(min-width: 720px) 720px" width="911" height="305" loading="lazy"><figcaption>Tastiera qwerty internazionale</figcaption></figure><p>Nella tastiera internazionale alcuni tasti hanno una funzione di "blocco dei caratteri accentati", questi sono detti tasti morti.</p><p>Per esempio, per digitare un singolo apostrofo (') con la tastiera internazionale, digita l'apostrofo (', il tasto à nella tastiera italiana) e poi la barra spaziatrice. Se invece digiti una lettera dopo aver premuto il tasto apostrofo, otterrai quella lettera accentata (á, é, í, ó, ú, ý).</p><p>Detto ciò, ecco come puoi digitare alcuni accenti o segni diacritici comuni con la tastiera internazionale di Windows 10 (accanto a ogni simbolo puoi trovare scritto come ottenerlo guardando i simboli scritti sulla tastiera):</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Carattere di blocco</th>
<th>Tasto corrispondente della tastiera qwerty italiana</th>
<th>lettere con cui funziona</th>
<th>risultato</th>
</tr>
</thead>
<tbody>
<tr>
<td>'</td>
<td>à</td>
<td>aeiouyc</td>
<td>áéíóúýç</td>
</tr>
<tr>
<td>'</td>
<td>à</td>
<td>AEIOUYC</td>
<td>ÁÉÍÓÚÝÇ</td>
</tr>
<tr>
<td>`</td>
<td>\</td>
<td>aeiou</td>
<td>àèìòù</td>
</tr>
<tr>
<td>`</td>
<td>\</td>
<td>AEIOU</td>
<td>ÀÈÌÒÙ</td>
</tr>
<tr>
<td>~</td>
<td>Shift + \</td>
<td>aon</td>
<td>ãõñ</td>
</tr>
<tr>
<td>~</td>
<td>Shift + \</td>
<td>AON</td>
<td>ÃÕÑ</td>
</tr>
<tr>
<td>"</td>
<td>Shift + "</td>
<td>aeiouy</td>
<td>äëïöüÿ</td>
</tr>
<tr>
<td>"</td>
<td>Shift + "</td>
<td>AEIOU</td>
<td>ÄËÏÖÜ</td>
</tr>
<tr>
<td>^</td>
<td>Shift + 6</td>
<td>aeiou</td>
<td>âêîôû</td>
</tr>
<tr>
<td>^</td>
<td>Shift + 6</td>
<td>AEIOU</td>
<td>ÂÊÎÔÛ</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Inoltre, premendo AltGr hai accesso a svariati altri simboli che non sono normalmente accessibili, come puoi vedere nella tastiera qui sotto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/08/image-11.png" class="kg-image" alt="image-11" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/08/image-11.png 600w, https://www.freecodecamp.org/italian/news/content/images/2022/08/image-11.png 910w" sizes="(min-width: 720px) 720px" width="910" height="305" loading="lazy"><figcaption>Tastiera qwerty internazionale con AltGr premuto</figcaption></figure><p>Ad esempio, puoi usare le seguenti combinazioni di tasti:</p><p>Nota: le combinazioni sono scritte tenendo conto dei simboli della tastiera italiana.</p><ul><li>AltGr + w = å</li><li>AltGr + Shift + W = Å</li><li>AltGr + z = æ</li><li>AltGr + Shift + Z = Æ</li><li>AltGr + , = ç</li><li>AltGr + Shift + , = Ç</li><li>AltGr + l = ø</li><li>AltGr + Shift + L = Ø</li><li>AltGr + - = ¿</li><li>AltGr + 1 = ¡</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/08/image-12.png" class="kg-image" alt="image-12" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/08/image-12.png 600w, https://www.freecodecamp.org/italian/news/content/images/2022/08/image-12.png 909w" sizes="(min-width: 720px) 720px" width="909" height="303" loading="lazy"><figcaption>Tastiera qwerty internazionale con AltGr + Maiusc premuti</figcaption></figure><p>Potresti avere notato che non è possibile digitare alcune cose come œ, Œ, o ∞ con la tastiera internazionale.</p><p>Per questi simboli, vediamo un altro metodo per digitare accenti, segni diacritici, caratteri speciali e simboli su Windows 10.</p><h2 id="come-aggiungere-accenti-e-segni-diacritici-su-windows-con-il-pannello-emoji">Come aggiungere accenti e segni diacritici su Windows con il pannello emoji</h2><p>Il pannello emoji rende facile scorrere tra tutte le emoji disponibili e aggiungerne una a un messaggio. Ma puoi anche usare il pannello emoji per aggiungere velocemente caratteri speciali.</p><p>Usa la scorciatoia da tastiera <code>Win</code> + <code>.</code> per aprire il pannello: </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-154.png" class="kg-image" alt="The Windows 10 emoji panel." width="600" height="400" loading="lazy"><figcaption>Il pannello emoji di Windows 10.</figcaption></figure><p>Per aggiungere accenti o caratteri speciali, usa il pulsante simboli in cima:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-156.png" class="kg-image" alt="The Windows 10 emoji panel's Symbol options." width="600" height="400" loading="lazy"><figcaption>Il pulsante Simboli nel pannello Emoji in Windows 10</figcaption></figure><p>Poi scorri nel menu e premi sull'accento o carattere che vuoi:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-157.png" class="kg-image" alt="Selecting the œ character in the Windows 10 emoji picker." width="600" height="400" loading="lazy"><figcaption>Selezione del carattere œ nel pannello emoji di Windows 10.</figcaption></figure><p>Puoi anche premere i diversi simboli del menu in basso per vedere diversi tipi di simboli. Per esempio, &nbsp;∞ si trova nella sezione "Simboli matematici":</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/11/image-158.png" class="kg-image" alt="Selecting the ∞ character in the Windows 10 emoji picker." width="600" height="400" loading="lazy"><figcaption>Selezione del carattere ∞ nel pannello emoji in Windows 10.</figcaption></figure><p>E con questo, dovresti sapere tutto quello di cui hai bisogno per digitare accenti e altri caratteri speciali sia su Mac che su Windows. ¡Adiós!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ npm e npx: qual è la differenza? ]]>
                </title>
                <description>
                    <![CDATA[ Se hai mai usato Node.js [https://nodejs.org/], hai usato di sicuro npm. npm (node package manager - gestore di pacchetti di node) è il gestore di dipendenze/pacchetti che è in dotazione con l'installazione di Node.js. Fornisce agli sviluppatori un modo di installare pacchetti sia globalmente che localmente. Qualche volta potresti voler ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/npm-e-npx-qual-e-la-differenza/</link>
                <guid isPermaLink="false">62e908595cda1d06d40db6a4</guid>
                
                    <category>
                        <![CDATA[ NPM ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Fri, 05 Aug 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/08/npm-vs-npx-whats-the-difference-1024x538.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/npm-vs-npx-whats-the-difference/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">npm vs npx — What’s the Difference?</a>
      </p><p>Se hai mai usato <a href="https://nodejs.org/">Node.js</a>, hai usato di sicuro <em>npm</em>.</p><p><strong>npm</strong> (node package manager - gestore di pacchetti di node) è il gestore di dipendenze/pacchetti che è in dotazione con l'installazione di Node.js. Fornisce agli sviluppatori un modo di installare pacchetti sia globalmente che localmente.</p><p>Qualche volta potresti voler esaminare uno specifico pacchetto e provare dei comandi. Ma non puoi farlo senza installare la dipendenza nella cartella locale <code>node_modules</code>.</p><p>È qui che entra in gioco <strong>npx</strong>.</p><p>In questo articolo daremo un'occhiata alla differenza tra <strong>npm</strong> e <strong>npx</strong> e impareremo come ottenere il meglio da entrambi.</p><p>Per prima cosa, capiamo cosa è effettivamente npm e per cosa possiamo utilizzarlo.</p><h2 id="il-gestore-di-pacchetti-npm">Il gestore di pacchetti npm</h2><p>npm è, innanzitutto, un repository online per la pubblicazione di progetti Node.js open source.</p><p>In secondo luogo, è uno strumento per riga di comando che ti aiuta a installare dei pacchetti e gestire le loro versioni e dipendenze. Ci sono centinaia di migliaia di librerie e applicazioni Node.js su npm e molte altre sono aggiunte ogni giorno.</p><p>npm non esegue nessun pacchetto per conto suo. Se vuoi eseguire un pacchetto usando npm, devi specificarlo nel tuo file <code>package.json</code>.</p><p>Quando gli eseguibili sono installati con i pacchetti npm, npm crea dei link ad essi:</p><ul><li>le installazioni <strong>locali</strong> hanno i link creati nella cartella <code>./node_modules/.bin/</code>.</li><li>le installazioni <strong>globali</strong> hanno i link creati dalla cartella globale <code>bin/</code> (per esempio <code>/usr/local/bin</code> su Linux o <code>%AppData%/npm</code> su Windows)</li></ul><p>Per eseguire un pacchetto usando npm devi scrivere il percorso locale, così:</p><pre><code class="language-bash">$ ./node_modules/.bin/tuo-pacchetto</code></pre><p>oppure puoi eseguire un pacchetto installato localmente aggiungendolo nel tuo file <code>package.json</code> nella sezione <code>scripts</code>, in questo modo:</p><pre><code class="language-json">{
  "name": "la-tua-applicazione",
  "version": "1.0.0",
  "scripts": {
    "il-tuo-pacchetto": "il-tuo-pacchetto"
  }
}</code></pre><p>Puoi quindi eseguire lo script usando <code>npm run</code>:</p><pre><code class="language-bash">npm run il-tuo-pacchetto</code></pre><p>Puoi vedere che eseguire un pacchetto con npm richiede un po' di cerimonie.</p><p>Fortunatamente, è proprio qui che <strong>npx</strong> si mostra utile.</p><h2 id="l-esecutore-di-pacchetti-npx"><strong>L'esecutore di pacchetti npx</strong></h2><p>Fin dalla versione 5.2.0 di npm, npx è installato assieme a npm. Quindi è praticamente uno standard al giorno d'oggi.</p><p><strong>npm</strong> è anche uno strumento per la riga di comando il cui proposito è rendere più semplice installare e gestire le dipendenze ospitate nel registro npm.</p><p>Adesso, è molto semplice eseguire ogni sorta di eseguibile basato su Node.js che dovresti installare normalmente con npm.</p><p>Puoi eseguire il seguente comando per sapere se npx è già installato nella tua versione attuale di npm.</p><pre><code class="language-bash">$ which npx</code></pre><p>Se non lo è puoi installarlo con questo comando:</p><pre><code class="language-bash">$ npm install -g npx</code></pre><p>Adesso che ti sei assicurato che è installato, vediamo alcuni dei casi che rendono <strong>npx</strong> estremamente utile.</p><h3 id="eseguire-con-facilit-un-pacchetto-installato-localmente">Eseguire con facilità un pacchetto installato localmente</h3><p>Se desideri eseguire un pacchetto installato localmente, tutto quello che devi fare è scrivere:</p><pre><code class="language-bash">$ npx il-tuo-pacchetto</code></pre><p>npx controlla se il <code>&lt;comando&gt;</code> / <code>&lt;pacchetto&gt;</code> è presente in <code>$PATH</code>, o nei binari del progetto locale, e se lo è lo esegue.</p><h3 id="eseguire-pacchetti-non-installati-precedentemente">Eseguire pacchetti non installati precedentemente </h3><p>Un altro grande vantaggio è l'abilità di eseguire un pacchetto che non è stato installato precedentemente.</p><p>Testiamolo eseguendo:</p><pre><code class="language-bash">$ npx cowsay wow	</code></pre><figure class="kg-card kg-image-card"><img src="https://i2.wp.com/neutrondev.com/wp-content/uploads/2020/01/npx-cowsay-wow-npm-vs-npx.jpg" class="kg-image" alt="npx-cowsay-wow-npm-vs-npx" width="1059" height="579" loading="lazy"></figure><p>È fantastico perché a volte vuoi usare degli strumenti della riga di comando, ma non vuoi installarli globalmente solo per testarli.</p><p>Questo significa che puoi risparmiare un po' di spazio sul disco e semplicemente eseguirli quando ti serve. Inoltre, le tue variabili globali saranno meno inquinate.</p><h3 id="eseguire-il-codice-direttamente-da-github">Eseguire il codice direttamente da GitHub</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/execute-gist-scripts-with-npx.jpg" class="kg-image" alt="execute-gist-script-with-npx" width="600" height="400" loading="lazy"></figure><p>Puoi usare npx per eseguire qualsiasi gist o repo da GitHub. Concentriamoci sull'esecuzione di un gist su GitHub perché è più facile crearne uno.</p><p>Lo script più semplice consiste in un file JS principale e un <code>package.json</code>. Dopo che hai sistemato i file, tutto quello che devi fare è eseguire npx con il link al gist come mostrato nell'immagine qui sopra.</p><p><a href="https://gist.github.com/Tynael/0861d31ea17796c9a5b4a0162eb3c1e8">Qui</a> puoi trovare il codice che ho usato per questo esempio.</p><p><strong>Assicurati di leggere accuratamente qualsiasi script prima di eseguirlo per evitare problemi seri che possono insorgere per del codice dannoso.</strong></p><h3 id="testare-diverse-versioni-dei-pacchetti">Testare diverse versioni dei pacchetti</h3><p>npx rende molto semplice testare diverse versioni di pacchetti o moduli Node.js. Per testare questa fantasmagorica funzionalità, installeremo localmente il pacchetto <code>create-react-app</code> e testeremo una versione <code>next</code>.</p><p>Questo comando elencherà delle tag dist verso la fine dell'output. Le tag dist forniscono alias per i numeri di versione rendendo il tutto più facile da digitare.</p><pre><code class="language-bash">$ npm v create-react-app</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/create-react-app-dist-tags.jpg" class="kg-image" alt="create-react-app-dist-tags" width="600" height="400" loading="lazy"></figure><p>Usiamo npm per provare la tag dist <code>next</code> di <code>create-react-app</code> che creerà la app dentro una cartella chiamata <code>sandbox</code>.</p><pre><code class="language-bash">$ npx create-react-app@next sandbox</code></pre><p>npx installa temporaneamente la versione <code>next</code> di <code>create-react-app</code> e poi la esegue per creare lo scheletro dell'app e installare le sue dipendenze.</p><p>Una volta installata, possiamo navigare all'app con:</p><pre><code class="language-bash">$ cd sandbox</code></pre><p>ed attivarla con questo comando:</p><pre><code class="language-bash">$ npm start</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/create-react-app-npx-next-version.jpg" class="kg-image" alt="create-react-app-npx-next-version" width="600" height="400" loading="lazy"></figure><p>Aprirà automaticamente l'app React in una finestra nel tuo browser di default.</p><p>Ora abbiamo una app eseguita sulla versione <code>next</code> del pacchetto <code>create-react-app</code>!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/react-app.jpg" class="kg-image" alt="index-page-react-app" width="600" height="400" loading="lazy"><figcaption>Ecco come appare la pagina index della tua app React.</figcaption></figure><h2 id="in-conclusione">In conclusione</h2><p>npx aiuta ad evitare versioni multiple, problemi di dipendenze e aiuta a installare pacchetti non necessari che vogliamo solo provare.</p><p>Fornisce anche un modo chiaro e semplice di eseguire pacchetti, comandi, moduli e perfino repo e gist da GitHub.</p><p>Se non hai mai usato npx prima d'ora, questo è un buon momento per iniziare!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git Pull Force: come sovrascrivere cambiamenti in locale con Git ]]>
                </title>
                <description>
                    <![CDATA[ Quando impari a programmare, prima o poi avrai a che fare con i sistemi di controllo di versione. E anche se ci sono molti strumenti disponibili in questo campo, soltanto uno di essi è lo standard usato da praticamente chiunque nell'industria. È così popolare che ci sono aziende che ne ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/git-pull-force-come-sovrascrivere-cambiamenti-in-locale-con-git/</link>
                <guid isPermaLink="false">62d66b3b5cda1d06d40d8fdf</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Tue, 02 Aug 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/07/5f9c99a5740569d1a4ca20f0.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/git-pull-force-how-to-overwrite-local-changes-with-git/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Git Pull Force – How to Overwrite Local Changes With Git</a>
      </p><p>Quando impari a programmare, prima o poi avrai a che fare con i sistemi di controllo di versione. E anche se ci sono molti strumenti disponibili in questo campo, soltanto uno di essi è lo standard usato da praticamente chiunque nell'industria. È così popolare che ci sono aziende che ne usano il nome nei loro marchi. Parliamo di Git, ovviamente.</p><p>Anche se Git è uno strumento potente, il suo potere è ben nascosto. Ci sono alcuni concetti essenziali che hai bisogno di capire per diventare competente con Git. La buona notizia è che una volta che li impari, ti capiterà raramente di incappare in guai da cui non puoi uscire.</p><h2 id="la-procedura-tipo">La procedura tipo</h2><p>In un tipico procedimento di Git, userai un repository locale, un repository remoto e uno o più branch. I repository immagazzinano le informazioni sul progetto, tra cui la sua storia completa e i suoi branch. Un branch è in pratica una collezione di cambiamenti, dal progetto vuoto allo stato attuale.</p><p>Dopo aver clonato un repository, lavori sulla copia locale e introduci i nuovi cambiamenti. Fino a che non fai il push dei cambiamenti che hai fatto in locale al repository remoto, tutto il tuo lavoro è disponibile solo sulla tua macchina.</p><p>Quando finisci una attività, è ora di sincronizzare il tuo repository remoto, facendo il pull dei cambiamenti in remoto per mantenerti in pari con i progressi del progetto, e facendo il push dei cambiamenti in locale per condividere il tuo lavoro con gli altri.</p><h2 id="cambiamenti-in-locale">Cambiamenti in locale</h2><p>Va tutto bene finché tu e il resto del team state lavorando su file completamente separati. Qualsiasi cosa accada, non vi pesterete i piedi.</p><p>Però, a volte capita che tu e il tuo team introduciate simultaneamente cambiamenti nello stesso posto. Ed è lì che iniziano i guai.</p><p>Hai mai eseguito un <code>git pull</code> solo per vedere il temuto <code>error: Your local changes to the following files would be overwritten by merge:</code>? Prima o poi, a tutti capita questo problema.</p><p>Quello che crea più confusione qui è che non vuoi fare <code>merge</code>, solo <code>pull</code>, giusto? In realtà, <code>pull</code> è un po' più complicato di quello che potresti pensare.</p><h2 id="come-funziona-esattamente-git-pull">Come funziona esattamente Git Pull?</h2><p><code>pull</code> non è una singola operazione. In realtà, viene prima eseguito un <code>fetch</code>, ottenendo i metadati che descrivono i commit, e poi il <code>merge</code> aggiungendo quei commit al repository locale. Queste due operazioni possono essere eseguite manualmente se vuoi:</p><pre><code class="language-bash">git fetch
git merge origin/$BRANCH_ATTUALE</code></pre><p>La parte <code>origin/$BRANCH_ATTUALE</code> significa che:</p><ul><li>Git aggiungerà al branch i cambiamenti dal repository remoto <code>origin</code> (quello da cui hai clonato il repository locale)</li><li>che sono stati apportati al branch <code>$BRANCH_ATTUALE</code></li><li>che non sono già presenti nel branch locale di cui hai fatto il <code>checkout</code></li></ul><p>Visto che git fa il <code>merge</code> solo se non ci sono cambiamenti senza commit, ogni volta che fai <code>git pull</code> con cambiamenti che non hai aggiunto ad un commit potresti incappare in qualche guaio. Fortunatamente ci sono modi per tirartene fuori!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-167.png" class="kg-image" alt="image-167" width="600" height="400" loading="lazy"><figcaption>Photo by <a href="https://unsplash.com/@sneakyelbow?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" 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: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Sneaky Elbow</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" 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: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Unsplash</a></figcaption></figure><h2 id="approcci-diversi">Approcci diversi</h2><p>Quando hai cambiamenti locali senza commit e vuoi comunque fare il pull della nuova versione dal server remoto, la tua situazione in genere cade in uno dei seguenti scenari:</p><ul><li>non ti interessano i cambiamenti locali e vuoi sovrascriverli,</li><li>ti importano tanto e vuoi applicarli dopo i cambiamenti dal remoto,</li><li>vuoi scaricare i cambiamenti da remoto ma non applicarli per ora</li></ul><p>Ognuno di questi approcci richiede una diversa soluzione.</p><h3 id="non-ti-interessano-i-cambiamenti-locali">Non ti interessano i cambiamenti locali</h3><p>In questo caso vuoi semplicemente annullare i cambiamenti locali. Forse hai cambiato i file per sperimentare ma non ti serve più tale modifica. Quello che ti interessa è essere in pari con l'upstream.</p><p>Questo significa che aggiungi uno step in più tra il <code>fetch</code> e il <code>merge</code>. Questo step resetta il branch al suo stato non modificato, permettendo a <code>git merge</code> di funzionare.</p><pre><code class="language-bash">git fetch
git reset --hard HEAD
git merge origin/$BRANCH_ATTUALE</code></pre><p>Se non vuoi scrivere il nome del branch ogni volta che lo esegui, Git ha una abbreviazione che punta al branch upstream: <code>@{u}</code>. Un branch upstream è il branch nel repository remoto a cui fai <code>push</code> e dai cui fai <code>fetch</code>.</p><p>Ecco come appare il comando precedente con l'abbreviazione:</p><pre><code class="language-bash">git fetch
git reset --hard HEAD
git merge '@{u}'</code></pre><p>Mettiamo le virgolette attorno alla abbreviazione nell'esempio per prevenire che lo shell lo interpreti.</p><h3 id="ti-importa-tanto-dei-cambiamenti-locali">Ti importa tanto dei cambiamenti locali</h3><p>Quando i tuoi cambiamenti locali sono importati per te, ci sono due opzioni: puoi salvarli in un commit e poi fare <code>git pull</code>, oppure puoi salvarli nello stash.</p><p>Salvarli nello stash significa mettere i cambiamenti da parte per un momento, per poi recuperarli più tardi. Per essere più precisi, <code>git stash</code> crea un commit che non è visibile nel tuo branch corrente, ma è comunque accessibile da Git.</p><p>Per recuperare i cambiamenti salvati nell'ultimo stash, puoi usare <code>git stash pop</code>. Dopo aver applicato i cambiamenti stashati, questo comando rimuove anche il commit stash che non è più necessario.</p><p>Il procedimento quindi appare così:</p><pre><code class="language-bash">git fetch
git stash
git merge '@{u}'
git stash pop</code></pre><p>Come azione predefinita, i cambiamenti dallo stash entrano nell'area di staging. Se vuoi toglierli dall'area di staging, usa <code>git restore --staged</code> (se stai usando una versione di Git più recente di 2.25.0).</p><h3 id="vuoi-solo-scaricare-i-cambiamenti-da-remoto">Vuoi solo scaricare i cambiamenti da remoto</h3><p>L'ultimo scenario è un po' diverso dai precedenti. Diciamo che sei nel bel mezzo di un refactoring molto confusionario. Non sono delle opzioni né perdere i cambiamenti né stasharli. Mai, vuoi comunque avere i cambiamenti disponibili per eseguire <code>git diff</code> con le ultime novità come confronto.</p><p>Come hai probabilmente capito, ottenere i cambiamenti remoti non richiede assolutamente <code>git pull</code>! <code>git fetch</code> è sufficiente.</p><p>Una cosa da tenere a mente è che, come comportamento predefinito, <code>git fetch</code> prende i cambiamenti solo del branch corrente. Per ottenere i cambiamenti di tutti i branch usa <code>git fetch --all</code>. E se vuoi ripulire un po' i branch che non esistono più sul repository remoto, usa <code>git fetch --all --prune</code> per fare pulizie!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-166.png" class="kg-image" alt="image-166" width="600" height="400" loading="lazy"><figcaption>Photo by <a href="https://unsplash.com/@lenin33?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" 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: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Lenin Estrada</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit" 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: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Unsplash</a></figcaption></figure><h2 id="qualche-automazione">Qualche automazione</h2><p>Hai mai sentito di Git Config? È un file dove Git immagazzina le impostazioni configurate dall'utente. Risiede nella tua cartella home: come <code>~/.gitconfig</code> o come <code>~/.config/git/config</code>. Puoi modificarlo per aggiungervi alias personalizzati che saranno compresi come comandi Git.</p><p>Per esempio, per avere una abbreviazione uguale a <code>git diff --cached</code> (che mostra la differenza tra il branch corrente e i file nello stage), potresti aggiungere la seguente sezione:</p><pre><code>[alias]
  dc = diff --cached</code></pre><p>Dopo di ciò, puoi eseguire <code>git dc</code> ogni volta che vuoi revisionare i cambiamenti. Andando avanti così possiamo creare alcuni alias relativi ai casi precedenti.</p><pre><code>[alias]
  pull_force = !"git fetch --all; git reset --hard HEAD; git merge @{u}"
  pf = pull_force
  pull_stash = !"git fetch --all; git stash; git merge @{u}; git stash pop"</code></pre><p>In questo modo, se esegui <code>git pull_force</code> sovrascriverai i cambiamenti locali mentre <code>git pull_stash</code> li conserverà.</p><h2 id="git-pull-force">Git Pull Force</h2><p>Menti curiose avranno già scoperto che esiste una cosa come <code>git pull --force</code>. Questa però è una bestia diversa da ciò che è stato presentato in questo articolo.</p><p>Può sembrare qualcosa che ci potrebbe aiutare a sovrascrivere i cambiamenti locali, invece ci permette di fare il fetch di cambiamenti da un branch remoto a un branch locale diverso. <code>git pull --force</code> cambia solo il comportamento del fetching. È equivalente a <code>git fetch --force</code>.</p><p>Come <code>git push</code>, <code>git fetch</code> permette di specificare su quali branch locale e remoto vogliamo lavorare. <code>git fetch origin/feature-1:my-feature</code> significa che il branch <code>feature-1</code> del repository remoto sarà visibile sul branch locale <code>my-feature</code>. Quando tale operazione modifica la storia esistente, non è permessa da Git senza l'uso esplicito del parametro <code>--force</code>.</p><p>Allo stesso modo in cui <code>git push --force</code> permette di sovrascrivere branch remoti, <code>git fetch --force</code> (o <code>git pull --force</code>) permette di sovrascrivere branch locali. È sempre usato con i branch sorgente e destinazione menzionati come parametri. Un approccio alternativo per sovrascrivere i cambiamenti locali con <code>git pull --force</code> potrebbe essere <code>git pull --force "@{u}:HEAD"</code>.</p><h2 id="in-conclusione">In conclusione</h2><p>Il mondo di Git è vasto e questo articolo copre sono una delle sfaccettature legate alle manutenzione di un repository: incorporare cambiamenti remoti in un repository locale. Anche questa situazione quotidiana, ci ha richiesto un'analisi dettagliata del meccanismo interno di questo strumento di controllo versione.</p><p>Imparare quali sono le situazioni di utilizzo pratico aiuta a capire meglio come funziona Git. Questo, di conseguenza, ti permetterà di sentirti competente ogni volta che ti trovi nei guai. Capita a tutti.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cos'è un file XML: come aprire i file XML e i migliori visualizzatori ]]>
                </title>
                <description>
                    <![CDATA[ Se hai mai visto l'estensione .xml nella tua cartella dei download e ti sei chiesto che cosa fosse, non sei solo. Continua a leggere per imparare cos'è un file XML e come aprirlo, sia localmente sul tuo computer che in un editor online. Cos'è un file XML? XML è l'acronimo ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/cose-un-file-xml-come-aprire-i-file-xml-e-i-migliori-visualizzatori/</link>
                <guid isPermaLink="false">62d597a05cda1d06d40d8f6f</guid>
                
                    <category>
                        <![CDATA[ XML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Thu, 28 Jul 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/07/5f9c98bf740569d1a4ca1bd4.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-an-xml-file-how-to-open-xml-files-and-the-best-xml-viewers/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is an XML File? How to Open XML Files and the Best XML Viewers</a>
      </p><p>Se hai mai visto l'estensione <code>.xml</code> nella tua cartella dei download e ti sei chiesto che cosa fosse, non sei solo.</p><p>Continua a leggere per imparare cos'è un file XML e come aprirlo, sia localmente sul tuo computer che in un editor online.</p><h2 id="cos-un-file-xml">Cos'è un file XML?</h2><p>XML è l'acronimo per Extensible Markup Language ed è stato creato negli anni '90 dal World Wide Web Consortium (W3C).</p><p>Anche se l'XML, come l'HTML, è un linguaggio di markup leggibile dagli umani, hanno una funzione diversa. L'HTML descrive la struttura di una pagina web e del suo contenuto, l'XML descrive la struttura di dati.</p><p>L'XML fornisce ai programmi e soprattutto ai programmatori, un formato standard largamente accettato per la trasmissione dei dati tra diversi sistemi. In questo modo, XML ha più in comune con JSON che con l'HTML.</p><p>Mentre l'XML non è più il metodo preferito per organizzare e trasmettere dati, ha ancora il suo posto. L'XML è ancora usato in molti vecchi sistemi, e sia RSS e SVG sono basati sul formato XML.</p><p>Ecco un semplice esempio di un file XML e di come è usato per strutturare dati:</p><figure class="kg-card kg-code-card"><pre><code class="language-xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;fcc_merch&gt;
   &lt;item&gt;
      &lt;name&gt;Triblend T-shirt&lt;/name&gt;
      &lt;price&gt;$24.99&lt;/price&gt;
      &lt;description&gt;Represent the freeCodeCamp community with pride in this jet-black Triblend T-shirt featuring the iconic "bonfire function call" logo.&lt;/description&gt;
   &lt;/item&gt;
   &lt;item&gt;
      &lt;name&gt;Cotton-Poly Pullover Hoodie&lt;/name&gt;
      &lt;price&gt;$49.99&lt;/price&gt;
      &lt;description&gt;Stay toasty and dress like a developer with this jet-black cotton-poly pullover hoodie.&lt;/description&gt;
   &lt;/item&gt;
   &lt;item&gt;
      &lt;name&gt;Ceramic Coffee Mug&lt;/name&gt;
      &lt;price&gt;$14.99&lt;/price&gt;
      &lt;description&gt;Toast to the developer community with your very own freeCodeCamp Bonfire Function Call mug.&lt;/description&gt;
   &lt;/item&gt;
&lt;/fcc_merch&gt;</code></pre><figcaption>Sample <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);">fcc-merch.xml</code> file</figcaption></figure><h2 id="come-aprire-un-file-xml-in-locale">Come aprire un file XML in locale</h2><p>Torniamo alla tua cartella dei download e a quel file con l'estensione <code>.xml</code>.</p><p>Se hai mai bisogno di aprire un file XML, hai molte opzioni. La grande domanda è se hai bisogno di modificare i dati nel file XML, o solo visualizzarlo.</p><h3 id="visualizzare-un-file-xml-nel-browser">Visualizzare un file XML nel browser</h3><p>Se tutto quello di cui hai bisogno è vedere i dati di un file XML, sei fortunato. Più o meno qualsiasi browser può aprire un file XML.</p><p>Su Chrome, puoi semplicemente aprire una nuova scheda e trascinare lì il file XML. In alternativa, puoi fare click con il tasto destro sul file XML, spostare la freccetta su "Apri con" e poi cliccare su "Chrome".</p><p>Quando lo fai, il file si aprirà in una nuova scheda.</p><p>Ecco come il file <code>fcc-merch.xml</code> appare su Chrome:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/image-26.png" class="kg-image" alt="image-26" width="600" height="400" loading="lazy"></figure><p><strong>Nota</strong>: le istruzioni per il tuo sistema operativo potrebbero differire leggermente.</p><h3 id="modificare-un-file-xml-in-un-editor-di-testo">Modificare un file XML in un editor di testo</h3><p>Se hai bisogno di modificare un file XML in locale, o se preferisci vederlo al di fuori del browser, il modo migliore per farlo è con un editor di testo.</p><p>Ci sono un sacco di opzioni a seconda del tuo sistema operativo. Ecco alcune raccomandazioni comuni:</p><p><strong><strong>Windows:</strong></strong></p><ul><li><a href="https://notepad-plus-plus.org/">Notepad++</a></li></ul><p><strong><strong>Mac/Linux/Windows:</strong></strong></p><ul><li><a href="https://code.visualstudio.com/">VSCode</a></li><li><a href="https://atom.io/">Atom</a></li><li><a href="https://www.sublimetext.com/">Sublime Text</a></li></ul><p>Tieni a mente che VSCode, Atom e Sublime Text sono programmi piuttosto pesanti, specialmente se tutto quello che vuoi fare è modificare un file XML. Utenti Mac e Linux potrebbero avere accesso ad altri editor di testo leggeri come gedit o Leafpad che possono aprire e modificare file XML.</p><p>Se vuoi imparare a programmare, allora prova pure uno degli editor elencati sopra.</p><p>Una volta che hai scaricato l'editor, puoi aprire il file XML dall'interfaccia grafica dell'editor come faresti per qualsiasi altro file.</p><p>Ecco lo stesso file <code>fcc-merch.xml</code> in VSCode:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/image-27.png" class="kg-image" alt="image-27" width="600" height="400" loading="lazy"></figure><h2 id="come-aprire-un-file-xml-online">Come aprire un file XML online</h2><p>Aprire un file XML online è facile, e i migliori visualizzatori di XML svolgono anche le funzioni di editor e formattazione.</p><p>Ecco alcuni dei più popolari editor/visualizzatori XML online:</p><ul><li><a href="https://codebeautify.org/xmlviewer">Code Beautify</a></li><li><a href="https://jsonformatter.org/xml-viewer">JSON Formatter</a></li><li><a href="https://www.tutorialspoint.com/online_xml_editor.htm">Tutorialspoint</a></li></ul><p>Lavorano in maniera simile, permettendoti di caricare il file XML dal computer o copiarlo e incollarlo nell'editor a sinistra:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/image-24.png" class="kg-image" alt="image-24" width="600" height="400" loading="lazy"><figcaption>L'editor/visualizzatore XML Code Beautify</figcaption></figure><p>Una volta che carichi il tuo XML, puoi cliccare su "Tree View" per far sì che sia più facile vedere la gerarchia dei tuoi dati e come sono annidati i diversi campi:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/image-33.png" class="kg-image" alt="image-33" width="600" height="400" loading="lazy"></figure><p>Fai qualsiasi modifica di cui hai bisogno nell'editor a sinistra. Poi quando hai finito, clicca "Download" per scaricare una copia del tuo file modificato.</p><p>Tieni a mente che il tuo file scaricato potrebbe avere un nome diverso come <code>codebeautify.xml</code>. Devi semplicemente rinominarlo prima di allegarlo a una mail, caricarlo o qualsiasi altra operazione devi svolgere.</p><h2 id="in-sintesi">In sintesi</h2><p>Il formato XML ha una storia lunga e leggendaria.</p><p>Anche se i file XML sono piuttosto densi rispetto alle soluzioni moderne per la trasmissione dei dati come JSON, non fa male conoscere come aprirli e modificarli. Fortunatamente hai molte opzioni in locale e online.</p><p>Spero che questo ti aiuti la prossima volta che hai bisogno di aprire o modificare un file XML.</p><p>Buona programmazione.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cosa è Gitignore e come aggiungerlo al tuo repo ]]>
                </title>
                <description>
                    <![CDATA[ Il file .gitignore è un file di testo che dice a Git quali file e cartelle ignorare in un progetto. Un file .gitignore locale viene tipicamente aggiunto nella cartella root di un progetto. Puoi anche creare un file .gitignore globale, e quello che ci scrivi viene ignorato in tutti i ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/cosa-e-gitignore-e-come-aggiungerlo-al-tuo-repo/</link>
                <guid isPermaLink="false">62d572285cda1d06d40d8f30</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Tue, 26 Jul 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/07/5f9c9e43740569d1a4ca3c32.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/gitignore-what-is-it-and-how-to-add-to-repo/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Gitignore Explained: What is Gitignore and How to Add it to Your Repo</a>
      </p><p>Il file <code>.gitignore</code> è un file di testo che dice a Git quali file e cartelle ignorare in un progetto.</p><p>Un file <code>.gitignore</code> locale viene tipicamente aggiunto nella cartella root di un progetto. Puoi anche creare un file <code>.gitignore</code> globale, e quello che ci scrivi viene ignorato in tutti i tuoi repo Git.</p><p>Per creare un file <code>.gitignore</code> locale, crea un file di testo e dagli il nome <code>.gitignore</code> (ricorda di includere il punto <code>.</code> all'inizio). Poi modifica questo file al bisogno. Ogni nuova riga dovrebbe elencare un altro file o un'altra cartella che vuoi che Git ignori.</p><p>Le voci in questo file possono anche seguire un pattern:</p><ul><li><code>*</code> è un jolly</li><li><code>/</code> è usato per ignorare percorsi relativi al file <code>.gitignore</code></li><li><code>#</code> è usato per aggiungere commenti al file <code>.gitignore</code></li></ul><p>Questo è un esempio di come potrebbe essere un file <code>.gitignore</code>:</p><pre><code class="language-text"># Ignora i file di sistema Mac
.DS_store

# Ignora la cartella node_modules
node_modules

# Ignora tutti i file .txt
*.txt

# Ignora i file collegati alle chiavi API
.env

# Ignora i file SASS di configurazione
.sass-cache</code></pre><p>Per aggiungere o cambiare il tuo file <code>.gitignore</code> globale, esegui il seguente comando:</p><pre><code class="language-bash">git config --global core.excludesfile ~/.gitignore_global</code></pre><p>Questo comando crea il file <code>~/.gitignore_global</code>. Ora puoi modificare quel file allo stesso modo di un file <code>.gitignore</code>. Tutti i tuoi repo git ignoreranno i file e le cartelle scritte nel file globale <code>.gitignore</code>.</p><h2 id="come-smettere-di-tenere-traccia-dei-file-precedentemente-inclusi-in-un-commit-da-un-nuovo-gitignore">Come smettere di tenere traccia dei file precedentemente inclusi in un commit da un nuovo gitignore</h2><p>Per smettere di tenere traccia di un <em>singolo </em>file, cioè smettere di tenerne traccia ma non cancellarlo dal sistema usa:</p><p><code>git rm --cached filename</code></p><p>Per smettere di tenere traccia di <em>tutti</em> i file in <code>.gitignore</code>:</p><p>Prima fai il <strong>commit</strong> di qualsiasi cambiamento che hai in sospeso, poi esegui:</p><p><code>git rm -r --cached</code></p><p>Questo rimuove qualsiasi file dall'indice (area di staging). Poi esegui:</p><p><code>git add .</code></p><p>Fai il commit:</p><p><code>git commit -m ".gitignore ora funziona"</code></p><p>Per annullare <code>git rm --cached filename</code>, usa <code>git add filename</code></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Modalità Aereo: cosa è e quando serve ]]>
                </title>
                <description>
                    <![CDATA[ Se hai preso un aereo nell'ultima decade, e hai uno smartphone, hai probabilmente dovuto impostare la modalità aereo prima che l'aereo decollasse. Mentre molti di noi semplicemente seguono le regole, hai mai pensato a perché hai bisogno di usare la modalità aereo? In questo articolo impareremo cosa fa la modalità ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/modalita-aereo-cosa-e-e-quando-serve/</link>
                <guid isPermaLink="false">62d547725cda1d06d40d8c3b</guid>
                
                    <category>
                        <![CDATA[ produttività ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Mon, 25 Jul 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/07/5f9c9fa2740569d1a4ca43b9.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-airplane-mode-what-does-it-do-and-when-should-you-turn-it-on/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is Airplane Mode? What does it do and when should you turn it on?</a>
      </p><p>Se hai preso un aereo nell'ultima decade, e hai uno smartphone, hai probabilmente dovuto impostare la modalità aereo prima che l'aereo decollasse.</p><p>Mentre molti di noi semplicemente seguono le regole, hai mai pensato a perché hai bisogno di usare la modalità aereo?</p><p>In questo articolo impareremo cosa fa la modalità aereo, perché devi usarla durante i voli e in che altro modo ti può aiutare nella tua vita di tutti i giorni.</p><h2 id="cosa-la-modalit-aereo">Cosa è la modalità aereo?</h2><p>Quando attivi la modalità aereo, disattivi la capacità del tuo telefono di connettersi alle reti cellulari o WiFi o al Bluetooth. Questo significa che non puoi fare o ricevere chiamate, mandare messaggi o navigare in internet.</p><p>Puoi comunque usare il tuo telefono: puoi fare foto, ascoltare la musica, giocare ai videogiochi, scrivere email o messaggi da mandare più tardi. In pratica tutto quello che non richiede campo o internet.</p><h3 id="come-lo-attivi">Come lo attivi?</h3><p>Per attivare la modalità aereo se hai un iPhone o iPad devi semplicemente scorrere velocemente dal bordo inferiore dello schermo verso l'alto. Vedrai una piccola icona a forma di aereo nel menu che compare, toccalo e cambierà colore. Questo significa che la modalità aereo è attiva.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/10/Airplane-mode.png" class="kg-image" alt="Airplane-mode" width="600" height="400" loading="lazy"><figcaption>Tocca l'aereoplano e tutte le trasmissioni saranno disattivate.</figcaption></figure><p>Noterai che il tuo wifi è stato spento e che il tuo telefono non sta più trasmettendo un segnale radio.</p><p>Se hai un telefono Android, il procedimento è simile, scorri velocemente dall'alto dello schermo verso il basso e attiva la modalità aereo.</p><h2 id="perch-dobbiamo-farlo">Perché dobbiamo farlo?</h2><p>Il tuo telefono è uno strumento piccolo ma potente. Emette onde radio e interferenze elettromagnetiche che possono interferire con i dispositivi per le comunicazioni dell'aereo. E nessuno vuole un aereo che non riesce a comunicare con, diciamo, la torre di controllo dell'aeroporto di destinazione.</p><p>L'Amministrazione Federale dell'Aviazione (FAA) ha anche determinato che i segnali cellulari che vengono da un aereo potrebbero sopraffare le torri cellulari a terra, causando una interruzione del servizio. Dopo tutto milioni di persone voltano ogni giorno, il che vorrebbe dire un sacco di torri intasate.</p><p>Qualsiasi sia la ragione, e indipendentemente da cosa ne pensi, è una buona idea seguire le istruzioni dell'assistente di volo e attivare la modalità aereo quando sei in volo.</p><h3 id="il-lato-positivo"><strong>Il lato positivo</strong></h3><p>Sei anni fa, FAA ha deciso che le restrizioni sui dispositivi mobili erano un po' troppo restrittive, quindi hanno iniziato a permettere ai passeggeri di usare WiFi e Bluetooth durante i voli.</p><p>Se il tuo aereo ha una rete Wifi a bordo, sentiti libero di connetterti e navigare su internet. Bonus: puoi usare le tue cuffie bluetooth. Devi riattivare manualmente il WiFi una volta attivata la modalità aereo (nello stesso menu che hai visto sopra).</p><h2 id="ci-sono-altri-usi-per-la-modalit-aeroplano">Ci sono altri usi per la modalità aeroplano?</h2><p>Pensa a cosa fa la modalità aereo: fa sì che tu non possa ricevere o fare telefonare o ricevere e inviare messaggi. Ti impedisce anche di navigare in internet senza scopo. Ah, il potenziale per la pace mentale e la produttività.</p><h3 id="concentrarsi-sul-lavoro">Concentrarsi sul lavoro</h3><p>Se hai bisogno di concentrarti e fare del lavoro focalizzato, considera di attivare la modalità aereo. Niente più distrazioni da pop-up, notifiche o rumori dal tuo dispositivo - che sollievo.</p><p>Puoi impostare un limite di tempo per te stesso (nessun bisogno di avere la modalità aereo attivata tutto il giorno. Il tuo compagno potrebbe avere bisogno di chiederti cosa vuoi per cena o i tuoi figli potrebbero doverti contattare). Prova un paio d'ore e vedi quanto riesci a completare.</p><h3 id="proteggi-i-tuoi-figli">Proteggi i tuoi figli</h3><p>Parlando di figli, la modalità aereo può essere utile anche per loro. Se dai il tuo telefono o tablet (per un limitato tempo allo schermo, giusto?) non vuoi che chiamino accidentalmente il tuo capo o comprino la tua intera wishlist di Amazon.</p><p>Quindi, attiva la modalità aereo. Saranno sempre in grado di fare giochi, scattare foto, e così via. Non saranno in grado di infilarsi in così tanti pasticci.</p><h3 id="carica-pi-in-fretta-e-risparmia-la-batteria-">Carica più in fretta (e risparmia la batteria)</h3><p>Quando il tuo telefono è in modalità aereo, non sta continuamente provando a connettersi a una rete senza fili o a trovare campo. Quindi la tua batteria durerà molto di più.</p><p>Se hai una lunga giornata, e hai dimenticato il caricatore portatile, attiva la modalità aereo. Riuscirai a completare più attività, avere un po' di pace mentale, e il tuo telefono sarà ancora un po' carico, così puoi avere le indicazioni per raggiungere quel nuovo ristorante (o qualsiasi altra cosa) che volevi provare.</p><p>Bonus: quando la modalità aereo è attiva, il tuo telefono caricherà più in fretta (per la stessa ragione menzionata sopra, non sta provando a fare così tante cose allo stesso tempo, così si può concentrare sulla carica). Quindi se non hai un nuovo dispositivo che carica super-velocemente questo potrebbe aiutarti.</p><h3 id="disconnettiti-e-prendi-una-pausa">Disconnettiti e prendi una pausa</h3><p>Infine, qualche volta vuoi semplicemente staccarti dal tuo telefono o tablet e liberarti da tutte le notifiche. Buon per te - fallo.</p><p>La modalità aereo rende facile disconnetterti dal tuo dispositivo ma averlo comunque accesso (per usarlo come sveglia, per esempio. O scattare foto in vacanza). Quindi tocca quell'icona a forma di aeroplano e lascia da parte le tue preoccupazioni per un po'.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Le convenzioni di nomenclatura CSS che ti salveranno da ore di debugging ]]>
                </title>
                <description>
                    <![CDATA[ Ho sentito molti sviluppatori dire che odiano il CSS. Nella mia esperienza, questo capita come diretta conseguenza del non prendersi abbastanza tempo per impararlo. Il CSS non è il "linguaggio" più carino, ma ha dato vita allo stile del web per più di vent'anni. Non sta andando poi così male, ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/le-convenzioni-di-nomenclatura-css-che-ti-salveranno-da-ore-di-debugging/</link>
                <guid isPermaLink="false">62b9671f7e58e706f822b9f6</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Mon, 04 Jul 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/1_YunI3ChUVMlpmFzo75FczQ.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/css-naming-conventions-that-will-save-you-hours-of-debugging-35cea737d849/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Naming Conventions that Will Save You Hours of Debugging</a>
      </p><p>Ho sentito molti sviluppatori dire che odiano il CSS. Nella mia esperienza, questo capita come diretta conseguenza del non prendersi abbastanza tempo per impararlo.</p><p>Il CSS non è il "linguaggio" più carino, ma ha dato vita allo stile del web per più di vent'anni. Non sta andando poi così male, no?</p><p>Però, più scrivi CSS e più ti accorgi di un grosso difetto.</p><p>È dannatamente difficile da manutenere.</p><p>Il CSS scritto male diventa velocemente un incubo.</p><p>Ecco alcune convenzioni di nomenclatura che ti risparmieranno un po' di stress e innumerevoli ore di lavoro.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/0Nm4l3DA3bWTbPc6C4ViWDqewokYYootpoqb" class="kg-image" alt="0Nm4l3DA3bWTbPc6C4ViWDqewokYYootpoqb" width="650" height="605" loading="lazy"></figure><h3 id="usa-stringhe-delimitate-da-trattini"><strong>Usa stringhe delimitate da trattini</strong></h3><p>Se scrivi un sacco di JavaScript, scrivere le variabili in camel case è una pratica comune.</p><pre><code>var redBox = document.getElementById('...')</code></pre><p>Il problema è che questo tipo di nomenclatura non è adatta al CSS.</p><p>Non fare questo:</p><pre><code class="language-css">.redBox {
    border: 1px solid red;
}</code></pre><p>Invece, scrivi:</p><pre><code class="language-css">.red-box {
    border: 1px solid red;
}</code></pre><p>Questa è una nomenclatura piuttosto standard in CSS ed è senza dubbio più leggibile.</p><p>È anche coerente con i nomi delle proprietà in CSS.</p><pre><code class="language-css">/* Corretto */
.some-class {
    font-weight: 10em;
}

/* Sbagliato */
.some-class {
    fontWeight: 10em;
}</code></pre><h3 id="la-nomenclatura-bem"><strong>La nomenclatura BEM</strong></h3><p>Diversi team hanno diversi approcci per la denominazione dei selettori CSS. Alcuni team usano i trattini, mentre altri preferiscono usare una nomenclatura più strutturata chiamata BEM.</p><p>In genere, ci sono tre problemi che le convenzioni di nomenclatura CSS provano a risolvere:</p><ol><li>Sapere cosa fa un selettore</li><li>Avere un'idea di dove può essere usato un selettore</li><li>Sapere la relazione tra i nomi delle classi</li></ol><p>Tutto ciò dovrebbe essere chiaro dando una semplice occhiata al nome del selettore.</p><p>Hai mai visto nomi di classi scritti così?</p><pre><code class="language-css">.nav--secondary { }

.nav__header { }</code></pre><p>Questa è la nomenclatura BEM.</p><h3 id="spiegare-la-nomenclatura-bem-a-un-bambino-di-cinque-anni"><strong>Spiegare la nomenclatura BEM a un bambino di cinque anni</strong></h3><p>La nomenclatura BEM prova a dividere l'interfaccia utente in piccoli componenti riutilizzabili.</p><p>Considera l'immagine seguente:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/pIFVbUmRtKN8x6DvLHEvJeUSM9Oda8ClkY5f" class="kg-image" alt="pIFVbUmRtKN8x6DvLHEvJeUSM9Oda8ClkY5f" width="800" height="400" loading="lazy"><figcaption>È un disegno degno di riconoscimenti di un omino a bastoncini :)</figcaption></figure><p>No, non è degno di riconoscimenti :(</p><p>L'omino rappresenta un componente, come un blocco di design.</p><p>Potresti avere già indovinato che la B in BEM sta per 'Blocco'.</p><p>Nel mondo reale, questo 'blocco' potrebbe rappresentare una barra di navigazione, un'intestazione, un pie' di pagina e altri blocchi di design.</p><p>Seguendo la pratica spiegata sopra, un nome ideale per la classe per questo componente sarebbe <code>stick-man</code>.</p><p>Lo stile del componente dovrebbe essere impostato in questo modo:</p><pre><code class="language-css">.stick-man {   }</code></pre><p>Abbiamo usato le stringhe delimitate da trattini. Ottimo!</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/ThMVqj-sv26pjpzLJU3MIF2TCdn-S4CjlEZk" class="kg-image" alt="ThMVqj-sv26pjpzLJU3MIF2TCdn-S4CjlEZk" width="800" height="400" loading="lazy"></figure><h3 id="e-per-elementi"><strong>E per elementi</strong></h3><p>La E in 'BEM' sta per Elementi.</p><p>I blocchi di design generali raramente sono isolati.</p><p>Per esempio, l'omino a bastoncini ha una testa <code>head</code>, due bellissime braccia <code>arms</code>, e dei piedi <code>feet</code>.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/bf2jyOzcZ8wgd95I3qR9IS3Cf6pRlQ2hHuGM" class="kg-image" alt="bf2jyOzcZ8wgd95I3qR9IS3Cf6pRlQ2hHuGM" width="800" height="400" loading="lazy"></figure><p><code>head</code>, <code>feet</code> e <code>arms</code> sono tutti elementi dentro il componente. Posso essere visti come componenti figli, cioè figli del componente genitore generale.</p><p>Usando la nomenclatura BEM, i nomi delle classi degli elementi sono derivati aggiungendo <strong>due trattini bassi</strong>, seguiti dal nome dell'elemento.</p><p>Per esempio:</p><pre><code class="language-css">.stick-man__head {   }

.stick-man__arms {   }

.stick-man__feet {   }</code></pre><h3 id="m-per-modificatori"><strong>M per modificatori</strong></h3><p>La lettera M in 'BEM' sta per Modificatori.</p><p>E se l'omino a bastoncini fosse modificato e potessimo avere un omino blu (<code>blue</code>) o un omino rosso (<code>red</code>)?</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/Q-aWWnpw1UuoXxp5NGHxsjP5689VQBT0oGdQ" class="kg-image" alt="Q-aWWnpw1UuoXxp5NGHxsjP5689VQBT0oGdQ" width="800" height="400" loading="lazy"></figure><p>Nel mondo reale, questo potrebbe essere un pulsante blu o un pulsante rosso. Queste sono modifiche del componente in questione.</p><p>Usando la nomenclatura BEM, i nomi delle classi modificate sono derivati aggiungendo due trattini seguiti dal nome dell'elemento.</p><p>Per esempio:</p><pre><code class="language-css">.stick-man--blue {   }

.stick-man--red {   }
</code></pre><p>L'ultimo esempio mostra il componente genitore che viene modificato. Ma non è sempre così.</p><p>Potremmo avere degli omini con diverse dimensioni della testa.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/ZK-riYJhmFfBVEof6xO8yGGR3O10g2dW7Xqn" class="kg-image" alt="ZK-riYJhmFfBVEof6xO8yGGR3O10g2dW7Xqn" width="800" height="400" loading="lazy"></figure><p>Questa volta è l'elemento che è stato modificato. Ricorda, l'elemento è un componente figlio dentro un blocco contenitore generale.</p><p>Quindi, <code>.stick-man</code> rappresenta il blocco, <code>.stick-man__head</code> l'elemento.</p><p>Come hai visto nell'esempio sopra, i due trattini possono essere usati in questo modo:</p><pre><code class="language-css">.stick-man__head--small {   }

.stick-man__head--big {   }</code></pre><p>Nota l'uso dei due <strong>trattini</strong> nell'esempio qui sopra. Sono usati per denotare un modificatore.</p><p>Abbiamo visto come funziona la nomenclatura BEM.</p><p>Personalmente, tendo a usare i nomi di classi con i trattini per progetti semplici, e la nomenclatura BEM per interfacce utente più complesse.</p><p>Qui puoi <a href="http://getbem.com/naming/">leggere di più sulla nomenclatura BEM</a>.</p><h3 id="perch-usare-nomenclature-specifiche"><strong>Perché usare nomenclature specifiche?</strong></h3><blockquote>Ci sono solo due problemi difficili in informatica: invalidare la cache e dare i nomi alle cose – Phil Karlton</blockquote><p>Dare il nome alle cose è difficile. Stiamo provando a rendere le cose più semplici e risparmiare del tempo in futuro con del codice su cui è più facile fare manutenzione.</p><p>Dare il nome corretto alle cose in CSS renderà il tuo codice più facile da leggere e da gestire.</p><p>Se scegli di usare la nomenclatura BEM, diventerà più semplice capire la relazione tra i componenti/blocchi del design solo guardando il markup.</p><h3 id="nomi-css-con-gli-hook-javascript"><strong>Nomi CSS con gli Hook JavaScript</strong></h3><p>Oggi è il primo giorno di lavoro di John.</p><p>Gli viene dato del codice HTML come questo:</p><pre><code class="language-html">&lt;div class="siteNavigation"&gt;
&lt;/div&gt;</code></pre><p>John ha letto questo articolo e ha realizzato che questo potrebbe non essere il modo migliore per dare il nome alle cose in CSS. Quindi fa il refactoring in questo modo:</p><pre><code class="language-html">&lt;div class="site-navigation"&gt;
&lt;/div&gt;</code></pre><p>Meglio, mh?</p><p>Senza saperlo, John ha rotto il codebase...</p><p>Come?</p><p>Da qualche parte nel codice JavaScript, c'era una relazione con la classe precedente, <code>siteNavigation</code>:</p><pre><code class="language-javascript">// the JavaScript code
const nav = document.querySelector('.siteNavigation')</code></pre><p>Quindi, con questo cambiamento al nome della classe, la variabile <code>nav</code> diventa <code>null</code>.</p><p>Che cosa triste.</p><p>Per evitare casi come questo, gli sviluppatori hanno studiato diverse strategie.</p><h4 id="1-usare-classi-che-iniziano-con-js-"><strong>1. Usare classi che iniziano con js-</strong></h4><p>Un modo per ridurre questi bug è usare nomi di classi che iniziano con <code>js-*</code> per denotare una relazione con l'elemento del DOM in questione.</p><p>Ad esempio:</p><pre><code class="language-html">&lt;div class="site-navigation js-site-navigation"&gt;
&lt;/div&gt;</code></pre><p>E nel codice JavaScript</p><pre><code class="language-javascript">// the JavaScript code
const nav = document.querySelector(".js-site-navigation")</code></pre><p>Come convenzione, chiunque vede il nome di classe <code><strong>js-</strong>site-navigation</code> capisce che c'è una relazione con l'elemento del DOM nel codice JavaScript.</p><h4 id="2-usare-l-attributo-rel"><strong>2. Usare l'attributo Rel</strong></h4><p>Non uso questa tecnica personalmente, ma ho visto persone che lo fanno.</p><p>Lo riconosci?</p><pre><code class="language-html">&lt;link rel="stylesheet" type="text/css" href="main.css"&gt;</code></pre><p>In pratica, l'<strong>attributo rel</strong> definisce la relazione che una risorsa linkata ha con il documento che vi fa riferimento.</p><p>Nell'esempio precedente con John, i sostenitori di questa tecnica farebbero così:</p><pre><code class="language-html">&lt;div class='site-navigation' rel='js-site-navigation'&gt;
&lt;/div&gt;</code></pre><p>E nel JavaScript:</p><pre><code class="language-javasript">const nav = document.querySelector("[rel='js-site-navigation']")</code></pre><p>Ho i miei dubbi su questa tecnica, ma ti potrebbe capitare di vederla in alcuni codebase. La dichiarazione qui è, <em>"c'è una relazione con il JavaScript, quindi uso l'attributo rel per denotarlo".</em></p><p>Il web è un grande posto con tanti diversi "metodi" per risolvere gli stessi problemi.</p><h4 id="3-non-usare-attributi-data"><strong>3. Non usare attributi data</strong></h4><p>Alcuni sviluppatori usano gli attributi data come hook JavaScript. Questo non è corretto. Per definizione, gli attributi data sono usati per <strong>immagazzinare dati personalizzati.</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/08r5ESO6cpzZvcZz-KczJEGXtPBtCLorryI6" class="kg-image" alt="08r5ESO6cpzZvcZz-KczJEGXtPBtCLorryI6" width="800" height="400" loading="lazy"><figcaption>Un utilizzo corretto degli attributi data (Twitter).</figcaption></figure><p><strong>Modifica #1: come menzionato da certe fantastiche persone nella sezione commenti, se le persone usano l'attributo 'rel', allora forse è ok usare gli attributi data in certi casi. Sta a te decidere &nbsp;dopo tutto.</strong></p><h3 id="consiglio-extra-scrivi-pi-commenti-css">Consiglio extra: scrivi più commenti CSS</h3><p>Questo non ha nulla a che vedere con le convezioni di nomenclatura, ma ti salverà un sacco di tempo.</p><p>Mentre un sacco di sviluppatori web consigliano di non scrivere commenti JavaScript, o scriverne pochi, credo che dovresti scrivere più commenti CSS.</p><p>Visto che il CSS non è il linguaggio più elegante, commenti ben strutturati possono salvare tempo quando stai provando a capire il tuo codice.</p><p>Di certo male non fa.</p><p>Guarda quanto è ben commentato i<a href="https://github.com/twbs/bootstrap/blob/v4-dev/scss/_carousel.scss">l codice sorgente di Bootstrap</a>!</p><p>Non devi scrivere commenti per dire che <code>color: red</code> rende qualcosa rosso. Ma se stai usando trucchetti CSS meno ovvi, sentiti libero di scrivere un commento.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Qual è la differenza tra Git Fetch e Git Pull? ]]>
                </title>
                <description>
                    <![CDATA[ I comandi di Git pull e fetch sono usati regolarmente dagli utenti di Git. Vediamo qual è la differenza tra questi due comandi. Per contestualizzare, è bene ricordare che stiamo probabilmente lavorando in un repo clone. Cosa è un clone? È semplicemente un duplicato di un altro repo: praticamente è ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/qual-e-la-differenza-tra-git-fetch-e-git-pull/</link>
                <guid isPermaLink="false">62a6ff43a3647806dd4ed5c4</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Fri, 01 Jul 2022 12:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/5f9c9e70740569d1a4ca3d14.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/git-fetch-vs-pull/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Git Fetch vs Pull: What's the Difference Between the Git Fetch and Git Pull Commands?</a>
      </p><p>I comandi di Git <code>pull</code> e <code>fetch</code> sono usati regolarmente dagli utenti di Git. Vediamo qual è la differenza tra questi due comandi.</p><p>Per contestualizzare, è bene ricordare che stiamo probabilmente lavorando in un repo clone. Cosa è un clone? È semplicemente un duplicato di un altro repo: praticamente è la tua copia del codice sorgente di qualcun altro.</p><p>Detto questo, per tenere il tuo clone aggiornato, avrai bisogno di portare al tuo clone i cambiamenti che possono essere stati fatti all'originale.</p><p>È qui che <code>fetch</code> e <code>pull</code> entrano in gioco.</p><p><code>git fetch</code> è il comando che dice al tuo git locale di ottenere i meta-dati più recenti dall'originale (ma non fa nessun trasferimento di file. È più che altro per vedere se ci sono cambiamenti disponibili).</p><p><code>git pull</code>, d'altra parte, fa quello <strong>e</strong> copia i cambiamenti dal repository remoto.</p><p>Per esempio:</p><pre><code class="language-text">git pull origin ankur bugfix</code></pre><p>Il punto principale da tenere a mente è che, in genere, ci sono almeno tre copie di un progetto nel tuo spazio di lavoro.</p><ul><li>Una copia è il tuo repository con la tua storia dei commit (quella già salvata, per così dire)</li><li>La seconda copia è la tua copia di lavoro dove stai modificando e costruendo (non ancora in un commit sul tuo repository)</li><li>La terza copia è la copia cache del repository remoto (forse l'originale da cui hai clonato il tuo).</li></ul><p>Puoi usare <code>git fetch</code> per conoscere i cambiamenti fatti nel branch/repo remoto dal tuo ultimo pull. Questo è utile per permettere di controllare prima di fare un pull, che potrebbe cambiare i file nel tuo branch corrente e nella copia di lavoro (e potenzialmente perdere i tuoi cambiamenti, ecc).</p><pre><code class="language-text">git fetch    
git diff ...origin</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java da String a Int - Come convertire una stringa in un numero intero ]]>
                </title>
                <description>
                    <![CDATA[ Gli oggetti stringa sono rappresentati come stringhe di caratteri. Se hai lavorato in Java Swing, sai che ha componenti come JTextField e JTextArea che usiamo per ottenere i nostri input dall'interfaccia grafica. Inoltre, prende il nostro input come una stringa.  Se vogliamo fare una semplice calcolatrice usando Swing, dobbiamo ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/java-da-string-a-int-come-convertire-una-stringa-in-un-numero-intero/</link>
                <guid isPermaLink="false">62a85a7ea3647806dd4ed8cf</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Mon, 27 Jun 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/Untitled-design.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/java-string-to-int-how-to-convert-a-string-to-an-integer/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Java String to Int – How to Convert a String to an Integer</a>
      </p><p>Gli oggetti stringa sono rappresentati come stringhe di caratteri.</p><p>Se hai lavorato in Java Swing, sai che ha componenti come JTextField e JTextArea che usiamo per ottenere i nostri input dall'interfaccia grafica. Inoltre, prende il nostro input come una stringa. </p><p>Se vogliamo fare una semplice calcolatrice usando Swing, dobbiamo scoprire come convertire una stringa in un numero intero. Questo ci porta alla domanda, come facciamo a convertire una stringa in un numero intero?</p><p>In Java, possiamo usare <code>Integer.valueOf()</code> e <code>Integer.parseInt()</code> per convertire una stringa in un numero intero.</p><h2 id="1-usare-integer-parseint-per-convertire-una-stringa-in-un-numero-intero"><strong>1. Usare Integer.parseInt() per convertire una stringa in un numero intero</strong></h2><p>Questo metodo restituisce la stringa come un <strong>tipo primitivo int</strong>. Se la stringa non contiene un numero intero valido allora dà una eccezione <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/NumberFormatException.html">NumberFormatException</a>.</p><p>Quindi, ogni volta che convertiamo una stringa in un numero intero, dobbiamo gestire questa eccezione mettendo il codice dentro un blocco try-catch.</p><p>Consideriamo un esempio di conversione da una stringa ad un numero intero usando <code>Integer.parseInt()</code>:</p><pre><code class="language-java">        String str = "25";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>Cerchiamo di rompere questo codice scrivendo un numero intero non valido:</p><pre><code class="language-java">     	String str = "25T";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number);
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>Come puoi vedere nel codice sopra, abbiamo provato a convertire <code>25T</code> in un numero intero. Questo non è un input valido, quindi dà un errore <code>NumberFormatException</code>.</p><p>Ecco l'output del codice sopra:</p><pre><code class="language-java">java.lang.NumberFormatException: For input string: "25T"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at OOP.StringTest.main(StringTest.java:51)</code></pre><p>Come passo successivo, consideriamo come convertire una stringa in un numero intero, usando il metodo <code>Integer.valueOf()</code> method.</p><h2 id="2-usare-integer-valueof-per-convertire-una-stringa-in-un-numero-intero">2. Usare Integer.valueOf() per convertire una stringa in un numero intero</h2><p>Questo metodo restituisce la stringa come <strong>oggetto numero intero</strong>. Se guardi sulla <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#valueOf(java.lang.String)">documentazione di Java</a>, <code>Integer.valueOf()</code> restituisce un oggetto numero intero che è equivalente a <code>new Integer(Integer.parseInt(s))</code>.</p><p>Metteremo il nostro codice in un blocco try-catch quando usiamo questo metodo. Consideriamo un esempio usando il metodo <code>Integer.valueOf()</code>:</p><pre><code class="language-java">        String str = "25";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>Ora, proviamo a romperlo inserendo un numero intero non valido:</p><pre><code class="language-java">        String str = "25TA";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); 
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>Come l'esempio precedente, il codice sopra darà un errore.</p><p>Ecco l'output del codice sopra:</p><pre><code class="language-java">java.lang.NumberFormatException: For input string: "25TA"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.valueOf(Integer.java:766)
	at OOP.StringTest.main(StringTest.java:42)</code></pre><p>Prima di usare il metodo sopra menzionato, possiamo anche creare un metodo per controllare se la stringa input è numerica o meno.</p><p>Ho creato un semplice metodo per controllare se la stringa inserita è numerica o no:</p><pre><code class="language-java">public class StringTest {
    public static void main(String[] args) {
        String str = "25";
        String str1 = "25.06";
        System.out.println(isNumeric(str));
        System.out.println(isNumeric(str1));
    }

    private static boolean isNumeric(String str){
        return str != null &amp;&amp; str.matches("[0-9.]+");
    }
}</code></pre><p>L'output è:</p><pre><code class="language-java">true
true</code></pre><p>Il metodo <code>isNumeric()</code> prende una stringa come argomento. Prima controlla se è <code>null</code> o meno. Poi usa il metodo <code>matches()</code> per vedere se contiene le cifre da 0 a 9 e il carattere punto.</p><p>Questo è un semplice modo per controllare se è un valore numerico. Puoi scrivere tu stesso o cercare su Google espressioni regolari più complesse a seconda del tuo caso di utilizzo.</p><p>È buona pratica controllare se la stringa input è numerica o no prima di provare a trasformarla in un numero intero.</p><p>Grazie per aver letto quest'articolo.</p><p>Immagine di <a href="https://unsplash.com/@itfeelslikefilm?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">🇸🇮 Janko Ferlič</a> su <a href="https://unsplash.com/collections/139346/soul-care?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p><p><strong>Buona programmazione!</strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Gli operatori rest e spread in JavaScript - Qual è la differenza? ]]>
                </title>
                <description>
                    <![CDATA[ In JavaScript, i tre puntini (...) vengono usati sia per l'operatore rest che per l'operatore spread, ma questi due operatori non sono affatto la stessa cosa. La differrenza principale è che l'operatore rest mette il resto di alcuni valori dati dall'utente in un array JavaScript, mentre l'operatore spread espande gli ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/gli-operatori-rest-e-spread-in-javascript-qual-e-la-differenza/</link>
                <guid isPermaLink="false">6287e5debe0d9a0529438296</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Thu, 23 Jun 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/05/javascript-rest-vs-spread-operators-codesweetly-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/javascript-rest-vs-spread-operators/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Rest vs Spread Operator – What’s the Difference?</a>
      </p><p>In JavaScript, i tre puntini (<code>...</code>) vengono usati sia per l'operatore rest che per l'operatore spread, ma questi due operatori non sono affatto la stessa cosa.</p><p>La differrenza principale è che l'operatore rest mette il resto di alcuni valori dati dall'utente in un array JavaScript, mentre l'operatore spread espande gli iterabili in elementi individuali.</p><p>Per esempio, considera questo codice che fa uso dell'operatore rest per includere dei valori in un array:</p><pre><code class="language-js">// Usa l'operatore rest per includere il resto di certi valori dati dall'utente in un array:
function myBio(firstName, lastName, ...otherInfo) { 
  return otherInfo;
}

// Invoca la funzione myBio passando cinque argomenti ai suoi parametri:
myBio("Oluwatobi", "Sofela", "CodeSweetly", "Web Developer", "Male");

// L'invocazione qui sopra restituirà:
["CodeSweetly", "Web Developer", "Male"]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-t3kcyw?file=script.js">Provalo on StackBlitz</a></strong></p><p>Nel blocco di codice qui sopra, abbiamo usato il parametro rest <code>...otherInfo</code> per mettere <code>"CodeSweetly"</code>, <code>"Web Developer"</code> e <code>"Male"</code> in un array.</p><p>Ora, considera l'esempio con l'operatore spread:</p><pre><code class="language-js">// Definisci una funzione con tre parametri:
function myBio(firstName, lastName, company) { 
  return `${firstName} ${lastName} runs ${company}`;
}

// Usa spread per espandere gli elementi dell'array in argomenti individuali:
myBio(...["Oluwatobi", "Sofela", "CodeSweetly"]);

// L'invocazione qui sopra restituirà:
“Oluwatobi Sofela runs CodeSweetly”</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-ppjslx?file=script.js">Provalo su StackBlitz</a></strong></p><p>In questo blocco di codice, abbiamo usato l'operatore spread (<code>...</code>) per espandere il contenuto dell'array <code>["Oluwatobi", "Sofela", "CodeSweetly"]</code> sui parametri di <code>myBio()</code>. </p><p>Non preoccuparti se non capisci ancora gli operatori rest e spread. Questo articolo è qui per te!</p><p>Nelle prossime sezioni discuteremo come funzionano in JavaScript i parametri rest e spread.</p><p>Quindi, senza cincischiare, iniziamo con l'operatore rest.</p><h2 id="cosa-esattamente-l-operatore-rest">Cosa è esattamente l'operatore rest?</h2><p>L'<strong>operatore rest</strong> è usato per mettere il resto di determinati valori inseriti dall'utente in un array JavaScript.</p><p>Ecco la sintassi dell'operatore rest:</p><pre><code class="language-js">...yourValues</code></pre><p>I tre puntini (<code>...</code>) in questa riga di codice simbolizzano l'operatore rest.</p><p>Il testo dopo l'operatore si riferisce ai valori che vuoi mettere nell'array. Puoi usarlo solo prima dell'ultimo parametro nella definizione di una funzione. </p><p>Per capire la sintassi, vediamo come funziona l'operatore rest con le funzioni JavaScript.</p><h3 id="come-agisce-l-operatore-rest-in-una-funzione">Come agisce l'operatore rest in una funzione?</h3><p>Nelle funzioni JavaScript, l'operatore rest viene usato come prefisso dell'ultimo parametro della funzione.</p><p><strong>Ecco un esempio:</strong></p><pre><code class="language-js">// Definisci una funzione con due parametri regolari e un parametro rest:
function myBio(firstName, lastName, ...otherInfo) { 
  return otherInfo;
}</code></pre><p>L'operatore rest (<code>...</code>) dà istruzione al computer di aggiungere qualsiasi argomento <code>otherInfo</code> dato dall'utente dentro un array e assegna l'array al parametro <code>otherInfo</code>.</p><p>Quindi definiamo<code>...otherInfo</code> un parametro rest.</p><p><strong>Note:</strong> gli <a href="https://www.codesweetly.com/javascript-arguments">argomenti</a> sono valori opzionali che puoi passare ai parametri tramite un'invocazione.</p><p><strong>Ecco un altro esempio:</strong></p><pre><code class="language-js">// Definisci una funzione con due parametri regolari e un parametro rest:
function myBio(firstName, lastName, ...otherInfo) { 
  return otherInfo;
}

// Invoca la funzione myBio passando cinque argomenti ai suoi parametri:
myBio("Oluwatobi", "Sofela", "CodeSweetly", "Web Developer", "Male");

// L'invocazione qui sopra restituirà:
["CodeSweetly", "Web Developer", "Male"]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-t3kcyw?file=script.js">Provalo su StackBlitz</a></strong></p><p>Nello snippet che hai appena visto, nota che l'invocazione passa cinque argomenti alla funzione.</p><p>In altre parole, <code>"Oluwatobi"</code> e <code>"Sofela"</code> vengono assegnati ai parametri <code>firstName</code> e <code>lastName</code>.</p><p>Allo stesso tempo, l'operatore rest aggiunge gli argomenti rimanenti (<code>"CodeSweetly"</code>, <code>"Web Developer"</code>, e <code>"Male"</code>) in un array assegnato al parametro <code>otherInfo</code>.</p><p>Quindi, la funzione <code>myBio()</code> restituisce correttamente <code>["CoreSweetly", "Web Developer", "Male"]</code> come contenuto del parametro rest <code>otherInfo</code>.</p><h3 id="attenzione-non-puoi-usare-use-strict-in-una-funzione-che-contiene-un-parametro-rest">Attenzione! Non puoi usare <code>"use strict"</code> in una funzione che contiene un parametro rest</h3><p>Tieni a mente che <em>non puoi</em> usare la direttiva <code>"use strict"</code> dentro una funzione che contiene un parametro rest, parametri di default o <a href="https://www.codesweetly.com/destructuring-object#how-to-use-a-destructuring-object-to-copy-values-from-properties-to-a-functions-parameters">parametri destrutturati</a>, altrimenti, il computer darà un <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params">errore di sintassi</a>.</p><p>Considera questo esempio:</p><pre><code class="language-js">// Definisci una funzione con un parametro rest:
function printMyName(...value) {
  "use strict";
  return value;
}

// La definizione qui sopra restituirà:
"Uncaught SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list"</code></pre><p><a href="https://codesandbox.io/s/you-cannot-use-use-strict-inside-a-function-containing-a-spread-parameter-cvis3"><strong>Provalo su CodeSandbox</strong></a></p><p>La funzione <code>printMyName()</code> restituisce un errore di sintassi perché abbiamo usato la direttiva <code>"use strict"</code> dentro una funzione con un parametro rest.</p><p>Ma supponi di aver bisogno che la tua funzione sia in strict mode e allo stesso tempo usi il parametro rest. In un caso come questo, puoi scrivere la direttiva <code>"use strict"</code> al di fuori della funzione.</p><p><strong>Ecco un esempio:</strong></p><pre><code class="language-js">// Definisci la direttiva "use strict" al di fuori della funzione:
"use strict";

// Definisci una funzione con un parametro rest:
function printMyName(...value) {
  return value;
}

// Invoca la funzione printMyName passando due argomenti alla funzione:
printMyName("Oluwatobi", "Sofela");

// L'invocazione qui sopra restituirà:
["Oluwatobi", "Sofela"]</code></pre><p><strong><a href="https://codesandbox.io/s/you-can-use-use-strict-outside-a-function-containing-a-spread-parameter-spbmh">Provalo su CodeSandbox</a></strong></p><p><strong>Nota:</strong> metti la direttiva <code>"use strict"</code> al di fuori della funzione solo se va bene che tutto lo script o l'<a href="https://www.codesweetly.com/javascript-lexical-scope">ambito esterno</a> sia in strict mode.</p><p>Quindi adesso che sappiamo come agisce l'operatore rest in una funzione, possiamo parlare di come funziona in una <a href="https://www.codesweetly.com/destructuring-array">assegnazione con destrutturazione</a>.</p><h3 id="come-funziona-l-operatore-rest-in-una-assegnazione-con-destrutturazione">Come funziona l'operatore rest in una assegnazione con destrutturazione</h3><p>L'operatore rest viene usato tipicamente come prefisso dell'ultima variabile dell'assegnazione con destrutturazione.</p><p><strong>Ecco un esempio:</strong></p><pre><code class="language-js">// Definisci un array di destrutturazione con due variabili normali e una variabile rest:
const [firstName, lastName, ...otherInfo] = [
  "Oluwatobi", "Sofela", "CodeSweetly", "Web Developer", "Male"
];

// Invoca la variabile otherInfo:
console.log(otherInfo); 

// L'invocazione qui sopra restituisce:
["CodeSweetly", "Web Developer", "Male"]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-tckdt8?file=script.js">Provalo su StackBlitz</a></strong></p><p>L'operatore rest (<code>...</code>) dà istruzione al computer di aggiungere i valori rimanenti tra quelli assegnati dall'utente dentro un array. Poi, assegna l'array alla variabile <code>otherInfo</code>.</p><p>Quindi, possiamo chiamare <code>...otherInfo</code> una variabile rest.</p><p><strong>Ecco un altro esempio:</strong></p><pre><code class="language-js">// Definisci un oggetto di destrutturazione con due variabili regolari e una variabile rest:
const { firstName, lastName, ...otherInfo } = {
  firstName: "Oluwatobi",
  lastName: "Sofela", 
  companyName: "CodeSweetly",
  profession: "Web Developer",
  gender: "Male"
}

// Invoca la variabile otherInfo:
console.log(otherInfo);

// L'invocazione qui sopra restituisce:
{companyName: "CodeSweetly", profession: "Web Developer", gender: "Male"}</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-fmr3dr?file=script.js">Provalo su StackBlitz</a></strong></p><p>Nel blocco di codice che hai appena visto, puoi notare che l'operatore rest assegna le proprietà di un oggetto, non un array, alla variabile <code>otherInfo</code>.</p><p>In altre parole, ogni volta che usi un oggetto di destrutturazione, l'operatore rest produce un oggetto con proprietà.</p><p>Invece, se usi rest in un <a href="https://www.codesweetly.com/destructuring-array">array di destrutturazione</a> o in una funzione, l'operatore restituisce un array letterale.</p><p>Prima di concludere la nostra discussione sull'operatore rest, dovresti essere a conoscenza di alcune differenze tra l'oggetto <code>arguments</code> e il parametro rest. </p><h3 id="qual-la-differenza-tra-argomenti-e-parametri-rest">Qual è la differenza tra argomenti e parametri rest?</h3><p>Ecco alcune delle differenze tra gli argomenti e il parametro rest:</p><h4 id="differenza-1-arguments-un-oggetto-simil-array-non-un-vero-array">Differenza 1: <code>arguments</code> è un oggetto simil-array, non un vero array</h4><p>Tieni a mente che in JavaScript l'oggetto <code>arguments</code> non è un vero array. Invece è un oggetto simil-array che non ha tutte le funzionalità di un normale array JavaScript.</p><p>Il parametro rest, invece, è un vero oggetto array e puoi usare tutti i metodi degli array su di esso.</p><p>Quindi, puoi usare i metodi <code>sort()</code>, <code>map()</code>, <code>forEach()</code> o <code>pop()</code> su un parametro rest, ma non puoi fare lo stesso su un oggetto <code>arguments</code>.</p><h4 id="differenza-2-non-puoi-usare-l-oggetto-arguments-in-una-funzione-freccia">Differenza 2: Non puoi usare l'oggetto <code>arguments</code> in una funzione freccia</h4><p>L'oggetto <code>arguments</code> non è disponibile in una funzione freccia, quindi non puoi usarlo al suo interno, ma puoi usare il parametro rest in tutte le funzioni, incluse le funzioni freccia.</p><p>È meglio usare il parametro rest invece dell'oggetto <code>arguments</code> - specialmente quando scrivi codice compatibile con ES6.</p><p>Ora che sappiamo come funziona rest, parliamo dell'operatore <code>spread</code> così da vedere le differenze.</p><h2 id="cosa-l-operatore-spread-e-come-funziona-in-javascript">Cosa è l'operatore spread e come funziona in JavaScript?</h2><p>L'<strong>operatore spread</strong> (<code>...</code>) &nbsp;aiuta a espandere gli iterabili in elementi singoli.</p><p>La sintassi spread funziona dentro array letterali, invocazioni di funzioni e oggetti di proprietà inizializzati per spalmare i valori di <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Iterables">oggetti iterabili</a> in elementi separati. In pratica, fa l'opposto dell'operatore spread.</p><p><strong>Nota:</strong> un operatore spread è efficace solo se usato dentro array letterali, invocazioni di funzioni o oggetti di proprietà inizializzati.</p><p>Cosa significa esattamente? Vediamolo con degli esempi.</p><h3 id="esempio-1-come-funziona-spread-in-un-array-letterale">Esempio 1: Come funziona spread in un array letterale</h3><pre><code class="language-js">const myName = ["Sofela", "is", "my"];
const aboutMe = ["Oluwatobi", ...myName, "name."];

console.log(aboutMe);

// L'invocazione qui sopra restituisce:
[ "Oluwatobi", "Sofela", "is", "my", "name." ]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-rd1npd?file=script.js">Provalo su StackBlitz</a></strong></p><p>Lo snippet di codice qui sopra usa l'operatore spread per copiare l'array <code>myName</code> dentro <code>aboutMe</code>.</p><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>Alterazioni di <code>myName</code> non si rifletteranno su <code>aboutMe</code> perché i valori dentro <code>myName</code> sono primitivi. Quindi, l'operatore spread semplicemente copia e incolla il contenuto di <code>myName</code> dentro <code>aboutMe</code> senza creare nessun riferimento all'array originale.</li><li>L'operatore spread fa solo copie superficiali. Quindi tieni a mente che se supponiamo che <code>myName</code> contenga valori non primitivi, il computer creerebbe un riferimento tra <code>myName</code> e <code>aboutMe</code>. Vedi <a href="#info-3-attenzione-a-come-funziona-spread-quando-usato-su-oggetti-che-contengono-non-primitivi-">info 3</a> per più informazioni su come funziona l'operatore spread con i valori primitivi e non primitivi.</li><li>Supponi che non abbiamo usato la sintassi spread per duplicare il contenuto di <code>myName</code>. Per esempio, se avessimo scritto <code>const aboutMe = ["Oluwatobi", myName, "name."]</code>. In un caso come questo, il computer assegnerebbe un riferimento a <code>myName</code>. Quindi, qualsiasi cambiamento fatto all'array originale si riflette nel duplicato.</li></ul><h3 id="esempio-2-come-usare-spread-per-convertire-una-stringa-in-elementi-individuali-di-un-array">Esempio 2: Come usare spread per convertire una stringa in elementi individuali di un array</h3><pre><code class="language-js">const myName = "Oluwatobi Sofela";

console.log([...myName]);

// L'invocazione qui sopra restituisce:
[ "O", "l", "u", "w", "a", "t", "o", "b", "i", " ", "S", "o", "f", "e", "l", "a" ]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-axvtye?file=script.js">Provalo su StackBlitz</a></strong></p><p>Nello snippet qui sopra, abbiamo usato la sintassi spread dentro un array letterale per espandere la stringa <code>myName</code> in elementi individuali.</p><p>Quindi, <code>"Oluwatobi Sofela"</code> è stato espanso in <code>[ "O", "l", "u", "w", "a", "t", "o", "b", "i", " ", "S", "o", "f", "e", "l", "a" ]</code>.</p><h3 id="esempio-3-come-funziona-l-operatore-spread-in-una-invocazione-di-funzione">Esempio 3: come funziona l'operatore spread in una invocazione di funzione</h3><pre><code class="language-js">const numbers = [1, 3, 5, 7];

function addNumbers(a, b, c, d) {
  return a + b + c + d;
}

console.log(addNumbers(...numbers));

// L'invocazione restituisce:
16</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-nrn8f3?file=script.js">Provalo su StackBlitz</a></strong></p><p>Abbiamo usato la sintassi spread per espandere l'array <code>numbers</code> sui parametri di <code>addNumbers()</code>.</p><p>Supponi che l'array <code>numbers</code> abbia più di quattro elementi. In un caso come questo, il computer usa solo i primi quattro elementi come argomento di <code>addNumbers()</code> e ignora il resto.</p><p><strong>Ecco un esempio:</strong></p><pre><code class="language-js">const numbers = [1, 3, 5, 7, 10, 200, 90, 59];

function addNumbers(a, b, c, d) {
  return a + b + c + d;
}

console.log(addNumbers(...numbers));

// L'invocazione restituisce:
16</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-ef3ncm?file=script.js">Provalo su StackBlitz</a></strong></p><p><strong>Ecco un altro esempio:</strong></p><pre><code class="language-js">const myName = "Oluwatobi Sofela";

function spellName(a, b, c) {
  return a + b + c;
}

console.log(spellName(...myName));      // restituisce: "Olu"

console.log(spellName(...myName[3]));   // restituisce: "wundefinedundefined"

console.log(spellName([...myName]));    // restituisce: "O,l,u,w,a,t,o,b,i, ,S,o,f,e,l,aundefinedundefined"

console.log(spellName({...myName}));    // restituisce: "[object Object]undefinedundefined"</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-pkrxjd?file=script.js">Provalo su StackBlitz</a></strong></p><h3 id="esempio-4-come-funziona-spread-in-un-oggetto-letterale"><strong>E</strong>sempio 4: come funziona spread in un oggetto letterale</h3><pre><code class="language-js">const myNames = ["Oluwatobi", "Sofela"];
const bio = { ...myNames, runs: "codesweetly.com" };

console.log(bio);

// L'invocazione restituisce:
{ 0: "Oluwatobi", 1: "Sofela", runs: "codesweetly.com" }</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-qnmxsu?file=script.js">Provalo su StackBlitz</a></strong></p><p>In questo esempio, abbiamo usato spread dentro l'oggetto <code>bio</code> per espandere i valori di <code>myNames</code> in proprietà individuali.</p><h3 id="cose-da-sapere-sull-operatore-spread">Cose da sapere sull'operatore spread</h3><p>Tieni a mente queste tre essenziali informazioni quando scegli di usare l'operatore spread.</p><h4 id="info-1-l-operatore-spread-non-pu-espandere-i-valori-letterali-di-un-oggetto">Info 1: L'operatore spread non può espandere i valori letterali di un oggetto</h4><p>Visto che un oggetto di proprietà non è un oggetto iterabile, non puoi usare l'operatore spread per espandere i suoi valori.</p><p>Però puoi usare l'operatore spread per clonare le proprietà da un oggetto a un altro.</p><p><strong>Ecco un esempio:</strong></p><pre><code class="language-js">const myName = { firstName: "Oluwatobi", lastName: "Sofela" };
const bio = { ...myName, website: "codesweetly.com" };

console.log(bio);

// L'invocazione restituisce
{ firstName: "Oluwatobi", lastName: "Sofela", website: "codesweetly.com" };</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-psnsa8?file=script.js">Provalo su Stack</a></strong></p><p>Il codice che hai appena letto fa uso dell'operatore spread per clonare il contenuto di <code>myName</code> dentro l'oggetto <code>bio</code>.</p><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>L'operatore spread può espandere solo i valori di oggetti iterabili.</li><li>Un oggetto è iterabile sono se ha (o qualsiasi oggetto nella sua catena prototype ha) una proprietà con una chiave <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">@@iterator</a>.</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator">Array</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator">TypedArray</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/@@iterator">String</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/@@iterator">Map</a>, e <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/@@iterator">Set</a> sono tipi iterabili integrati perché hanno la proprietà <code>@@iterator</code> di default.</li><li>Un oggetto di proprietà non è un tipo di dato iterabile perché non ha la proprietà <code>@@iterator</code> di default.</li><li>Puoi <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator#user-defined_iterables">rendere un oggetto di proprietà iterabile</a> aggiungendogli la proprietà <code>@@iterator</code>.</li></ul><h4 id="info-2-l-operatore-spread-non-clona-propriet-identiche">Info 2: L'operatore spread non clona proprietà identiche</h4><p>Supponi di avere usato l'operatore spread per clonare le proprietà dall'oggetto A all'oggetto B. E supponi che B contenga proprietà identiche a quelle nell'oggetto A. In tal caso, la versione di B ha precedenza su quella di A.</p><p><strong>Ecco un esempio:</strong></p><pre><code class="language-js">const myName = { firstName: "Tobi", lastName: "Sofela" };
const bio = { ...myName, firstName: "Oluwatobi", website: "codesweetly.com" };

console.log(bio);

// L'invocazione restituisce:
{ firstName: "Oluwatobi", lastName: "Sofela", website: "codesweetly.com" };</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-gjhjue?file=script.js">Provalo su StackBlitz</a></strong></p><p>Osserva che l'operatore spread non ha copiato la proprietà <code>firstName</code> da <code>myName</code> dentro l'oggetto <code>bio</code> perché <code>bio</code> già contiene una proprietà <code>firstName</code>.</p><h4 id="info-3-attenzione-a-come-funziona-spread-quando-usato-su-oggetti-che-contengono-valori-non-primitivi-">Info 3: attenzione a come funziona spread quando usato su oggetti che contengono valori non primitivi!</h4><p>Supponi che hai usato l'operatore spread su un oggetto (o array) contenente solo valori primitivi. Il computer non creerà nessun riferimento tra l'oggetto originale e quello duplicato.</p><p>Per esempio, considera questo codice:</p><pre><code class="language-js">const myName = ["Sofela", "is", "my"];
const aboutMe = ["Oluwatobi", ...myName, "name."];

console.log(aboutMe);

// L'invocazione restituisce:
["Oluwatobi", "Sofela", "is", "my", "name."]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-rd1npd?file=script.js">Provalo su StackBlitz</a></strong></p><p>Osserva che ogni elemento in <code>myName</code> è un valore primitivo. Quindi, quando usiamo l'operatore spread per clonare <code>myName</code> in <code>aboutMe</code>, il computer non ha creato un riferimento tra questi due array.</p><p>Qualsiasi modifica fai a <code>myName</code> non si riflette su <code>aboutMe</code> e vice versa.</p><p>Come esempio, aggiungiamo un elemento in più a <code>myName</code>:</p><pre><code class="language-js">myName.push("real");</code></pre><p>Ora, controlliamo lo stato corrente di <code>myName</code> e <code>aboutMe</code>.</p><pre><code class="language-js">console.log(myName); // ["Sofela", "is", "my", "real"]

console.log(aboutMe); // ["Oluwatobi", "Sofela", "is", "my", "name."]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-ujs6ny?file=script.js">Provalo su StackBlitz</a></strong></p><p>Il contenuto aggiornato di <code>myName</code> non è rispecchiato in <code>aboutMe</code>, perché spread non ha creato nessun riferimento tra l'array originale e quello duplicato.</p><h5 id="cosa-succede-se-myname-contiene-elementi-non-primitivi">Cosa succede se <code>myName</code> contiene elementi non primitivi?</h5><p>Supponi che <code>myName</code> contenga elementi non primitivi. In tal caso, spread crea un riferimento tra l'originale non primitivo e quello clonato.</p><p><strong>Ecco un esempio:</strong></p><pre><code class="language-js">const myName = [["Sofela", "is", "my"]];
const aboutMe = ["Oluwatobi", ...myName, "name."];

console.log(aboutMe);

// L'invocazione restituisce:
[ "Oluwatobi", ["Sofela", "is", "my"], "name." ]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-ombp5w?file=script.js">Provalo su StackBlitz</a></strong></p><p>Osserva che <code>myName</code> contiene un valore non primitivo.</p><p>Quindi, usare l'operatore spread per clonare il contenuto di <code>myName</code> in <code>aboutMe</code> fa sì che il computer crei un riferimento tra i due array.</p><p>Qualsiasi alterazione che fai alla copia di <code>myName</code> si rifletterà sulla versione di <code>aboutMe</code> e viceversa.</p><p>Come esempio, aggiungiamo contenuto ulteriore a <code>myName</code>:</p><pre><code class="language-js">myName[0].push("real");</code></pre><p>Ora, controlliamo lo stato attuale di <code>myName</code> e di <code>aboutMe</code>:</p><pre><code class="language-js">console.log(myName); // [["Sofela", "is", "my", "real"]]

console.log(aboutMe); // ["Oluwatobi", ["Sofela", "is", "my", "real"], "name."]</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-qpyy8n?file=script.js">Provalo su StackBlitz</a></strong></p><p>Il contenuto aggiornato di <code>myName</code> si riflette in <code>aboutMe</code>, perché l'operatore spread ha creato un riferimento tra l'array originale e quello duplicato.</p><p><strong>Ecco un altro esempio:</strong></p><pre><code class="language-js">const myName = { firstName: "Oluwatobi", lastName: "Sofela" };
const bio = { ...myName };

myName.firstName = "Tobi";

console.log(myName); // { firstName: "Tobi", lastName: "Sofela" }

console.log(bio); // { firstName: "Oluwatobi", lastName: "Sofela" }</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-tbmtgm?file=script.js">Provalo su StackBlitz</a></strong></p><p>In quest'esempio, l'aggiornamento di <code>myName</code> non si è riflettuto in <code>bio</code> perché abbiamo usato l'operatore spread su un oggetto che contiene solo valori primitivi.</p><p><strong>Nota:</strong> Uno sviluppatore direbbe che <code>myName</code> è un oggetto mono-dimensionale perché contiene solo elementi primitivi.</p><p><strong>Ecco un altro esempio:</strong></p><pre><code class="language-js">const myName = { 
  fullName: { firstName: "Oluwatobi", lastName: "Sofela" }
};

const bio = { ...myName };

myName.fullName.firstName = "Tobi";

console.log(myName); // { fullName: { firstName: "Tobi", lastName: "Sofela" } }

console.log(bio); // { fullName: { firstName: "Tobi", lastName: "Sofela" } }</code></pre><p><strong><a href="https://stackblitz.com/edit/web-platform-9uce9g?file=script.js">Provalo su StackBlitz</a></strong></p><p>In questo caso, l'aggiornamento di <code>myName</code> si riflette in <code>bio</code> perché usiamo l'operatore spread su un oggetto che contiene un valore non primitivo.</p><p><strong><strong>Note:</strong></strong></p><ul><li>Chiamiamo <code>myName</code> <strong>oggetto profondo</strong> perché contiene elementi non primitivi.</li><li>Quando cloni un oggetto in un altro, fai una <strong>copia superficiale</strong>. Per esempio, <code>...myName</code> produce una copia superficiale dell'oggetto perché qualsiasi alterazione di un oggetto si riflette sull'altro.</li><li>Quando cloni oggetti senza creare riferimenti, fai un <strong>copia profonda</strong> . Ad esempio, potrei copiare <code>myName</code> in <code>bio</code> facendo <code>const bio = JSON.parse(JSON.stringify(myName))</code>. In questo modo, il computer clonerà <code>myName</code> in <code>bio</code> senza creare riferimenti.</li><li>Puoi interrompere il riferimento tra due oggetti sostituendo l'oggetto <code>fullName</code> all'interno di <code>myName</code> o <code>bio</code> con un nuovo oggetto. Ad esempio, con <code>myName.fullName = { firstName: "Tobi", lastName: "Sofela" }</code> interromperai il pointer tra <code>myName</code> e <code>bio</code>.</li></ul><h2 id="per-concludere"><strong>Per concludere</strong></h2><p>In quest'articolo, abbiamo parlato delle differenze tra gli operatori rest e spread, e grazie a degli esempi abbiamo visto come funzionano entrambi.</p><p>Grazie per aver letto quest'articolo!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ VS Code Live Server – Come aggiornare automaticamente il tuo browser con questa semplice estensione ]]>
                </title>
                <description>
                    <![CDATA[ Visual Studio Code è uno degli editor di codice più popolari esistenti. È gratuito, ha un'interfaccia pulita e ha innumerevoli estensioni che rendono programmare più facile e più divertente. Sono uno sviluppatore frontend e uso VS Code mentre lavoro sul mio canale YouTube. In molti mi hanno chiesto qual è ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/vs-code-live-server-come-aggiornare-automaticamente-il-tuo-browser-con-questa-semplice-estensione/</link>
                <guid isPermaLink="false">6298f5b6203d0c06f2188180</guid>
                
                    <category>
                        <![CDATA[ VSCode ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Wed, 22 Jun 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/vscode.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/vscode-live-server-auto-refresh-browser/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">VS Code Live Server – How to Auto-Refresh Your Browser with this Simple Extension</a>
      </p><p>Visual Studio Code è uno degli editor di codice più popolari esistenti. È gratuito, ha un'interfaccia pulita e ha innumerevoli estensioni che rendono programmare più facile e più divertente.</p><p>Sono uno sviluppatore frontend e uso VS Code mentre lavoro sul mio canale YouTube. In molti mi hanno chiesto qual è il modo per far sì che il browser si aggiorni automaticamente mentre programmo, senza usare il pulsante per ricaricare la pagina.</p><p>Beh, è possibile se configuri un'utile estensione in VS Code chiamata live-server. In questo post, ti spiegherò nel dettaglio come funziona e come impostare e configurare un live server in VS Code.</p><h2 id="perch-dovrei-usare-l-estensione-live-server">Perché dovrei usare l'estensione live-server?</h2><p>Di solito, quando fai un cambiamento nel tuo codice o scrivi qualcosa di nuovo, hai bisogno di ricaricare la pagina manualmente per vedere i cambiamenti.</p><p>In altre parole, se fai 100 modifiche al tuo codice ogni giorno, devi ricaricare la pagina 100 volte.</p><p>The live-server extension, however, automates this for you. After installing it, an automated localhost will be able to run in your browser, which you can start with a single button.</p><p>L'estensione live-server invece, automatizza questa operazione per te. Dopo averla installata, un localhost automatizzato verrà eseguito nel tuo browser, grazie a un singolo pulsante.</p><p>Una volta che apporti dei cambiamenti nel tuo codice o scrivi qualcosa di nuovo, dopo aver salvato, il browser ricaricherà la pagina automaticamente. Così potrai vedere i cambiamenti velocemente e automaticamente.</p><p>Se preferisci, puoi vedere il video tutorial qui sotto:</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/jdWlGQdq1Q0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded content" 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><h2 id="installa-vs-code">Installa VS Code</h2><p>Puoi saltare questa parte se hai già installato VS Code sul tuo computer. Altrimenti, puoi scaricarlo dal <a href="https://code.visualstudio.com/">sito ufficiale</a>.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/10/1-3.png" class="kg-image" alt="1-3" width="600" height="400" loading="lazy"><figcaption>Visual Studio Code Official Website</figcaption></figure><p>Dopo che hai scaricato e installato VS Code, vedrai la schermata di benvenuto:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/10/2-3.png" class="kg-image" alt="2-3" width="600" height="400" loading="lazy"></figure><p>Sul lato sinistro, dovresti vedere alcune icone. Una di quelle (sotto l'icona "no bugs") è il pulsante estensioni:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/10/2-4.png" class="kg-image" alt="2-4" width="600" height="400" loading="lazy"></figure><p>Dopo averlo premuto, apparirà una barra di ricerca. Digita semplicemente "live server".</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/10/3-2.png" class="kg-image" alt="3-2" width="600" height="400" loading="lazy"></figure><p>Vedrai molte opzioni, così da poter scegliere quella che funziona per il tuo sistema. Io uso Live Server di Ritwick Dey, quindi continuiamo con quella in questo esempio:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/10/4-2.png" class="kg-image" alt="4-2" width="600" height="400" loading="lazy"></figure><p>Clicca sul pulsante "Install" per installare l'estensione.</p><h2 id="crea-una-nuova-pagina-html">Crea una nuova pagina HTML</h2><p>Per iniziare il live server, assicurati di aver creato almeno una pagina HTML. Per fare ciò, clicca sul pulsare file in cima, poi scegli il pulsante nuovo file e digita index.html:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/10/6-2.png" class="kg-image" alt="6-2" width="600" height="400" loading="lazy"><figcaption>Icona nuovo file con il segno più (seconda da sinistra)</figcaption></figure><h3 id="problemi-di-configurazione">Problemi di configurazione</h3><p>Dopo aver creato la pagina HTML e installato l'estensione dovresti vedere un'icona "Go Live" in basso nel campo blu:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/10/5-2.png" class="kg-image" alt="5-2" width="600" height="400" loading="lazy"></figure><p>Se non la vedi, riavvia VS Code. Poi dovrebbe funzionare.</p><p>Clicca sul pulsante "Go Live" e il localhost (assegnato a un numero di porta) dovrebbe partire sul tuo browser. Puoi far partire e fermare il live server in ogni momento premendo sullo stesso pulsante.</p><p>Se hai raggiunto questo step, congratulazioni! :) Ora puoi lavorare con il live-server. Altrimenti, se stai ancora avendo problemi, guarda <a href="https://www.freecodecamp.org/italian/news/live-server-di-visual-studio-code-non-funzionante-2/">questo post per maggiori informazioni</a>.</p><p>Grazie per aver letto quest'articolo! Spero che ti aiuti a installare e configurare l'estensione live server in VS Code.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ L'operatore ternario in C ]]>
                </title>
                <description>
                    <![CDATA[ I programmatori usano l'operatore ternario per prendere decisioni al posto delle più lunghe espressioni condizionali if ed else. L'operatore ternario accetta tre argomenti:  1. Il primo è l'argomento di comparazione  2. Il secondo è il risultato per una comparazione vera  3. Il terzo è il risultato per ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/operatore-ternario-in-c/</link>
                <guid isPermaLink="false">62a6f781a3647806dd4ed55c</guid>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Wed, 15 Jun 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/5f9c9db2740569d1a4ca3922.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/c-ternary-operator/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Ternary Operator in C Explained</a>
      </p><p>I programmatori usano l'<strong>operatore ternario</strong> per prendere decisioni al posto delle più lunghe espressioni condizionali <strong>if</strong> ed <strong>else</strong>.</p><p>L'operatore ternario accetta tre argomenti:</p><ol><li>Il primo è l'argomento di comparazione</li><li>Il secondo è il risultato per una comparazione vera</li><li>Il terzo è il risultato per una comparazione falsa</li></ol><p>Potresti pensare all'operatore ternario come a un modo breve per scrivere una espressione if-else. Ecco un piccolo esempio decisionale usando <strong>if</strong> e <strong>else</strong>:</p><pre><code class="language-c">int a = 10, b = 20, c;

if (a &lt; b) {
    c = a;
}
else {
    c = b;
}

printf("%d", c);</code></pre><p>Questo esempio occupa più di 10 righe, ma non è necessario che sia così lungo. Puoi scrivere questo programmino in tre righe di codice usando un operatore ternario.</p><h3 id="sintassi">Sintassi</h3><pre><code class="language-C">condizione ? valore_se_vero : valore_se_falso</code></pre><p>L'espressione diventa <code>valore_se_vero</code> se <code>condizione</code> è vera, e <code>valore_se_falso</code> altrimenti.</p><p>Ecco l'esempio sopra riscritto usando l'operatore ternario:</p><pre><code class="language-c">int a = 10, b = 20, c;

c = (a &lt; b) ? a : b;

printf("%d", c);</code></pre><p>L'output dell'esempio sarà:</p><pre><code class="language-c">10</code></pre><p><code>c</code> prende il valore di <code>a</code>, perché la condizione <code>a &lt; b</code> è vera.</p><p>Ricorda che gli argomenti <code>valore_se_vero</code> e <code>valore_se_falso</code> devono essere dello stesso tipo e possono essere solo espressioni semplici.</p><p>Gli operatori ternari possono essere annidati proprio come le espressioni if-else. Considera il seguente codice:</p><pre><code class="language-c">int a = 1, b = 2, ans;
if (a == 1) {
    if (b == 2) {
        ans = 3;
    } else {
        ans = 5;
    }
} else {
    ans = 0;
}
printf ("%d\n", ans);</code></pre><p>Ecco il codice sopra riscritto usando un operatore ternario annidato:</p><pre><code class="language-c">int a = 1, b = 2, ans;
ans = (a == 1 ? (b == 2 ? 3 : 5) : 0);
printf ("%d\n", ans);</code></pre><p>L'output di entrambi i codici qui sopra è:</p><pre><code class="language-c">3</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Live Server di Visual Studio Code  non funzionante ]]>
                </title>
                <description>
                    <![CDATA[ VSCode ha un sacco di ottime estensioni e Live Server [https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer] è una delle migliori. Con appena un paio di click, Live Server ti permette di vedere la tua pagina live in un browser vero e proprio. Meglio ancora, ricarica automaticamente la pagina quando aggiorni il tuo codice, così i ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/live-server-di-visual-studio-code-non-funzionante-2/</link>
                <guid isPermaLink="false">62a31570203d0c06f2188fb1</guid>
                
                    <category>
                        <![CDATA[ VISUAL STUDIO CODE ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Tue, 14 Jun 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/vsc.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/visual-studio-code-live-server-not-working/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Visual Studio Code Live Server Not Working</a>
      </p><p>VSCode ha un sacco di ottime estensioni e <a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer">Live Server</a> è una delle migliori.</p><p>Con appena un paio di click, Live Server ti permette di vedere la tua pagina live in un browser vero e proprio. Meglio ancora, ricarica automaticamente la pagina quando aggiorni il tuo codice, così i cambiamenti sono visibili subito sul browser.</p><p>Tutto quello che devi fare è fare clic col tasto destro nel file HTML che vuoi vedere, quindi selezionare "Apri in Live Server":</p><p>E se il Live Server non si apre nel browser e non mostra la pagina come ti aspetti? Se stai avendo questo problema, ecco alcune cose che puoi provare.</p><h2 id="riavvia-vscode">Riavvia VSCode</h2><p>A volte la cosa migliore che puoi fare è riaprire VSCode da zero.</p><p>Prima di tutto, salva tutto il tuo lavoro. Poi chiudi VSCode, fermando così anche tutte le estensioni che hai installato.</p><p>Poi riapri VSCode e prova di nuovo, vai al file HTML che vuoi vedere, clicca col pulsante destro e seleziona "Apri in Live Server".</p><h2 id="imposta-il-browser-per-il-live-server">Imposta il browser per il Live Server</h2><p>È possibile che l'estensione funzioni, ma che il tuo sistema non abbia un browser di default.</p><p>Anche se hai impostato un browser di default per il tuo sistema, non può far male dire al Live Server quale browser vuoi usare in maniera esplicita.</p><p>Come prima cosa, apri la Command Pallete con F1, poi digita <code>Preferences: Open Settings (JSON)</code> e seleziona questa opzione.</p><p>Questo aprirà il file di impostazioni <code>settings.json</code> di VSCode.</p><p>Scorri alla fine del file, aggiungi una virgola dopo l'ultima impostazione e incolla <code>"liveServer.settings.CustomBrowser": "chrome"</code>:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/09/settings-json.gif" class="kg-image" alt="settings-json" width="600" height="400" loading="lazy"></figure><p>Nota che puoi anche usare <code>"firefox"</code>, <code>"safari"</code> o qualsiasi altro browser come valore per l'impostazione <code>"liveServer.settings.CustomBrowser"</code>.</p><p>Infine, salva il file <code>settings.json</code> e prova di nuovo a eseguire Live Server.</p><h2 id="imposta-il-browser-di-default-per-il-sistema-operativo">Imposta il browser di default per il sistema operativo</h2><p>Anche dopo aver detto al Live Server quale browser vuoi usare, è possibile che non stia comunque aprendo la pagina nel browser correttamente.</p><p>La prossima cosa da fare è impostare il browser di default del sistema operativo stesso.</p><p>Il metodo esatto per farlo può variare in base al tuo sistema operativo, quindi è meglio fare una ricerca per scoprire come farlo se non ne sei sicuro.</p><p>Ecco come appare la pagina delle impostazioni in Windows:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/image-56.png" class="kg-image" alt="image-56" width="600" height="400" loading="lazy"><figcaption>Credit: <a href="https://forum.freecodecamp.org/u/Advitya-sharma" 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;">Advitya-sharma</a></figcaption></figure><h2 id="vai-alla-pagina-live-manualmente">Vai alla pagina live manualmente</h2><p>Se per qualche ragione il Live Server non sta ancora aprendo la pagina nel browser automaticamente, non preoccuparti. Puoi sempre aprire il browser di tua scelta e vedere la pagina direttamente.</p><p>Apri il tuo browser preferito e vai a <code>http://127.0.0.1:5500/&lt;your_file_name&gt;</code>.</p><p>Per esempio, se il tuo file si chiama <code>index.html</code>, vai a <code>http://127.0.0.1:5500/index.html</code>.</p><p>Se il Live Server è in esecuzione, dovresti vedere la pagina.</p><h2 id="per-concludere"><strong>Per concludere</strong></h2><p>Queste sono alcune delle cose che puoi provare se il Live Server non sta funzionando nel modo in cui ti aspetti.</p><p>Buona programmazione!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come impostare un'immagine di sfondo in React usando il CSS in linea ]]>
                </title>
                <description>
                    <![CDATA[ Ci sono quattro modi per impostare una proprietà di stile backgroundImage usando il CSS in linea in React. Questo tutorial ti mostrerà i quattro metodi, con del codice di esempio per ognuno. Come impostare un'immagine di sfondo in React usando un URL esterno Se la tua immagine si trova da ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-impostare-una-immagine-di-background-in-react-usando-il-css-in-linea/</link>
                <guid isPermaLink="false">62a06a8e203d0c06f2188a68</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Fri, 10 Jun 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/fcc-bg-image-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/react-background-image-tutorial-how-to-set-backgroundimage-with-inline-css-style/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React Background Image Tutorial – How to Set backgroundImage with Inline CSS Style</a>
      </p><p>Ci sono quattro modi per impostare una proprietà di stile <code>backgroundImage</code> usando il CSS in linea in React.</p><p>Questo tutorial ti mostrerà i quattro metodi, con del codice di esempio per ognuno.</p><h2 id="come-impostare-un-immagine-di-sfondo-in-react-usando-un-url-esterno">Come impostare un'immagine di sfondo in React usando un URL esterno</h2><p>Se la tua immagine si trova da qualche parte online, puoi impostare l'immagine di sfondo del tuo elemento mettendo l'URL in questo modo:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">function App() {
  return (
    &lt;div style={{ 
      backgroundImage: `url("https://via.placeholder.com/500")` 
    }}&gt;
      Hello World
    &lt;/div&gt;
  );
}</code></pre><figcaption>Impostare l'immagine di sfondo in React con un link esterno</figcaption></figure><p>Il codice sopra renderizzerà un singolo elemento <code>div</code> con lo style <code>background-image: url(https://via.placeholder.com/500)</code> applicato ad esso.</p><h2 id="come-impostare-un-immagine-di-sfondo-in-react-dalla-tua-cartella-src">Come impostare un'immagine di sfondo in React dalla tua cartella /src</h2><p>Se crei l'applicazione usando Create React App e hai le tue immagini nella cartella <code>src/</code>, puoi prima importare l'immagine e poi piazzarla come sfondo del tuo elemento:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import React from "react";
import background from "./img/placeholder.png";

function App() {
  return (
    &lt;div style={{ backgroundImage: `url(${background})` }}&gt;
      Hello World
    &lt;/div&gt;
  );
}

export default App;</code></pre><figcaption>Impostare l'immagine di sfondo usando un'immagine importata</figcaption></figure><p>Quando esegui il comando <code>npm start</code>, React mostrerà un errore "Failed to Compile" e fermerà il build quando l'immagine non viene trovata:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/12/React-failed-to-compile-image.png" class="kg-image" alt="React-failed-to-compile-image" width="600" height="400" loading="lazy"><figcaption>L'errore di React. L'immagine non è stata trovata.</figcaption></figure><p>In questo modo non mostrerai link di immagini mancanti nella tua app web. Nel codice qui sopra, il valore di <code>backgroundImage</code> è impostato usando una stringa template, che permette di incorporare un'espressione JavaScript.</p><h2 id="come-impostare-un-immagine-di-sfondo-in-react-usando-il-metodo-dell-url-relativo">Come impostare un'immagine di sfondo in React usando il metodo dell'URL relativo</h2><p>La cartella <code>public/</code> in Create React App può essere usata per aggiungere risorse statiche nella tua applicazione React. Qualsiasi file metti in questa cartella sarà accessibile online.</p><p>Puoi quindi assegnare l'URL relativo al tuo indirizzo di host per impostare l'immagine di sfondo. Ecco un esempio:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">&lt;div style={{ backgroundImage: "url(/image.png)" }}&gt;
  Hello World
&lt;/div&gt;</code></pre><figcaption>Impostare un'immagine di sfondo con un URL relativo</figcaption></figure><p>Impostando il path dell'URL a <code>/image.png</code> come nell'esempio qui sopra, il browser cercherà l'immagine di sfondo in <code>&lt;your host address&gt;/image.png</code>.</p><p>Puoi anche creare un'altra cartella dentro <code>public/</code> se vuoi organizzare le tue immagini in cartelle. Per esempio:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/12/Screen-Shot-2020-12-14-at-20.18.30.png" class="kg-image" alt="Screen-Shot-2020-12-14-at-20.18.30" width="600" height="400" loading="lazy"><figcaption>Creare una cartella img/ dentro la cartella public/</figcaption></figure><p>Non dimenticarti di aggiustare il valore di <code>backgroundImage</code> in <code>url(/img/image.png)</code> se decidi di creare la cartella.</p><h2 id="impostare-un-immagine-di-sfondo-in-react-usando-il-metodo-dell-url-assoluto">Impostare un'immagine di sfondo in react usando il metodo dell'URL assoluto</h2><p>Puoi anche includere l'URL assoluto usando la variabile di ambiente di Create React App <code>PUBLIC_URL</code> in questo modo:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">&lt;div style={{ 
  backgroundImage: `url(${process.env.PUBLIC_URL + '/image.png'})` 
}}&gt;
  Hello World
&lt;/div&gt;</code></pre><figcaption>Impostare l'immagine di sfondo usando un URL assoluto</figcaption></figure><p>Quando esegui questo sul tuo computer, gli script di React gestiscono il valore di <code>PUBLIC_URL</code>. Quando lo esegui in locale, apparirà come un URL relativo invece di un URL assoluto:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/12/absolute-url-background-image-1.png" class="kg-image" alt="absolute-url-background-image-1" width="600" height="400" loading="lazy"><figcaption>L'URL dell'immagine non è mostrato nel computer locale</figcaption></figure><p>L'URL assoluto sarà visto solo una volta fatto il deployment di React in una applicazione di produzione.</p><h2 id="come-impostare-un-immagine-di-sfondo-con-propriet-aggiuntive">Come impostare un'immagine di sfondo con proprietà aggiuntive</h2><p>Se vuoi personalizzare ulteriormente l'immagine di sfondo, lo puoi fare aggiungendo proprietà addizionali dopo <code>backgroundImage</code>. Ecco un esempio:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">
&lt;div style={{ 
  backgroundImage: `url(${process.env.PUBLIC_URL + '/image.png'})`,
  backgroundRepeat: 'no-repeat',
  width:'250px' 
}}&gt;
  Hello World
&lt;/div&gt;</code></pre><figcaption>Impostare background-image con proprietà aggiuntive</figcaption></figure><p>Le proprietà impostate aggiungeranno <code>background-repeat: no-repeat</code> e <code>width: 250px</code> assieme allo stile <code>background-image</code> all'elemento <code>div</code>.</p><p>Grazie per aver letto, spero che quest'articolo ti sia stato utile. 🙂</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Lista con valori unici: come ottenere i valori unici da una lista in Python ]]>
                </title>
                <description>
                    <![CDATA[ Diciamo che hai una lista che contiene alcuni numeri duplicati: numbers = [1, 1, 2, 3, 3, 4] Ma invece vuoi una lista di numeri unici. unique_numbers = [1, 2, 3, 4] Ci sono alcuni modi diversi per ottenere una lista di valori unici in Python. Questo articolo ti mostrerà ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/lista-con-valori-unici-come-ottenere-una-lista-di-valori-unici-in-python/</link>
                <guid isPermaLink="false">628f4608be0d9a0529438413</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Tue, 31 May 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/06/skye-studios-NDLLFxTELrU-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/python-unique-list-how-to-get-all-the-unique-values-in-a-list-or-array/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Unique List – How to Get all the Unique Values in a List or Array</a>
      </p><p>Diciamo che hai una lista che contiene alcuni numeri duplicati:</p><pre><code class="language-python">numbers = [1, 1, 2, 3, 3, 4]
</code></pre><p>Ma invece vuoi una lista di numeri <em>unici</em>.</p><pre><code class="language-python">unique_numbers = [1, 2, 3, 4]
</code></pre><p>Ci sono alcuni modi diversi per ottenere una lista di valori unici in Python. Questo articolo ti mostrerà come.</p><h1 id="opzione-1-usare-un-set-per-ottenere-elementi-unici">Opzione 1 <strong>–</strong> Usare un Set per ottenere elementi unici</h1><p>Usare un <strong><code>set</code> </strong>è un modo per farlo. Un set è utile perché contiene elementi unici.</p><p>Puoi usare un set per ottenere elementi unici e poi, trasformare il set in una lista.</p><p>Guardiamo a due approcci che usano un set e una lista. Il primo approccio è "<em>verbose</em>" ma è utile per vedere cosa sta accadendo ad ogni step.</p><pre><code class="language-python">numbers = [1, 2, 2, 3, 3, 4, 5]


def get_unique_numbers(numbers):

    list_of_unique_numbers = []

    unique_numbers = set(numbers)

    for number in unique_numbers:
        list_of_unique_numbers.append(number)

    return list_of_unique_numbers


print(get_unique_numbers(numbers))
# result: [1, 2, 3, 4, 5]
</code></pre><p>Diamo un'occhiata più dettagliata a cosa sta succedendo. Partiamo dalla lista di numeri, <code><strong>numbers</strong></code>. Passo questo lista a una funzione, <code><strong>get_unique_numbers</strong></code>.</p><p>Dentro questa funzione creo una lista vuota, che alla fine conterrà tutti i numeri unici. Poi, uso un <strong><code>set</code> </strong>per ottenere i numeri unici dalla lista <code><strong>numbers</strong></code>.</p><pre><code class="language-python">unique_numbers = set(numbers)
</code></pre><p>Ho quello di cui ho bisogno: i numeri unici. Ora ho bisogno di mettere questi valori in una lista. Per farlo, uso un loop per iterare su ogni numero nel set.</p><pre><code class="language-python">for number in unique_numbers:
       list_of_unique_numbers.append(number)
</code></pre><p>Ad ogni iterazione aggiungo il numero corrente alla lista, <code><strong>list_of_unique_numbers</strong></code>. Infine, ottengo la lista alla fine del programma.</p><p>C'è un modo più breve di usare un set e una lista per ottenere valori unici in Python. Questo è ciò che vedremo nella prossima sezione.</p><h3 id="un-approccio-pi-breve-con-set">Un approccio più breve con set</h3><p>Tutto il codice scritto sopra può essere condensato in una singola riga con l'aiuto delle funzioni integrate di Python.</p><pre><code class="language-python">numbers = [1, 2, 2, 3, 3, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)
# Result: [1, 2, 3, 4, 5]
</code></pre><p>Anche se questo codice appare molto diverso dal primo esempio, l'idea è la stessa. Usare un set per ottenere i numeri unici. Poi, trasformare il set in una lista.</p><pre><code class="language-python">unique_numbers = list(set(numbers))
</code></pre><p>Leggendo il codice qui sopra, è utile pensare "dall'interno verso l'esterno". Il codice più interno viene valutato prima: <code><strong>set(numbers)</strong></code>. Poi, viene valutato il codice più esterno: <code><strong>list(set(numbers)</strong>)</code>.</p><h1 id="opzione-2-usare-l-iterazione-per-identificare-valori-unici">Opzione 2 <strong>– Usare l'iterazione per identificare valori unici</strong></h1><p>L'iterazione è un altro approccio da considerare.</p><p>L'idea principale è creare una lista vuota che conterrà i numeri unici. Poi, usare un loop per iterare su ogni numero nella data lista. Se il numero è già nella lista unica, allora il loop passerà alla prossima iterazione. Altrimenti, il numero verrà aggiunto alla lista.</p><p>Consideriamo due modi di usare l'iterazione per ottenere i valori unici da una lista, iniziando con il metodo più <em>verbose</em>.</p><pre><code class="language-python">numbers = [20, 20, 30, 30, 40]


def get_unique_numbers(numbers):
    unique = []

    for number in numbers:
        if number in unique:
            continue
        else:
            unique.append(number)
    return unique


print(get_unique_numbers(numbers))
# Result: [20, 30, 40]
</code></pre><p>Ecco cosa sta succedendo in ogni step. Partiamo ancora dalla lista di numeri assegnata, <code><strong>numbers</strong></code>. Passo questa lista alla funzione, <code><strong>get_unique_numbers</strong></code>.</p><p>Dentro questa funzione, creo una lista vuota, <code><strong>unique</strong></code>. Alla fine, questa lista conterrà tutti i numeri unici.</p><p>Uso un loop for per iterare su ogni numero nella lista <code><strong>numbers</strong></code>.</p><pre><code class="language-python"> for number in numbers:
       if number in unique:
           continue
       else:
           unique.append(number)
</code></pre><p>Il condizionale dentro il loop verifica se il numero dell'iterazione corrente è nella lista <code><strong>unique</strong></code>. Se è così, il loop continua alla prossima iterazione. Altrimenti, il numero viene aggiungo alla lista.</p><p>Ecco il punto importante: solo i numeri unici sono aggiunti. Alla fine del loop, ottengo la lista <strong><code>unique</code> </strong>che contiene tutti i numeri unici.</p><h2 id="un-metodo-pi-breve-con-l-iterazione">Un metodo più breve con l'iterazione</h2><p>C'è un altro modo per scrivere questa funzione in meno righe.</p><pre><code class="language-python">numbers = [20, 20, 30, 30, 40]


def get_unique_numbers(numbers):
    unique = []
    for number in numbers:
        if number not in unique:
            unique.append(number)
    return unique
#Result: [20, 30, 40]

</code></pre><p>La differenza è il condizionale. Questa volta è scritto in questo modo: se il numero non è presente in <code><strong>unique</strong></code>, allora aggiungilo.</p><pre><code class="language-python">if number not in unique:
    unique.append(number)
</code></pre><p>Altrimenti, il loop andrà avanti al prossimo numero della lista <code><strong>numbers</strong></code>.</p><p>Il risultato è lo stesso. Però, è a volte più difficile pensare al codice e leggerlo quando contiene <code>not</code>.</p><p>Ci sono altri modi per trovare i valori unici in una lista di Python, ma probabilmente ti troverai a usare uno degli approcci spiegati in questo articolo.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
