Я нашел принципы SOLID весьма полезными, когда размышляю над объектно-ориентированным дизайном.
Существует ли подобный / эквивалентный набор не зависящих от языка принципов, адаптированных для функционального программирования?
Я нашел принципы SOLID весьма полезными, когда размышляю над объектно-ориентированным дизайном.
Существует ли подобный / эквивалентный набор не зависящих от языка принципов, адаптированных для функционального программирования?
Ответы:
Это немного трудно найти эквиваленты, но я могу попробовать:
SOLID оказывается хорошей идеей и для функциональных / императивных сфер.
SRP - « Делай только одно» было взято из императивного программирования в первую очередь. Иметь маленькие, сфокусированные функции - это хорошо.
OCP - Позволять вам изменять поведение без изменения кода - это хорошо. Функциональное программирование использует функции более высокого порядка больше, чем наследование, но принцип верен.
LSP - соблюдение некоторого контракта интерфейса так же хорошо в функциональном программировании, как и в объектно-ориентированном. Если функция сортировки использует компаратор, то можно ожидать, что поведение «0 равно, меньше, чем дает отрицательные результаты, больше, чем положительные результаты».
ISP - у большинства функциональных языков все еще есть структуры. Указание наименьшего набора данных, требуемого функцией, все еще является хорошей практикой. Требование наименее специфического интерфейса к данным (зачем использовать списки целых чисел, когда перечисления T работают так же хорошо?) - все еще хорошая практика.
DIP - Задание параметров для функции (или функции более высокого порядка для их извлечения), а не жесткое кодирование функции для получения некоторого значения, столь же хорошо в функциональном программировании, как и в объектно-ориентированном.
И даже при выполнении объектно-ориентированного программирования многие из этих принципов применимы и к разработке методов в объектах.