Есть ли хорошее сравнение между функциональной Java и гуавой? - PullRequest
13 голосов
/ 23 декабря 2011

Я бы хотел использовать функциональную Java или гуаву (или, менее вероятно, Scala) в курсе, который я буду преподавать.Хотя на JVM работает множество функциональных языков, я бы хотел придерживаться того, что выглядит как Java, насколько это возможно, то есть того, что будет наиболее совместимо, концептуально и синтаксически, с функциональными функциями, ожидаемыми в Java 8..

Похоже, Функциональная Java и Гуава являются лучшими кандидатами.Я не смог найти ничего, сравнивающего их с точки зрения возможностей, простоты использования, концептуальной близости к прямой Java и т. Д. Кто-нибудь знает о хорошем сравнении этих библиотек?

Ответы [ 3 ]

17 голосов
/ 23 декабря 2011

Цель Guava - не предоставлять функциональные идиомы в Java.Со страницы Functional Explained Guava wiki:

Чрезмерное использование идиом функционального программирования Guava может привести к многословному, запутанному, нечитаемому и неэффективному коду.Это, безусловно, наиболее легко (и чаще всего) злоупотребляемые части Гуавы, и когда вы идете на нелепые длины, чтобы сделать свой код «однострочным», команда Гуавы плачет.

Пожалуйста, убедитесь, чтопри использовании функциональных утилит Гуавы традиционный императивный способ ведения дел становится более читабельным.Попробуйте написать это.Это было так плохо?Было ли это более читабельным, чем нелепо нелепый функциональный подход, который вы собирались попробовать?

Слишком сильное использование функциональных идиом не имеет особого смысла для Java 7, поскольку накладные расходы слишком высоки (см. вертикальная задача ).Это изменится в Java 8, что изменит способ проектирования библиотек и программ Java на уровне детализации.Вещи, имеющие смысл в Java до 7, будут в некоторой степени обескуражены в Java 8. Это будет мотивировать новое издание Effective Java и множество новых API.

Если вы пытаетесь научить функциональному программированиювероятно, лучше придерживаться (более или менее) чисто функционального языка.Каждый язык, который является меланжем (или эмуляцией) FP и ООП, будет отвлекать.

6 голосов
/ 23 декабря 2011

Как указано выше, Guava - это просто библиотека Java - даже библиотека, совместимая с Java 5 (начиная с версии 11). Кевин Бурриллион подытожил позицию Гуавы по функциональному программированию:

«Синтаксис отстой. В то же время, этот материал сейчас, всегда был и всегда будет не чем иным, как временной мерой, пока не произойдет правильное изменение языка, и тогда мы сможем окончательно определиться с оптимальным синтаксисом и начать программирование в функциональном стиле на самом деле делает жизнь лучше в Java на этот раз. Поэтому я не знаю, сколько усилий нужно приложить к функциям / предикатам; это больше в библиотеке, потому что это должно было быть, не так много, потому что мы думаем, что это жемчужина короны ».

4 голосов
/ 07 февраля 2012

Поскольку Guava - это скорее библиотека общего назначения, в которой, как оказалось, имеются функциональные идиомы, а функциональная Java предназначена исключительно для реализации функциональных идиом в Java, функциональная Java звучит как более подходящая, возможно, с более полным набором FP-подобных функций.

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

Одна из проблем с обеими библиотеками (как отмечено в вики Guava в вышеупомянутых постах) - это «вертикальный шум» анонимных внутренних классов для ваших функциональных объектов.Еще одна библиотека, которая пытается исправить это с помощью аннотаций и APT: Jedi .

Еще один подход, который делает любую из перечисленных выше библиотек (Guava, FJ или Jedi) менее шумной без аннотаций:библиотека, которую я написал, Funcito , вдохновленная синтаксисом Mockito.Он более ограничен в том, что он может упростить на этом этапе, по сути, заключая в себе одиночные вызовы методов, но это то, чем я сейчас занимаюсь в большинстве случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...