В Go наконец-то добавили итераторы 🚀
Я часто ругаю JS, что в нем понятие итератора появилось только в спецификации 2015 года, а нормальная поддержка операций над итераторами только сейчас завозится.
При этом Python, Java, C#, ...подставь нужный яп... уже 100 лет в обед, или даже с самого начала поддерживали эту концепцию.
В новых ЯП, таких как Rust или Julia это напрямую влияет на дизайн стандартной библиотеки.
А вот в JS их долго не было и это порядком испортило дизайн языка. Тут вам и куча разных циклов. И неочевидная семантика функций forEach/map и т.д.
Но хватит о JS. Тут вышел новый Go 1.23 , в который тоже завезли поддержку итераторов. Удивительно, но современный Go не имел такой поддержки. Более того, дженерики в нем появились даже раньше 🙈
- В циклах "for" при определении диапазонов значений появилась возможность указания функции в качестве аргумента выражения "range" для использования этой функции в качестве итератора, что позволяет создавать собственные итераторы для любых последовательностей. Возможно указание функций следующих типов:
- Добавлен новый пакет iter, предоставляющий базовые операции для организации перебора последовательностей. Кроме того, в пакеты slices и maps добавлены новые возможности для работы с итераторами. Например, для перебора ключей ассоциативного массива в отсортированном виде теперь можно указать
Подробнее про релиз.
Одним словом здорово, что добавили. Но, странно, что только сейчас.
Всем базы! 🚀
Я часто ругаю JS, что в нем понятие итератора появилось только в спецификации 2015 года, а нормальная поддержка операций над итераторами только сейчас завозится.
При этом Python, Java, C#, ...подставь нужный яп... уже 100 лет в обед, или даже с самого начала поддерживали эту концепцию.
В новых ЯП, таких как Rust или Julia это напрямую влияет на дизайн стандартной библиотеки.
А вот в JS их долго не было и это порядком испортило дизайн языка. Тут вам и куча разных циклов. И неочевидная семантика функций forEach/map и т.д.
Но хватит о JS. Тут вышел новый Go 1.23 , в который тоже завезли поддержку итераторов. Удивительно, но современный Go не имел такой поддержки. Более того, дженерики в нем появились даже раньше 🙈
- В циклах "for" при определении диапазонов значений появилась возможность указания функции в качестве аргумента выражения "range" для использования этой функции в качестве итератора, что позволяет создавать собственные итераторы для любых последовательностей. Возможно указание функций следующих типов:
func(func() bool)
, func(func(K) bool)
и func(func(K, V) bool)
.- Добавлен новый пакет iter, предоставляющий базовые операции для организации перебора последовательностей. Кроме того, в пакеты slices и maps добавлены новые возможности для работы с итераторами. Например, для перебора ключей ассоциативного массива в отсортированном виде теперь можно указать
for i, x := range slices.Sorted(maps.Keys(m)) {...}
. Подробнее про релиз.
Одним словом здорово, что добавили. Но, странно, что только сейчас.
Всем базы! 🚀