# Scratch (informatica)

Scratch è un ambiente di programmazione gratuito, con un linguaggio di programmazione di tipo grafico. Tale linguaggio, ispirato alla teoria costruzionista dell'apprendimento e progettato per l'insegnamento della programmazione tramite primitive visive, è adatto a studenti, insegnanti e genitori ed è utilizzabile per progetti pedagogici e di intrattenimento che spaziano dalla matematica alla scienza, consentendo la realizzazione di simulazioni, visualizzazione di esperimenti, animazioni, musica, arte interattiva e semplici giochi.

## Storia

Il gruppo Lifelong Kindergarten del MIT Media Lab, guidato da Mitchel Resnick, e la sua società di consulenza, Playful Invention Company, con sede a Montreal, co-finanziato da quest'ultimo con Brian Silverman e Paula Bonta, ha sviluppato la prima versione desktop di Scratch nel 2003. Dal 2007, i progetti possono essere condivisi online con altri utenti, i quali possono apportare modifiche in modo cooperativo.
Il nome deriva dalla omonima tecnica dello scratch usata dagli artisti del giradischi, i turntablist, alludendo alla facilità con cui è possibile missare e remixare i progetti Scratch.
Da questa base si sono sviluppate altri progetti, per esempio Snap!, per aggiungere altre funzionalità non presenti nella versione di Scratch.
Con l'introduzione della versione 2.0 di Scratch, avvenuta il 9 maggio 2013, è diventato possibile definire blocchi utente all'interno di un progetto. Inoltre, da questa data, il sito di Scratch viene rinnovato graficamente e fornisce un editor online che consente di creare e modificare i progetti direttamente sul sito. Sia la versione offline che quella online richiedono il supporto della tecnologia Adobe Flash.
Una variante di Scratch per bambini da 5 a 7 anni è stata sviluppata sotto il nome di ScratchJr e rilasciata nel 2014.
La terza versione di Scratch è stata annunciata nel 2016 e rilasciata il 2 gennaio 2019. Questa versione è la prima compatibile anche con la maggior parte dei dispositivi mobili, in quanto è stata sviluppata in HTML5 e JavaScript.

## Descrizione
### Linguaggio

Scratch prevede un approccio orientato agli oggetti (denominati Sprite) ed un linguaggio di programmazione che consente di elaborare storie interattive, giochi, animazioni, arte e musica. Inoltre permette di condividere i progetti con altri utenti del web.L'idea di questo linguaggio è che anche i bambini o le persone inesperte di linguaggi di programmazione possono imparare importanti concetti di calcolo matematico, a ragionare in modo sistematico, a pensare in modo creativo e a lavorare in gruppo. Le istruzioni fondamentali del linguaggio di Scratch sono implementate in blocchi colorati creati per agganciarsi l'un l'altro e formare delle colonne. Ognuna di queste colonne di blocchi viene chiamata script e fanno parte del codice vero e proprio che viene interpretato dalla macchina.
| Categoria | Note | Categoria | Note |
| Movimento | Muove gli Sprite e cambia gli angoli | Situazioni | Blocchi di gestione degli eventi e da porre come testata. |
| Aspetto | Controlla la visibilità, i costumi e l'output | Controllo | Istruzioni se e strutture ciclo/loop |
| Suono | Esegue brani audio e sequenze audio programmabili. Su Scratch 3 alcuni blocchi si trovano in un'estensione. | Sensori | Sensori per gli Sprite e input utente. La stessa cosa di Suono alcuni blocchi oggi sono estensioni |
| Penna | Supporto al disegno e alla grafica (Dalla versione 3.0 questa categoria non è automaticamente presente, in quanto va aggiunta manualmente dalla sezione "Estensioni") | Operatori | Operatori matematici e booleani. |
| Variabili e liste | Uso di variabili e assegnazione di valori | Altri blocchi | Procedure personalizzate (funzioni) e controllo di periferiche. |

### Ambiente

L'ambiente Scratch è disponibile sia via web, sul sito scratch.mit.edu sia come software utilizzabile offline, chiamato Scratch Desktop, disponibile per le piattaforme Windows, MacOS. Al momento non esiste una versione ufficiale di Scratch Desktop per GNU/Linux. L'ultima versione stabile è la versione 3.6.0. pubblicata nel 2019.

### Interfaccia utente

L'area posta in alto a sinistra è il palcoscenico o "stage area", dove compaiono i risultati e il codice prende vita mentre gli Sprite, gli oggetti grafici su cui agisce il codice, sono elencati in basso. Gli sprite compaiono sopra allo Stage (lo sfondo), che viene considerato uno sprite sebbene non si possa duplicare, eliminare o clonare e non abbia coordinate e dimensione.
Selezionando uno Sprite è possibile associarvi i blocchi di codice, selezionabili dall'area Script dove sono raggruppati per tipo, trascinandoli nell'area del codice. Se uno Sprite ha associato del codice questo viene visualizzato nell'area a destra ed è possibile modificarlo. Qualsiasi blocco può essere provato con un doppio clic in modo da vederne in anteprima l'azione.
A lato della sezione Script, ve ne sono altre due per Costumi (sullo Stage sono chiamati Sfondi) e Suoni. Una barra espandibile a destra è dedicata alla guida.
Le aree sono state riorganizzate nella versione 2.0.

## Comunità

Lo slogan della comunità online di Scratch recita "Immagina, Programma, Condividi", sottolineando l'importanza della condivisione e degli aspetti sociali della creatività nella filosofia alla base di Scratch.
I progetti Scratch, essendo a codice aperto, sono liberamente modificabili e utilizzabili per creare nuovi progetti. I progetti possono essere inviati direttamente dal programma al sito web di Scratch, e qualsiasi membro della comunità può scaricarne il codice per studiarlo o modificarlo in un nuovo progetto. I membri possono inoltre creare gallerie di progetti, commentare, taggare e aggiungere ai preferiti. Tutti i progetti sul sito sono condivisi con licenza Creative Commons "Share-Alike" e riprodotti su un browser (utilizzando Flash Player).
Il sito web riceve quasi 10 milioni di visite al mese e al 2 gennaio 2013 i membri registrati sono 1.349.093 (di cui 402.697 hanno condiviso progetti), per un totale di più di 4.200.000 progetti condivisi (più di un progetto inviato al minuto). Il sito web organizza periodicamente il "Scratch Design Studio", competizione per incoraggiare la creazione e condivisione di progetti dalla grafica elementare.
Nel 2008, la piattaforma della comunità online di Scratch (denominata "ScratchR") ha ricevuto una menzione onoraria all'Ars Electronica Prix.
Esiste anche una comunità online per educatori, denominata ScratchEd.