CONTATTACI

Blog

Angular al microscopio

 

Con quest'articolo cercheremo di aiutarti a comprendere le potenzialità di Angular, un framework javascript completamente open source sviluppato da Google. 

Tuttavia, prima di entrare nel tecnico, diamo alcuni piccoli cenni sulla sua storia e sui motivi che hanno spinto la creazione di un prodotto simile.

Cenni storici

La storia di Angular è un po’ ingarbugliata. Tutto iniziò nel 2009 quando Misko Hevery e il suo amico Adam Abrons, iniziarono a lavorare part-time ad un progetto che potesse semplificare lo sviluppo ai web designers che non avevano molta dimestichezza con il codice. Una volta finito, i due registrarono il dominio getangular.com perché ai tempi angular.com non era disponibile.

Questa prima bozza di Angular non era proprio facile da spiegare, perfino Hevery alla domanda su cosa fosse questo progetto, abbozzava una risposta come:

it’s a kind of Spread sheet in cloud so that we can bind data and save it without worrying about security persistent etc and UI will be in HTML.

che potremmo tradurre in:

è una specie di spreadsheet su cloud, così che possiamo fare binding dei dati e salvarli senza preoccuparci della persistenza, della sicurezza etc… e l'interfaccia sarà in HTML.

Get Angular 

Successivamente Brad Green, uno dei manager di Misko in Google, gli chiese di lavorare ad un progetto interno che si chiamava Google Feedback Tool utilizzando Google Web Toolkit (GWT). Dopo 6 mesi di sviluppo e più di 17.000 righe di codice, lavorare su questo progetto diventò estremamente difficile, data la difficoltà nel testare i file generati dai sorgenti in Java. A quei tempi era comune generare file HTML e Javascript partendo da framework basati su Java. Questi framework, anche se davano un importante aiuto, richiedevano maggiori tempi di sviluppo, dovuti al fatto che ad ogni cambiamento il codice andasse ricompilato. Di conseguenza, ogni modifica necessitava una nuova compilazione. A quel punto Misko sfidò il suo manager dicendo che con Angular sarebbe riuscito a riscriverlo in 2 settimane. Perse la scommessa, impiegandone 3, ma impressionò comunque Brad il quale gli chiese di lavorarci ulteriormente e perfezionarlo. Alla fine, il progetto Google Feedback Tool fu portato a termine con Angular che, per l’occasione, fu rinominato AngularJs. 

Primo rilascio ufficiale

Dopo qualche mese arrivò il 2010, anno in cui è stata rilasciata la prima versione ufficiale di AngularJs

Il primo framework Javascript a introdurre il pattern della dependency injection, già molto popolare e usato nel mondo back end e il primo con cui era possibile produrre web application esclusivamente con Javascript, senza l’utilizzo di linguaggi server side. 

Il funzionamento di AngularJs era legato a degli attributi scritti nella pagina HTML – un esempio ne è il classico ng-controller – i quali venivano letti e per ognuno di loro era assegnata una funzione specifica. 

Riscrittura di AngularJs 

Purtroppo, dopo alcuni anni, emersero gravi problemi di performance di AngularJs, alcuni tra i più famosi problemi riguardavano l’incombenza del cosiddetto variable shadowing e il digest loop, ossia il meccanismo con cui AngularJs riusciva a fornire il two-way data binding. Inoltre, in quel periodo si fece sempre più forte l’esigenza di avere un buon supporto per il mobile, cosa che non era stata studiata per AngularJs.

Per chi volesse approfondire la questione del digest loop

Per farla breve AngularJs, per mettere a disposizione il two-way data binding, crea per ogni elemento dell’interfaccia che utilizza la direttiva ng-model, un watch, ossia una funzione che “osserva” i cambiamenti della variabile su cui è definita. 

Il Digest Loop è il processo con cui vengono esaminati tutti i watch con lo scopo di individuare dei cambiamenti dall’ultima esecuzione e eventualmente aggiornare il DOM

Un problema comune si verificava quando una variabile legata ad un watch veniva modificata durante il digest loop. Ciò provocava nuovamente l'esecuzione di tutto il ciclo di aggiornamento dei watch

Lasciamo immaginare cosa accadeva in grosse applicazioni con un numero elevato di Watch: prestazioni pessime e tempi di caricamento assurdi.

Angular 2+ 

N.B. con angular 2+ ci si riferisce a tutte le versioni di Angular successive ad AngularJs

Ed eccoci arrivati finalmente al presente. La completa riscrittura di AngularJs porta al rilascio di Angular nel 2014

Nonostante abbiano quasi lo stesso nome sono sostanzialmente differenti.

Innanzitutto Angular 2+ è stato sviluppato con Typescript, un linguaggio di programmazione open source di Microsoft. Potremmo definire Typescript come un superset di Javascript, in quanto non fa altro che aggiungere elementi come tipi statici, classi, interfacce e generics, tutte cose che ritroviamo da tempo in linguaggi molto più maturi come Java. 

