Посетитесь в ФП
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 30.07.08 13:07
Оценка:
Добрый день!

Казалось бы, избитая тема, но не дает покоя один вопрос.

Когда речь заходит о паттерне "Посетитель", все говорят что в ФП он не нужен,
потому что паттерн матчинг и вариантные типы устраняют надобность в немздесь
Автор: VladD2
Дата: 12.09.06
и здесь
Автор: Lazy Cjow Rhrr
Дата: 06.01.06
.

Паттерн "Посетитель" выполняет две функции:
1) двойная диспетчеризация (в языках C++/Java/C# и т.п.)
как в этим справляется паттерн матчинг — понятно
2) позволяет переиспользовать логику обхода сложной структуры
а здесь что нам дает паттерн матчинг?

Например, есть AST языка какого то языка, нужно обойти все константные строковые литералы.
При наличии абстрактного посетителя, нужно переопределить метод посещения выражения (VisitExpression) и все.
В ФЯ придется написать большущий match с рекурсией чтобы собрать выражения по всем типам узлов AST.
Если нужно найти все операторы присваивания в коде, опять пишем match на всю структуру.

Дублировать логику обхода структур в порядке вещей для ФП или есть какой то другой подход?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.