🔄 Вернёмся к теме вопросов на job interview!

В продолжение предыдущего поста о паттерне Итератор.

Само собой, вы уже рассказали об интерфейсах IEnumerable и IEnumerator, перечислили методы и свойства интерфейса IEnumerator:

• MoveNext()

• Reset()

• Current

Рассказали, как они работают.

🤔 Логичным будет следующий вопрос:

Что вы знаете про yield?

Уже в следующем уроке мы этот самый yield подробно разберём!

Будут бенчмарки с пруфами!

🔑 А пока, вот основные моменты, которые стоит помнить о yield:

1️⃣ Разворачивается в стейт-машину

При компиляции метод с yield преобразуется в скрытый класс, который управляет состоянием итерации (реализует IEnumerator).

2️⃣ Отложенное выполнение

Код внутри метода с yield не выполняется сразу, а только тогда, когда последовательность начинает перечисляться (например, в цикле foreach).

Это может значительно повысить производительность, так как позволяет получать элементы по одному, а не всю коллекцию сразу. Чем больше элементов в коллекции, тем больше мы выигрываем в производительности.

3️⃣ Эффективное использование памяти

Поскольку элементы обрабатываются по очереди, yield позволяет работать с большими коллекциями, не занимая много оперативной памяти. Это особенно полезно при обработке сотен тысяч объектов, когда нет необходимости хранить всю коллекцию в памяти. Используем меньше памяти. Реже отрабатывает сборщик мусора, что довольно накладно.



З.Ы. На Udemy эта тема уже есть. Там я буду выкладывать всё немного раньше в качестве благодарности за финансовую поддержку. https://www.udemy.com/course/simplecode-cshap/?referralCode=53C0314076F77DCC2A02