Функциональные возможности: итераторы и замыкания
Дизайн Rust вдохновлялся многими существующими языками и приёмами, и одно из заметных влияний — функциональное программирование. Программирование в функциональном стиле часто подразумевает, что функции используются как значения: их передают аргументами, возвращают из других функций, сохраняют в переменных, чтобы выполнить позже, и так далее.
В этой главе мы не будем спорить о том, что такое функциональное программирование, а что нет. Вместо этого поговорим о возможностях Rust, похожих на возможности многих языков, которые часто называют функциональными.
А именно, мы рассмотрим:
- замыкания (closures) — похожую на функцию конструкцию, которую можно сохранить в переменной;
- итераторы (iterators) — способ обрабатывать последовательность элементов;
- как с помощью замыканий и итераторов улучшить проект с вводом-выводом из главы 12;
- производительность замыканий и итераторов (спойлер: они быстрее, чем вы думаете!).
Некоторые другие возможности Rust, тоже появившиеся под влиянием функционального стиля, — например, сопоставление с образцом и перечисления — мы уже разобрали. Умение пользоваться замыканиями и итераторами — важная часть написания быстрого идиоматичного кода на Rust, поэтому им посвящена целая глава.