Sobes.tech
Middle
21

Что такое метод next в итераторах и как он реализуется?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Метод next в итераторах отвечает за получение следующего элемента последовательности. Он обычно возвращает текущий элемент и сдвигает внутренний указатель на следующий. Если элементов больше нет, метод должен сигнализировать об окончании итерации (например, выбрасывать исключение StopIteration в Python или возвращать специальное значение).

В Go итераторы реализуются не так явно, как в Python, но можно создать структуру с методом Next() bool для перехода к следующему элементу и методом Value() T для получения текущего значения.

Пример на Go:

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())
    }
}

Здесь Next сдвигает позицию и возвращает true, если есть следующий элемент, а Value возвращает текущий элемент.