Sviluppo Mobile

Insert title here.

Definizione di Sequence

Una Sequence in Kotlin è un’interfaccia che rappresenta una collezione di elementi che possono essere elaborati in modo pigro (lazy). A differenza delle liste, che vengono valutate immediatamente, le Sequence vengono elaborate elemento per elemento solo quando necessario. Questo le rende estremamente efficienti per operazioni su grandi set di dati o calcoli complessi.

// Generazione dei numeri primi
val primes: Sequence<Int> = sequence {
    // Dichiara una sequenza di numeri interi
    var numbers = generateSequence(2) { it + 1 }

    while (true) {
        // Crea un ciclo infinito per generare numeri primi
        val prime = numbers.first()
        // Preleva il primo numero della sequenza (inizialmente 2)

        yield(prime)
        // Emette il numero primo corrente nella sequenza risultante

        numbers = numbers.drop(1).filter { it % prime != 0 }
        // Rimuove il primo numero e filtra gli altri 
        // escludendo i multipli del numero primo corrente
    }
}

// Esempio 1: Generazione dei primi 10 numeri primi
val first10Primes = primes.take(10).toList()
println(first10Primes)
// Output: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

// Sequenza di quadrati
val squares = generateSequence(1) { it + 1 }
    .map { it * it }
    .take(5)
    .toList()
println(squares)
// Output: [1, 4, 9, 16, 25]

// Fibonacci con Sequence
val fibonacci = sequence {
    var a = 0
    var b = 1
    while (true) {
        yield(a)
        val temp = a + b
        a = b
        b = temp
    }
}
println(fibonacci.take(10).toList())
// Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Vantaggi delle Sequence

  1. Valutazione Lazy: Calcola gli elementi solo quando necessario
  2. Efficienza di Memoria: Non crea interi intermedi
  3. Performance: Ideale per operazioni su grandi collezioni
  4. Composabilità: Facile da combinare con altre operazioni funzionali

Dove Usare le Sequence

  • Elaborazione di grandi set di dati
  • Calcoli matematici complessi
  • Generazione di serie infinite
  • Trasformazioni di dati complesse
  • Quando si vuole evitare la valutazione immediata

Le Sequence sono particolarmente utili quando si devono elaborare grandi quantità di dati senza caricarli completamente in memoria.