Проведя немного времени, изучая функциональное программирование, мне становится все более естественным желание работать со статическими методами, которые не выполняют никакой мутации.
Есть ли причины, по которым я должен обуздать этот инстинкт?
Проведя немного времени, изучая функциональное программирование, мне становится все более естественным желание работать со статическими методами, которые не выполняют никакой мутации.
Есть ли причины, по которым я должен обуздать этот инстинкт?
Вопрос, который я нахожу немного странным, потому что статические методы и методы, которые не выполняют никаких мутаций, являются двумя ортогональными классификациями методов. У вас могут быть мутирующие статические методы и непустые методы экземпляра.
Для меня стало более естественным комбинировать функциональное и оо программирование; Мне нравятся методы экземпляра, которые не выполняют никаких мутаций. Функциональное программирование легче понять, поскольку оно препятствует сложным мутациям; Программирование OO легче понять, потому что код и данные, с которыми он работает, находятся близко друг к другу. Зачем выбирать? Объявите силу "и"; сделай оба!
Вы можете писать рабочие программы таким образом, но это не идиоматично. Если вы хотите работать в команде, я бы попытался обуздать ее. Если никто не читает ваш код, перейдите в гайку.
По какой-то причине я думаю об этой цитате, когда я читаю ваш вопрос:
Вы можете написать Fortran на любом языке.
Если намерение С# должно быть чисто функциональным, static
было бы лишним, потому что по умолчанию было бы статическим. Если вы строго придерживаетесь правил ООП и принципов SOLID, ваш код эффективно становится функциональным (я знаю там цитату о нем где-то там), поэтому вы получаете лучшее из обоих миров.
Причина, по которой я буду обуздать ее в многопользовательском проекте, будет заключаться в том, что это не типичный С# (это действительно С# с наручниками). Вам просто нужен один человек, чтобы нарушить правило и объявить статичное изменяемое свойство, и все идет в ад.
Не совсем. Мне нравятся мои методы расширения и Linq, но OO-язык следует использовать в стиле OO. Кроме того, все это необходимо для CPU, и для нескольких слоев поверх этого.
Отличный вопрос.
Я думаю, что ответ зависит от контекста того, что делает ваш код, и насколько он статичен.
В моем коде было меньше статических случаев, так как я программирую много интерфейсов и отмечаю некоторые защищенные виртуальные методы, а не "статические" для таких случаев, как извлечение экземпляра и переопределение шаблона. Это не означает, что вы не можете просто вызвать статические методы из них.
Есть много причин, которые должны сдерживать этот инстинкт при написании ООП.
Состояние и поведение объекта;
Параметры статического класса и метода, и вы должны быть уверены, какие параметры будут переданы статическим методам. Но класс управляет собой, если метод связан с состоянием.
Я думаю, что только эта причина достаточно для ограничения статических модификаторов.
И по понятной причине мы должны послушать г-жу Лисков. здесь