Mario Fusco

Core developer di Drools.

    Lazy Java

    Come per tutti gli altri linguaggi imperativi Java, con qualche piccola eccezione, è un linguaggio eagerly evaluated. Nonostante ciò, l’introduzione delle lambda in Java 8 ha consentito l’adozione di alcuni pattern e strutture dati lazy che sono più tipicamente impiegati nei linguaggi funzionali. Gli Stream rappresentano l’esempio più evidente di come anche le Java API native si sono avvantaggiate con la laziness, ma ci sono diversi altri scenari interessanti dove la laziness può essere un’efficace soluzione a problemi abbastanza comuni. Infatti la laziness è la sola tecnica possibile per processare quantità di dati potenzialmente infiniti o, più in generale per ritardare la costosa valutazione di un’espressione solo quando strettamente necessario. Ma la laziness è anche più di questo: per esempio la reader monad non solo è in grado di ritardare la valutazione di un’espressione, ma anche la necessità di dipendenze esterne, mentre un trampolino usa la laziness per ritardare e quindi linearizzare le funzioni ricorsive in modo da evitare l’overflow dello stack. Lo scopo di questo talk è illustrare con esempi pratici come implementare la laziness e perchè.