Подтвердить что ты не робот

Есть ли хорошее сравнение между Functional Java и Guava?

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

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

4b9b3361

Ответ 1

Цель Guava - не предоставлять функциональные идиомы в Java. Из Функциональное объяснение Вики-страница Guava:

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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