Angular 2+ introduce altre importanti features per lo sviluppo, qui di seguito ne riassumo alcune:

  • Angular CLI: è la command line interface di Angular, ossia un insieme di comandi predisposti da eseguire su terminale che offrono supporto dalla creazione del progetto e dei componenti fino al deploy e ai test;
  • Supporto a diversi linguaggi: Angular 2+ supporta, oltre Typescript, ES5, ES6 e Dart;
  • Supporto alla programmazione Reattiva con RXJS: la programmazione reattiva (reactive programming) è un paradigma di programmazione che si differenzia da quello imperativo. Per questo motivo servirebbe un articolo a parte per poter far capire i vantaggi e le sue caratteristiche. Mi limiterò a dire che la programmazione reattiva è alla base di tutta l'infrastruttura asincrona di Angular 2+;
  • Miglior gestione dello State: un altro dei pattern utilizzati è la centralizzazione dello stato applicativo. Il principale obiettivo di questo pattern è rendere il cambiamento e la lettura dei dati semplice attraverso specifici comportamenti, uno di questi è sapere dove, quando e chi può effettuare delle modifiche seguendo un flusso unidirezionale. Per implementare ciò Angular utilizza Redux, una libreria che è anche un design pattern e che si basa su alcuni concetti come: 
    • Lo State è read only: cioè lo stato applicativo non può essere modificato direttamente;
    • Singola fonte di verità: cioè che lo stato è immutabile ed è unico per tutto l’applicativo, non possono esserci più stati;
    • Funzioni Pure: tutti i cambiamenti dello stato sono fatti con l’utilizzo di funzioni pure (ciò richiede di approfondire alcuni concetti della programmazione funzionale);
    • Flusso unidirezionale dei dati (one way data flow): significa che le modifiche e la lettura dei dati seguono un flusso unico, in parole semplici i dati che vengono passati da un componente parent a un child non possono essere modificati da quest'ultimo. 

Oltre l’aggiunta di queste importanti features, Angular 2+ si differenzia anche per cambiamenti di sintassi. Innanzitutto invece di scrivere ng-module e ng-controllers, si utilizzeranno le classi @NgModule, @Component, @Directive, @Service etc… 

Inoltre, in questa versione non esistono più concetti come lo scope e i controllers, al loro posto è stata creata un’architettura che si basa su componenti gerarchici. 

Per quanto riguarda il binding delle proprietà è stato introdotto l’utilizzo delle parentesi quadre [ ], come in questo esempio: 

mentre per il binding degli eventi si utilizzano le parentesi tonde (). Nel seguente esempio si capisce come il metodo onClick() sia stato collegato all’evento click:

Conclusioni e sommario

Angular 2+ è uno dei migliori framework Javascript per la creazione di SPA (single page application). Tuttavia, a differenza di altri concorrenti come React o Vue.js, presenta una curva d’apprendimento più alta quindi non è di così facile utilizzo per chi è alle prime armi. Per poterlo utilizzare bene e sfruttare al meglio tutte le sue caratteristiche bisognerebbe avere delle solide conoscenze di alcuni Design Pattern e soprattutto di Javascript che spesso richiedono un pò d’esperienza e di tempo. 

Ci sembra scontato dire che Angular 2+, dopo aver capito che è completamente differente da AngularJs o Angular 1.X (in quanto aggiunge molte nuove features e lo rende al passo con lo sviluppo web moderno), è da preferire allo studio del suo precedente. Soprattutto perché, da dicembre 2021, Google ha ufficialmente sospeso il supporto di AngularJs.

Nei prossimi articoli analizzeremo al microscopio anche React e Vue.Js, per poi terminare in bellezza con un articolo che li mette a confronto, esaminando pregi e difetti. Stay tuned! 

Articoli correlati

Il linguaggio HTML (Hypertext Markup Language) è uno dei più conosciuti e diffusi: lo si trova infatti praticamente in tutte le pagine web esistenti. È una scelta popolare tra i principianti che si…

Seguici su Facebook

Vuoi entrare nel mondo della programmazione?

Scopri di più sui nostri corsi!

Chiamaci al numero verde

Contattaci su WhatsApp

Contattaci senza impegno per informazioni sul corso

Pagamento rateale

Valore della rata: A PARTIRE DA 115 €/mese.

Esempio di finanziamento 

Importo finanziato: € 2440 in 24 rate da € 115 – TAN fisso 9,55% TAEG 12,57% – importo totale del credito € 2841.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

*In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 210 €/mese.

Esempio di finanziamento  

Importo finanziato: € 4500 in 24 rate da € 210,03 – TAN fisso 9,68% TAEG 11,97% – importo totale del credito € 5146,55.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.