Каким принципам я должен следовать в коде на PHP с меньшим количеством Java-подобных объектов и больше похожим на принципы функционального программирования Clojure? - PullRequest
3 голосов
/ 03 августа 2010

Я познакомился с Clojure не так давно, и хотя я не полностью усвоил все его концепции, он дал мне альтернативу ОО Java и PHP, к которой я действительно хочу двигаться.Я считаю системы Clojure моим идеалом.Я знаю, что хочу, чтобы он как можно больше информировал о моем стиле кодирования PHP.

Мне действительно не нравится ОО в PHP, я ненавижу количество шаблонов и скрытую сложность, которая часто кажетсяпривести к.В то же время я вижу преимущества инкапсуляции, когда у вас есть несколько битов данных, которые имеют возможность изменять себя.Может быть, использование функций 1-го порядка является основным способом обеспечения такой инкапсуляции, но помимо этого, как можно перевести преимущества объектной ориентации в функциональное программирование?

Одна часть проблемы, с которой я сейчас сталкиваюсь, заключается в том, какиметь дело с набором связанных функций, которые в противном случае могли бы быть сгруппированы в классе, таким образом, чтобы они были полезны друг для друга.

Ответы [ 2 ]

3 голосов
/ 03 августа 2010

Из статьи Эдварда Гарсона в книге «97 вещей, которую должен знать каждый программист» в статье под названием «Применение принципов функционального программирования», он сводится к следующему:

Ссылочная прозрачность http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)

Я думаю, что любой ОО-язык может быть в некоторой степени написан с функциональным стилем, и я думаю, что лучший способ думать об этом - это всегда возвращать что-то.если вы изменяете структуру данных, возвращаете копию структуры данных с примененной мутацией, не меняйте исходную структуру данных.Если вам нужно изменить состояние объекта, будьте очень декларативны.И, наконец, не вдаваясь в подробности, напишите модульные тесты для своих методов, потому что это заставит вас писать больше методов, более сфокусированных на намерениях, и когда вы получите отдачу от этих методов, их будет гораздо проще тестировать.

1 голос
/ 03 августа 2010

Я не знаю, какие функции имеет php, но, насколько я знаю, передача функций (и методов) довольно ужасна, и существует около 10 способов сделать это, поэтому это будет непросто. Для общего совета вот некоторые стандартные вещи:

  • не используйте классы, если вам не нужны иерархии
  • избегать глобальной статистики
  • написать функциональные слои поверх обязательных библиотек
  • определяет функции более высокого порядка для обработки данных (если это возможно)

Я не думаю, что PHP хорош для FP. Это полностью против философии «дизайна». Лучше всего было бы избегать php все вместе, но это не всегда возможно.

...