Верно ли это утверждение, что Java 8 предоставляет функциональный стиль, но не является функциональным программированием? - PullRequest
0 голосов
/ 01 ноября 2019

Верно ли это утверждение, что Java 8 предоставляет функциональный стиль, но не является функциональным программированием, поскольку синтаксис, который он использует, также является объектом?

 Calculator calc = (i, j) ->  i/j;

Если да, то почему мы везде получаем статьи с функциональным программированиемJava 8?

1 Ответ

3 голосов
/ 01 ноября 2019

Вот (не исчерпывающий) список абстрактных концепций FP:

  1. Фокус на неизменности
  2. Ссылочная прозрачность для функций
  3. Ограничения на побочные эффекты (следует из 1 и 2)
  4. на основе выражений, без утверждений. Операторы не являются первоклассными.
  5. Функции как значения первого класса.
  6. Состояние изменяется как значения первого класса (например, атомы Clojure).
  7. Алгебраические типы данных как фундаментальныеед.
  8. Выполнение некоторых или всего вышеперечисленного с помощью системы типов.

И я мог бы продолжить. Языку не обязательно ставить галочку в каждом поле в списке, чтобы он был «Функциональным языком программирования» (на самом деле я не могу думать ни о каком, отвечающем всем из этих пунктов), но чем больше ящиков,помечает меньше квалификации, которую вы должны дать, чтобы дать ему этот ярлык. И именно поэтому Java не подходит для многих функциональных программистов: она просто не проверяет очень многие (возможно, только один) из вышеперечисленных пунктов.

Это не означает, что вы не можете заниматься функциональным программированием на Java, но это сложно. Язык дает вам слишком мало инструментов, с которыми вам нужно работать, а это означает, что вам придется написать много шаблонного кода для кодирования необходимых примитивов в виде классов, а это означает, что ваш код будет работать медленнее и сложнее (и это до того, как вы получитев вопросе о 15 различных реализациях этих конкурирующих специальных библиотек этих примитивов).

Вы можете рассматривать ваши объекты как неизменяемые, выражать предпочтения над выражениями (например, используя тернарный оператор вместо if / else), делая большинствоиз ваших методов - чистые функции, сходите с ума с лямбдами и т. д., но, в конце концов, все еще есть много трений, как с языком, так и с ожиданиями сообщества.

...