Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions html-generators/locales.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ ar=🇸🇦 العربية
fr=🇫🇷 Français
ja=🇯🇵 日本語
ko=🇰🇷 한국어
it=🇮🇹 Italiano
18 changes: 18 additions & 0 deletions translations/content/it/collections/collectors-teeing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Collectors.teeing()
oldApproach: Due passaggi
modernApproach: teeing()
summary: "Calcola due aggregazioni in un unico passaggio dello stream."
explanation: "Collectors.teeing() invia ogni elemento a due collector downstream e unisce i risultati. Evita di scorrere i dati due volte o di usare un accumulatore mutabile."
whyModernWins:
- icon: ⚡
title: Passaggio singolo
desc: "Elabora lo stream una volta invece di due."
- icon: 🧩
title: Componibile
desc: "Combina qualsiasi due collector con una funzione di unione."
- icon: 🔒
title: Risultato immutabile
desc: "Unisci direttamente in un record o value object."
support:
description: Ampiamente disponibile dal JDK 12 (marzo 2019)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Copia di collezioni in modo immutabile
oldApproach: Copia manuale + Wrap
modernApproach: List.copyOf()
summary: "Crea una copia immutabile di qualsiasi collezione in una chiamata."
explanation: "List.copyOf(), Set.copyOf() e Map.copyOf() creano snapshot immutabili di collezioni esistenti. Se la sorgente è già una collezione immutabile, non viene effettuata alcuna copia."
whyModernWins:
- icon: ⚡
title: Copia intelligente
desc: "Salta la copia se la sorgente è già immutabile."
- icon: 📏
title: Una chiamata
desc: "Nessuna costruzione manuale di ArrayList + wrapping."
- icon: 🛡️
title: Copia difensiva
desc: "Le modifiche all'originale non influenzano la copia."
support:
description: Ampiamente disponibile dal JDK 10 (marzo 2018)
18 changes: 18 additions & 0 deletions translations/content/it/collections/immutable-list-creation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Creazione di liste immutabili
oldApproach: Wrapping verboso
modernApproach: List.of()
summary: "Crea liste immutabili in un'unica espressione pulita."
explanation: "List.of() crea una lista veramente immutabile — nessun wrapping, nessuna copia difensiva. È ostile ai null (rifiuta elementi null) e strutturalmente immutabile. Il vecchio modo richiedeva tre chiamate annidate."
whyModernWins:
- icon: 📏
title: Una chiamata
desc: "Sostituisci tre chiamate annidate con un singolo metodo factory."
- icon: 🔒
title: Veramente immutabile
desc: "Non è solo un wrapper — la lista stessa è immutabile."
- icon: 🛡️
title: Null-safe
desc: "Rifiuta gli elementi null al momento della creazione, fallendo rapidamente."
support:
description: Ampiamente disponibile dal JDK 9 (settembre 2017)
18 changes: 18 additions & 0 deletions translations/content/it/collections/immutable-map-creation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Creazione di mappe immutabili
oldApproach: Pattern Builder per Map
modernApproach: Map.of()
summary: "Crea mappe immutabili inline senza un builder."
explanation: "Map.of() accetta coppie chiave-valore inline e restituisce una mappa immutabile. Per più di 10 voci, usa Map.ofEntries() con coppie Map.entry()."
whyModernWins:
- icon: 📏
title: Creazione inline
desc: "Non serve una mappa mutabile temporanea."
- icon: 🔒
title: Risultato immutabile
desc: "La mappa non può essere modificata dopo la creazione."
- icon: 🚫
title: Nessuna chiave/valore null
desc: "Le voci null vengono rifiutate immediatamente."
support:
description: Ampiamente disponibile dal JDK 9 (settembre 2017)
18 changes: 18 additions & 0 deletions translations/content/it/collections/immutable-set-creation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Creazione di set immutabili
oldApproach: Wrapping verboso
modernApproach: Set.of()
summary: "Crea set immutabili con una singola chiamata factory."
explanation: "Set.of() crea un set veramente immutabile che rifiuta null e elementi duplicati al momento della creazione. Niente più wrapping di set mutabili."
whyModernWins:
- icon: 📏
title: Conciso
desc: "Una riga invece di tre chiamate annidate."
- icon: 🚫
title: Rileva duplicati
desc: "Lancia un'eccezione se passi accidentalmente elementi duplicati."
- icon: 🔒
title: Immutabile
desc: "Nessuna aggiunta/rimozione possibile dopo la creazione."
support:
description: Ampiamente disponibile dal JDK 9 (settembre 2017)
18 changes: 18 additions & 0 deletions translations/content/it/collections/map-entry-factory.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Factory Map.entry()
oldApproach: SimpleEntry
modernApproach: Map.entry()
summary: "Crea voci di mappa con un metodo factory pulito."
explanation: "Map.entry() sostituisce il verboso costruttore AbstractMap.SimpleEntry. Restituisce una voce immutabile, rendendola ideale per Map.ofEntries() e le operazioni stream."
whyModernWins:
- icon: 📏
title: Conciso
desc: "Una riga invece di tre con un'intenzione più chiara."
- icon: 🔒
title: Immutabile
desc: "La voce restituita non può essere modificata."
- icon: 🧩
title: Componibile
desc: "Funziona perfettamente con Map.ofEntries() per mappe grandi."
support:
description: Ampiamente disponibile dal JDK 9 (settembre 2017)
18 changes: 18 additions & 0 deletions translations/content/it/collections/reverse-list-iteration.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Iterazione inversa di lista
oldApproach: ListIterator manuale
modernApproach: reversed()
summary: "Itera su una lista in ordine inverso con un ciclo for-each pulito."
explanation: "Il metodo reversed() di SequencedCollection restituisce una vista ordinata in senso inverso della lista. Questa vista è supportata dalla lista originale, quindi non si verifica alcuna copia. La sintassi del ciclo for potenziato rende l'iterazione inversa leggibile quanto quella diretta."
whyModernWins:
- icon: 📖
title: Sintassi naturale
desc: "Ciclo for potenziato invece del verboso ListIterator."
- icon: ⚡
title: Nessuna copia
desc: "reversed() restituisce una vista — nessun overhead di prestazioni."
- icon: 🧩
title: API coerente
desc: "Funziona su List, Deque, SortedSet in modo uniforme."
support:
description: Ampiamente disponibile dal JDK 21 LTS (settembre 2023)
18 changes: 18 additions & 0 deletions translations/content/it/collections/sequenced-collections.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Collezioni sequenziate
oldApproach: Aritmetica degli indici
modernApproach: getFirst/getLast
summary: "Accedi ai primi/ultimi elementi e alle viste inverse con metodi API puliti."
explanation: "SequencedCollection aggiunge getFirst(), getLast(), reversed(), addFirst(), addLast() a List, Deque, SortedSet e LinkedHashSet. Niente più aritmetica size-1 o iterazione inversa manuale."
whyModernWins:
- icon: 📖
title: Auto-documentante
desc: "getLast() è più chiaro di get(size()-1)."
- icon: 🔄
title: Vista invertita
desc: "reversed() fornisce una vista — nessuna copia necessaria."
- icon: 🧩
title: API uniforme
desc: "Funziona allo stesso modo su List, Deque, SortedSet."
support:
description: Ampiamente disponibile dal JDK 21 LTS (settembre 2023)
18 changes: 18 additions & 0 deletions translations/content/it/collections/stream-toarray-typed.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Stream toArray tipizzato
oldApproach: Copia manuale dell'array
modernApproach: toArray(generatore)
summary: "Converti gli stream in array tipizzati con un riferimento a metodo."
explanation: "Il metodo toArray(IntFunction) crea un array correttamente tipizzato da uno stream. Il generatore (String[]::new) indica allo stream quale tipo di array creare."
whyModernWins:
- icon: 🎯
title: Type-safe
desc: "Nessun cast a Object[] — il tipo dell'array è corretto."
- icon: 🔗
title: Concatenabile
desc: "Funziona alla fine di qualsiasi pipeline stream."
- icon: 📏
title: Conciso
desc: "Un'espressione sostituisce il loop manuale."
support:
description: Ampiamente disponibile dal JDK 8 (marzo 2014)
18 changes: 18 additions & 0 deletions translations/content/it/collections/unmodifiable-collectors.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Collector non modificabili
oldApproach: collectingAndThen
modernApproach: stream.toList()
summary: "Raccogli direttamente in una lista non modificabile con stream.toList()."
explanation: "Java 10 ha aggiunto toUnmodifiableList(), toUnmodifiableSet() e toUnmodifiableMap() per sostituire il verboso wrapper collectingAndThen. Per le liste in particolare, stream.toList() di Java 16 fornisce un'alternativa ancora più semplice — nessuna chiamata a collect(). Usa toUnmodifiableSet() e toUnmodifiableMap() per altri tipi di collezione."
whyModernWins:
- icon: 📏
title: Il più breve
desc: "stream.toList() non necessita di collect() né dell'importazione di Collectors."
- icon: 🔒
title: Immutabile
desc: "Il risultato non può essere modificato — nessuna mutazione accidentale."
- icon: 📖
title: Leggibile
desc: "Si legge naturalmente come passo terminale di qualsiasi pipeline stream."
support:
description: Ampiamente disponibile dal JDK 16 (marzo 2021)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Concatenazione CompletableFuture
oldApproach: Future.get() bloccante
modernApproach: CompletableFuture
summary: "Concatena operazioni asincrone senza bloccare, usando CompletableFuture."
explanation: "CompletableFuture abilita pipeline asincrone non bloccanti. Concatena le operazioni con thenApply, thenCompose, thenAccept. Gestisci gli errori con exceptionally(). Combina più future con allOf/anyOf."
whyModernWins:
- icon: 🔗
title: Concatenabile
desc: "Componi i passi asincroni in una pipeline leggibile."
- icon: 🚫
title: Non bloccante
desc: "Nessun thread rimane inattivo ad aspettare i risultati."
- icon: 🛡️
title: Gestione degli errori
desc: "exceptionally() e handle() per un recupero pulito degli errori."
support:
description: Ampiamente disponibile dal JDK 8 (marzo 2014)
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/concurrent-http-virtual.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: HTTP concorrente con thread virtuali
oldApproach: Pool di thread + URLConnection
modernApproach: Thread virtuali + HttpClient
summary: "Recupera molti URL in modo concorrente con thread virtuali e HttpClient."
explanation: "I thread virtuali rendono pratico creare un thread per richiesta HTTP. Combinati con HttpClient, questo sostituisce i complessi pattern di callback asincroni con semplice codice bloccante che scala."
whyModernWins:
- icon: ♾️
title: Thread per richiesta
desc: "Nessun dimensionamento del pool — un thread virtuale per URL."
- icon: 📖
title: Codice semplice
desc: "Scrivi codice bloccante semplice."
- icon: ⚡
title: Alta produttività
desc: "Migliaia di richieste concorrenti con risorse minime."
support:
description: Ampiamente disponibile dal JDK 21 LTS (settembre 2023)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Chiusura automatica ExecutorService
oldApproach: Shutdown manuale
modernApproach: try-with-resources
summary: "Usa try-with-resources per lo shutdown automatico dell'executor."
explanation: "Da Java 19, ExecutorService implementa AutoCloseable. Il metodo close() chiama shutdown() e attende il completamento dei task. Niente più pattern try/finally per lo shutdown manuale."
whyModernWins:
- icon: 🧹
title: Pulizia automatica
desc: "Lo shutdown avviene automaticamente quando il blocco termina."
- icon: 🛡️
title: Nessuna perdita
desc: "L'executor si spegne sempre, anche se si verificano eccezioni."
- icon: 📖
title: Pattern familiare
desc: "Stesso try-with-resources usato per file, connessioni, ecc."
support:
description: Ampiamente disponibile dal JDK 19 (settembre 2022)
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/lock-free-lazy-init.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Inizializzazione lazy senza lock
oldApproach: synchronized + volatile
modernApproach: StableValue
summary: "Sostituisci il double-checked locking con StableValue per singleton lazy."
explanation: "StableValue incapsula il pattern di inizializzazione lazy con la corretta thread safety. La JVM può ottimizzare il percorso di lettura dopo l'inizializzazione, rendendolo potenzialmente più veloce delle letture volatile."
whyModernWins:
- icon: 🧹
title: Nessun boilerplate
desc: "Nessun volatile, synchronized o doppio controllo null."
- icon: ⚡
title: Letture più veloci
desc: "La JVM può piegare le costanti dopo l'inizializzazione."
- icon: ✅
title: Provabilmente corretto
desc: "Nessun bug di ordinamento sottile — la JVM lo gestisce."
support:
description: "Anteprima nel JDK 25 (JEP 502, StableValue). Richiede --enable-preview."
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/process-api.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: API Process moderna
oldApproach: Runtime.exec()
modernApproach: ProcessHandle
summary: "Ispeziona e gestisci i processi OS con ProcessHandle."
explanation: "ProcessHandle fornisce PID, informazioni sul processo (comando, argomenti, tempo di avvio, utilizzo CPU), relazioni padre/figlio e distruzione del processo. Niente più accesso agli interni non documentati di Process."
whyModernWins:
- icon: 🔍
title: Informazioni complete
desc: "Accedi a PID, comando, argomenti, tempo di avvio, utilizzo CPU."
- icon: 🌳
title: Albero dei processi
desc: "Naviga tra padre, figli e discendenti."
- icon: 📊
title: Monitoraggio
desc: "onExit() restituisce un CompletableFuture per il monitoraggio asincrono."
support:
description: Ampiamente disponibile dal JDK 9 (settembre 2017)
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/scoped-values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Valori scoped
oldApproach: ThreadLocal
modernApproach: ScopedValue
summary: "Condividi dati attraverso gli stack di chiamate in modo sicuro senza le insidie di ThreadLocal."
explanation: "ScopedValue fornisce contesto immutabile, ereditabile e limitato allo scope. A differenza di ThreadLocal, i valori scoped vengono puliti automaticamente, funzionano con i thread virtuali e non possono essere mutati dai chiamati."
whyModernWins:
- icon: 🔒
title: Immutabile
desc: "I chiamati possono leggere ma non modificare mai il valore scoped."
- icon: 🧹
title: Pulizia automatica
desc: "Nessun remove() manuale — il valore è scoped al blocco."
- icon: ⚡
title: Sicuro per thread virtuali
desc: "Funziona efficientemente con milioni di thread virtuali."
support:
description: "Finalizzato nel JDK 25 LTS (JEP 506, settembre 2025)."
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/stable-values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Valori stabili
oldApproach: Double-checked locking
modernApproach: StableValue
summary: "Inizializzazione lazy thread-safe senza volatile o synchronized."
explanation: "StableValue fornisce un valore inizializzato in modo lazy e immutabile con thread safety integrata. Nessun double-checked locking, nessun campo volatile, nessun blocco synchronized. La JVM può persino ottimizzare il percorso di lettura dopo l'inizializzazione."
whyModernWins:
- icon: 🧹
title: Zero boilerplate
desc: "Nessun volatile, synchronized o controlli null."
- icon: ⚡
title: Ottimizzato dalla JVM
desc: "La JVM può piegare il valore dopo l'inizializzazione."
- icon: 🛡️
title: Garantito una volta
desc: "Il supplier viene eseguito esattamente una volta, anche sotto contesa."
support:
description: "Anteprima nel JDK 25 (JEP 502). Richiede --enable-preview."
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/structured-concurrency.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Concorrenza strutturata
oldApproach: Ciclo di vita del thread manuale
modernApproach: StructuredTaskScope
summary: "Gestisci i cicli di vita dei task concorrenti come un'unica unità di lavoro."
explanation: "La concorrenza strutturata tratta un gruppo di task concorrenti come un'unica operazione. Se un subtask fallisce, gli altri vengono annullati. Lo scope garantisce che non ci siano perdite di thread e fornisce chiare relazioni padre-figlio."
whyModernWins:
- icon: 🛡️
title: Nessuna perdita di thread
desc: "Tutti i task biforcati completano prima che lo scope si chiuda."
- icon: ⚡
title: Fallimento rapido
desc: "ShutdownOnFailure annulla i fratelli se uno fallisce."
- icon: 📐
title: Struttura chiara
desc: "Il ciclo di vita del task corrisponde allo scope lessicale nel codice."
support:
description: "Anteprima nel JDK 25 (quinta anteprima, JEP 505). Richiede --enable-preview."
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/thread-sleep-duration.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Thread.sleep con Duration
oldApproach: Millisecondi
modernApproach: Duration
summary: "Usa Duration per valori di tempo auto-documentanti."
explanation: "Thread.sleep(Duration) rende l'unità di tempo esplicita. Non serve più indovinare se 5000 significa millisecondi o microsecondi. Funziona con Duration.ofSeconds, ofMillis, ofMinutes, ecc."
whyModernWins:
- icon: 📖
title: Auto-documentante
desc: "Duration.ofSeconds(5) è inequivocabile."
- icon: 🛡️
title: Sicuro per unità
desc: "Nessun rischio di passare accidentalmente microsecondi come millisecondi."
- icon: 🧩
title: Componibile
desc: "Aritmetica Duration: plus(), multipliedBy(), ecc."
support:
description: Ampiamente disponibile dal JDK 19 (settembre 2022)
18 changes: 18 additions & 0 deletions translations/content/it/concurrency/virtual-threads.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Thread virtuali
oldApproach: Thread di piattaforma
modernApproach: Thread virtuali
summary: "Crea milioni di thread virtuali leggeri invece di pesanti thread OS."
explanation: "I thread virtuali sono thread leggeri gestiti dalla JVM, non dal sistema operativo. Puoi crearne milioni senza dover dimensionare i thread pool. Sono ideali per task I/O-bound come chiamate HTTP e query al database."
whyModernWins:
- icon: ⚡
title: Leggeri
desc: "I thread virtuali usano KB di memoria, i thread di piattaforma usano MB."
- icon: ♾️
title: Scalabili
desc: "Crea milioni di thread — nessuna necessità di dimensionare i pool."
- icon: 🧹
title: Modello semplice
desc: "Scrivi codice bloccante che scala come il codice asincrono."
support:
description: Ampiamente disponibile dal JDK 21 LTS (settembre 2023)
Loading