Ormai è risaputo, l’informatica è un mondo in continua evoluzione, ogni giorno vengono presentate nuove tecnologie volte a semplificare lo sviluppo di app e software a noi sviluppatori.
Una di queste tecnologie è Jetpack Compose, ormai già in versione stable release.
Jetpack Compose è un framework del tutto nuovo che stravolge completamente la creazione di App Android sfruttando le potenzialità di Kotlin e quello che può offrire la programmazione dichiarativa: dinamicità, semplicità di lettura, codice ottimizzato e molta meno sovrastruttura generata da evoluzioni del framework ormai diventato “Legacy” che tutti noi conosciamo e con cui abbiamo sviluppato da sempre.
Scritto totalmente da zero, Compose offre la potenzialità di un vero cambio di marcia nello sviluppo. Ad oggi si ha già la possibilità di creare app utilizzando la maggior parte dei widget presenti nel Material Design. Per accompagnare il tutto, Chris Banes, ha creato la libreria Accompanist che raccoglie widget e integrazioni che semplificano ulteriormente lo sviluppo.
Il concetto più importante su cui si basa Compose è lo Stato: un oggetto che rappresenta quello che la UI deve mostrare in un determinato momento della sua esecuzione. Aggiornato lo stato, aggiornata la UI. Tutto questo in tempo reale. Sbalorditivo eh? 🔮
Grazie alla piena integrazione con le Coroutine, le schermate e i widget scritti mediante Compose sono in grado di sottoscriversi a StateFlow (o SharedFlow) così da ricevere ogni aggiornamento emesso e indirizzarlo alla UI che, di conseguenza, si aggiornerà mostrando i dati correttamente aggiornati o eseguirà azioni specifiche.
Ma ha davvero senso passare alla creazione di app con Compose se non addirittura alla migrazione (anche solo parziale) di app già in produzione o in fase di sviluppo?
Partiamo dalla migrazione di un’app.
Come è noto, il mantenere un’app aggiornata è un lavoro che ripaga nel tempo; Facilità di assimilazione delle Breaking Changes, Bugfix delle librerie stesse e maggiore stabilità di queste ultime. Più le librerie vengono aggiornate meno possibilità ci sono che alcune funzioni dell’app basate su queste librerie vengano deprecate.
La domanda permane: Riscrivere un’intera app solo per introdurre Compose può valerne la pena? Onestamente non so dare una risposta chiara e definita. Le app subiscono molti cicli di refactor durante la loro “vita” dove alcune o molte porzioni di codice vengono riscritte e ottimizzate. In questi casi si potrebbe pensare ad una graduale introduzione di Compose, in quanto pienamente inter-operabile con il vecchio framework, anche se rimane un’operazione di priorità minore rispetto alla vera manutenzione di un’app che, magari, conta migliaia di righe di codice.
Invece la creazione di una nuova app?
In merito, posso affermare che ha assolutamente senso investire su questa nuova tecnologia, in quanto si prevede possa diventare uno standard nel giro di poco tempo, ma non solo…
Nell’ultimo periodo ho avuto modo di lavorare ad un nuovo progetto: una whitelabel per un’app di eCommerce con la possibilità di personalizzazione per vari brand.
Abbiamo deciso di prendere una nuova direzione: app nuova, tecnologia nuova. Così abbiamo iniziato con un primo studio di Compose, utilizzando la documentazione di Google e un Pathway molto completo, sempre messo a disposizione da Big G.
Il progetto è partito quando Jetpack Compose era in alpha e, pian piano, tra una breaking change e qualche bug, siamo riusciti a portare in produzione la prima versione dell’app per il primo marchio.
Non posso nascondervi che sia stato un percorso pieno di insidie: il processo di conoscenza del framework, i comportamenti inspiegabili causati da qualche bug dovuto alla maturità di Compose e l’assorbimento delle breaking changes, hanno creato alcuni momenti di panico. Queste difficoltà, comunque, ci hanno aiutato a conoscere meglio la tecnologia e a rilasciare così un’app solida e di qualità. Questo risultato è stato raggiunto anche grazie al continuo supporto da parte del team di sviluppo di Google, che ha risolto molti bug nel corso delle varie release, e alla community che prontamente ha aperto le segnalazioni.
Per concludere, questo nuovo framework mi ha positivamente sorpreso; la semplicità con cui è possibile creare widget e componenti riutilizzabili in diversi contesti dell’app, la piena integrazione con Kotlin e le Coroutine, la semplicità e il divertimento durante il suo utilizzo sono i punti di forza di Compose.
Sono sicuro che col passare del tempo non potrà che migliorare e diventare sempre più completo.
P.s. Tranquilli, non finisce qui… rimanete sintonizzati, il prossimo articolo è dietro l’angolo 😎