0Pricing
Scala for Backend Engineering & Functional Programming · Lezione

Approfondimento sulle collezioni immutabili

Esplori collezioni immutabili fondamentali come List, Map e Set e impari a utilizzarle in modo efficiente.

Approfondimento sulle collezioni immutabili è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 3 lezioni in totale.

Collezioni immutabili: panoramica

Benvenuto nel mondo delle collezioni immutabili! In Scala sono fondamentali per scrivere codice robusto, concorrente e prevedibile, soprattutto nella programmazione funzionale.

Esploreremo tipi fondamentali come List, Map e Set, concentrandoci sul loro utilizzo efficiente e sicuro.

Perché l'immutabilità è importante

Immutabilità significa che, una volta creata, una collezione non può essere modificata. Qualsiasi operazione che sembra “modificarla” restituisce in realtà una nuova collezione.

  • Prevedibilità: è più facile comprendere il comportamento del codice.
  • Sicurezza dei thread: non servono lock, perché i dati non cambiano.
  • Nessun effetto collaterale: le operazioni non alterano inaspettatamente i dati altrove.

Liste Scala: sequenze ordinate

Una List in Scala è una sequenza immutabile e ordinata di elementi dello stesso tipo. È ideale per dati sequenziali in cui l'ordine è importante.

Può creare una lista semplicemente elencandone gli elementi.

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(1, 2, 3, 4, 5)
    val fruits = List("apple", "banana", "cherry")
    println(s"Numbers list: $numbers")
    println(s"Fruits list: $fruits")
  }
}

Operazioni sulle liste: head, tail e cons

Le liste offrono operazioni comuni come ottenere la head (il primo elemento) e la tail (il resto della lista). L'operatore :: (cons) serve per anteporre un elemento, creando una nuova lista.

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(10, 20, 30)
    println(s"Original list: $numbers")
    println(s"Head of list: ${numbers.head}") // 10
    println(s"Tail of list: ${numbers.tail}") // List(20, 30)
    val newList = 5 :: numbers // Prepend 5
    println(s"List with 5 prepended: $newList")
  }
}

Map Scala: associazioni chiave-valore

Una Map è una collezione immutabile che memorizza coppie chiave-valore. Ogni chiave è univoca ed è associata a un solo valore. Le mappe sono ideali per cercare valori tramite una chiave specifica.

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Alice" -> 30, "Bob" -> 25, "Charlie" -> 35)
    val codes = Map(1 -> "One", 2 -> "Two")
    println(s"Ages map: $ages")
    println(s"Codes map: $codes")
  }
}

Operazioni sulle mappe: accesso e aggiornamento

Può accedere ai valori di una Map usando la relativa chiave. Per “aggiornare” o aggiungere una coppia chiave-valore, crea una nuova mappa con le modifiche, lasciando invariata la mappa originale.

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Alice" -> 30, "Bob" -> 25)
    println(s"Original ages: $ages")
    println(s"Bob's age: ${ages("Bob")}")
    val updatedAges = ages + ("Charlie" -> 35) // Add new pair
    println(s"Ages after adding Charlie: $updatedAges")
    val changedAges = updatedAges + ("Alice" -> 31) // Update Alice's age
    println(s"Ages after updating Alice: $changedAges")
  }
}

Set Scala: elementi univoci

Un Set è una collezione immutabile di elementi univoci. A differenza delle liste, l'ordine degli elementi in un Set non è garantito e gli elementi duplicati vengono ignorati automaticamente.

I set sono perfetti per verificare l'appartenenza o garantire l'univocità.

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = Set(1, 2, 2, 3, 4, 3, 5)
    val letters = Set('a', 'b', 'a')
    println(s"Unique numbers: $numbers")
    println(s"Unique letters: $letters")
  }
}

Operazioni sui set: aggiunta, rimozione e unione

Come nel caso di liste e mappe, anche le operazioni sui set, come l'aggiunta o la rimozione di elementi, restituiscono un nuovo Set. È inoltre possibile eseguire operazioni della teoria degli insiemi, come union (unione di set).

object Main {
  def main(args: Array[String]): Unit = {
    val setA = Set(1, 2, 3)
    val setB = Set(3, 4, 5)
    println(s"Set A: $setA")
    println(s"Set B: $setB")
    val addedSet = setA + 4 // Add element
    println(s"Set A + 4: $addedSet")
    val removedSet = setA - 2 // Remove element
    println(s"Set A - 2: $removedSet")
    val unionSet = setA union setB // Combine sets
    println(s"Set A union Set B: $unionSet")
  }
}

Immutabilità: l'originale resta invariato

È fondamentale ricordare che tutte le operazioni di “modifica” sulle collezioni immutabili di Scala restituiscono una nuova collezione. La collezione originale non viene mai modificata.

Questo comportamento è una pietra miliare della programmazione funzionale in Scala.

object Main {
  def main(args: Array[String]): Unit = {
    val originalList = List(10, 20, 30)
    println(s"Original List: $originalList")
    val doubledList = originalList.map(_ * 2) // map returns a NEW list
    println(s"List after map: $doubledList")
    println(s"Original list is still: $originalList") // Unchanged!
  }
}

Verifica della comprensione

Consideri il seguente frammento di codice Scala:

val mySet = Set(1, 2, 3)
val newSet = mySet + 3 + 4
val finalSet = newSet - 2

Quale sarà il valore di mySet dopo queste operazioni?

Riepilogo: collezioni immutabili

Ha esplorato in profondità le collezioni immutabili fondamentali di Scala:

  • Liste: sequenze ordinate, adatte ai dati sequenziali.
  • Mappe: coppie chiave-valore, efficienti per le ricerche.
  • Set: elementi univoci, ideali per verificare l'appartenenza.

Il concetto chiave da ricordare è l'immutabilità: le operazioni restituiscono sempre nuove collezioni, garantendo prevedibilità e sicurezza.

Domande Frequenti

La lezione «Approfondimento sulle collezioni immutabili» è gratuita?

Sì — il testo completo di «Approfondimento sulle collezioni immutabili» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 3 lezioni in totale.

Cosa imparerò in «Approfondimento sulle collezioni immutabili»?

Esplori collezioni immutabili fondamentali come List, Map e Set e impari a utilizzarle in modo efficiente. Eserciti Scala for Backend Engineering & Functional Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Scala for Backend Engineering & Functional Programming?

Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.

Quanto tempo richiede la lezione «Approfondimento sulle collezioni immutabili»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Scala for Backend Engineering & Functional Programming?

Sì. Ogni lezione Scala for Backend Engineering & Functional Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Approfondimento sulle collezioni immutabili
  2. Operazioni funzionali sulle collezioni
  3. Option, Try ed Either per gli errori
← Torna a Scala for Backend Engineering & Functional Programming