Nel panorama dello sviluppo Android moderno, Kotlin è diventato lo standard per creare applicazioni robuste, leggibili e scalabili. Una delle sue funzionalità più potenti sono le extension functions, strumenti che permettono di aggiungere comportamenti a classi preesistenti senza modificarne l’implementazione.
Molti team non sfruttano appieno questo meccanismo, perdendo l’opportunità di ridurre drasticamente il boilerplate, centralizzare comportamenti comuni e rendere il codice più espressivo. Le estensioni non sono una scorciatoia: rappresentano un modo per creare un vero e proprio linguaggio interno al progetto, condiviso tra sviluppatori e facile da mantenere.
In questo articolo vedremo 10 extension functions realmente utili, tratte da casi d’uso frequenti, insieme a un capitolo avanzato che mostra come applicarle in una struttura architetturale moderna composta da ViewModel, Repository e Networking.
1. Visibilità delle View più leggibile
Gestire la visibilità con View.VISIBLE o View.GONE genera ripetizioni che appesantiscono il codice. Queste estensioni rendono il tutto più espressivo:
fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }
E l’uso diventa più naturale:
loader.show()
button.hide()
Tre funzioni semplici che migliorano sensibilmente la leggibilità della UI.
2. Click listener compatti e chiari
Un listener tradizionale richiede spesso più righe. Una piccola estensione semplifica tutto:
fun View.onClick(action: () -> Unit) =
setOnClickListener { action() }
E il codice chiamante appare più ordinato:
submitButton.onClick { viewModel.submit() }
3. Conversione tra dp e px senza ripetere calcoli
Queste estensioni eliminano duplicazioni comuni in tutta l’app:
val Int.dp: Int get() = (this * Resources.getSystem().displayMetrics.density).toInt() val Int.px: Int get() = (this / Resources.getSystem().displayMetrics.density).toInt()
Particolarmente utili nelle custom view e nelle animazioni.
4. Consumo degli eventi nei listener
Molti listener richiedono un Boolean di ritorno che determina il comportamento dell’evento. Una estensione può rendere più chiaro il flusso:
Applicare le Extension Functions a ViewModel, Repository e Networking
Le estensioni esprimono tutta la loro potenza quando vengono integrate in una Clean Architecture moderna. Possono infatti:
standardizzare la gestione degli errori
semplificare l’uso dei Flow tra ViewModel e UI
ridurre boilerplate nelle chiamate Retrofit
migliorare la leggibilità dei repository
rendere più chiara la conversione tra DTO e model di dominio
Vediamo alcuni esempi.
1. Una sealed class Result centralizzata
Per gestione coerente degli stati:
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Error(val throwable: Throwable) : Result<Nothing>()
object Loading : Result<Nothing>()
}
2. Estensione per gestire il Result nel ViewModel
Molto utile per aggiornare lo UI State:
inline fun <T> Result<T>.onResult(
success: (T) -> Unit = {},
error: (Throwable) -> Unit = {},
loading: () -> Unit = {}
) {
when (this) {
is Result.Success -> success(data)
is Result.Error -> error(throwable)
is Result.Loading -> loading()
}
}
Android: Kotlin 10 Extension Functions Che Ripuliranno Davvero il Tuo Codice
Nel panorama dello sviluppo Android moderno, Kotlin è diventato lo standard per creare applicazioni robuste, leggibili e scalabili. Una delle sue funzionalità più potenti sono le extension functions, strumenti che permettono di aggiungere comportamenti a classi preesistenti senza modificarne l’implementazione.
Molti team non sfruttano appieno questo meccanismo, perdendo l’opportunità di ridurre drasticamente il boilerplate, centralizzare comportamenti comuni e rendere il codice più espressivo. Le estensioni non sono una scorciatoia: rappresentano un modo per creare un vero e proprio linguaggio interno al progetto, condiviso tra sviluppatori e facile da mantenere.
In questo articolo vedremo 10 extension functions realmente utili, tratte da casi d’uso frequenti, insieme a un capitolo avanzato che mostra come applicarle in una struttura architetturale moderna composta da ViewModel, Repository e Networking.
1. Visibilità delle View più leggibile
Gestire la visibilità con
View.VISIBLEoView.GONEgenera ripetizioni che appesantiscono il codice. Queste estensioni rendono il tutto più espressivo:E l’uso diventa più naturale:
Tre funzioni semplici che migliorano sensibilmente la leggibilità della UI.
2. Click listener compatti e chiari
Un listener tradizionale richiede spesso più righe. Una piccola estensione semplifica tutto:
E il codice chiamante appare più ordinato:
3. Conversione tra dp e px senza ripetere calcoli
Queste estensioni eliminano duplicazioni comuni in tutta l’app:
Particolarmente utili nelle custom view e nelle animazioni.
4. Consumo degli eventi nei listener
Molti listener richiedono un Boolean di ritorno che determina il comportamento dell’evento. Una estensione può rendere più chiaro il flusso:
E il suo utilizzo:
5. Inflazione dei layout nei ViewHolder più pulita
Un adapter può risultare molto più leggibile se si aggiunge questa estensione:
Il ViewHolder si semplifica:
6. Recupero sicuro degli extra da Intent
Molti cast possono essere eliminati:
Chiaro, sicuro e leggibile.
7. Gestione errori nei form con TextInputLayout
Impostare errori ripetendo sempre la stessa logica non è necessario:
E l’uso diventa naturale:
8. Funzioni semantiche per le liste
A volte è utile aggiungere comportamenti descrittivi:
Adatta a casi dove presenza o assenza di dati cambia il flusso.
9. Collezione sicura dei Flow in fragment o activity
Una delle estensioni più utili per evitare crash legati al lifecycle:
Esempio:
10. Un logger coerente per tutti i layer
Questa estensione centralizza il formato dei log:
Più chiaro e uniforme.
Applicare le Extension Functions a ViewModel, Repository e Networking
Le estensioni esprimono tutta la loro potenza quando vengono integrate in una Clean Architecture moderna. Possono infatti:
Vediamo alcuni esempi.
1. Una sealed class Result centralizzata
Per gestione coerente degli stati:
2. Estensione per gestire il Result nel ViewModel
Molto utile per aggiornare lo UI State:
Esempio d’uso:
3. safeCall per le chiamate Retrofit
Una sola estensione evita try/catch sparsi:
Repository molto più pulito:
4. Estensione sugli interceptor per header dinamici
5. DTO to Domain con estensioni e map
Abbinato a:
Repository:
6. Validazione dei dati backend
Applicata in:
Articoli recenti
Categorie
Business Overview
Contatti
Via Mario Giuntini 29, 56021- Navacchio (PI)
(+39) 339 8041866
info@intouch-srl.com
Lunedì-Venerdì: 09:00 - 18:00