Sobes.tech
Middle

Mi az a next metódus az iterátorokban, és hogyan valósítják meg?

sobes.tech MI

Válasz az MI-től

Az iterátorokban a next metódus felelős a következő elem megszerzéséért a sorozatban. Általában visszaadja a jelenlegi elemet, és előre lépteti a belső mutatót a következőre. Ha nincs több elem, a metódusnak jeleznie kell az iteráció végét (például Pythonban StopIteration kivételt dobva vagy egy speciális értéket visszaadva).

Go-ban az iterátorokat nem olyan explicit módon valósítják meg, mint Pythonban, de létrehozhatunk egy struktúrát Next() bool metódussal a következő elemhez való lépéshez és Value() T metódussal a jelenlegi érték lekéréséhez.

Példa Go-ban:

package main
import "fmt"

type IntIterator struct {
    data []int
    pos  int
}

func (it *IntIterator) Next() bool {
    if it.pos < len(it.data) {
        it.pos++
        return true
    }
    return false
}

func (it *IntIterator) Value() int {
    return it.data[it.pos-1]
}

func main() {
    it := IntIterator{data: []int{10, 20, 30}}
    for it.Next() {
        fmt.Println(it.Value())
    }
}

Itt a Next lépteti a pozíciót és true-t ad vissza, ha van következő elem, a Value pedig az aktuális elemet adja vissza.