typestar

range sobre funciones en Go

Go 1.23 permite hacer range sobre una función: así funcionan los iteradores ahora.

func Countdown(from int) iter.Seq[int] {
    return func(yield func(int) bool) {
        for n := from; n > 0; n-- {
            if !yield(n) {
                return
            }
        }
    }
}

func Enumerate[T any](values []T) iter.Seq2[int, T] {
    return func(yield func(int, T) bool) {
        for i, value := range values {
            if !yield(i, value) {
                return
            }
        }
    }
}

func use() (int, string) {
    sum := 0
    for n := range Countdown(4) {
        sum += n
    }

    var last string
    for _, value := range Enumerate([]string{"a", "b"}) {
        last = value
    }
    return sum, last
}

Cómo funciona

  1. Un iterador es una func que toma un callback yield.
  2. Devolver false desde yield detiene la iteración.
  3. iter.Seq e iter.Seq2 nombran las dos formas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
32
Caracteres a escribir
479
Tokens
160
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 87 segundos.

Escribe este fragmento

Paso 2 de 2 en Formas de API; paso 18 de 19 en Interfaces y genéricos.

← Anterior Siguiente →