Каковы ваши опыты с использованием функционального Java-проекта?

Я читал следующий вопрос - Насколько безопасно было бы использовать функциональный java для добавления замыканий в Java-проект?, и я думал об использовании Функциональный проект Java, а также в моем текущем проекте. Мне было интересно, что испытывают пользователи Qaru с использованием функционального Java-проекта? В частности, мне интересны некоторые из этих особенностей:

  • Улучшилось ли качество кода или четкость?
  • Повысить производительность?
  • Уменьшить потенциальные точки отказа?
  • Эффективность воздействия

Ответ 1

Я был в команде, которая использует библиотеку FJ, и я знаю других. В одной команде он использовался как замена для доморощенной библиотеки, которая была менее отполирована, а на другой она заменила Google Collections. Я также знаю некоторых людей, которые копируют исходный код из FJ, чтобы выполнить собственную реализацию.

На мой взгляд, если вы должны использовать Java, вы должны использовать что-то вроде Functional Java, чтобы облегчить вашу жизнь.

Увеличилось ли качество кода или четкость?

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

Повысить производительность?

Конечно. Разработчики с более мощными инструментами более продуктивны. По моему опыту, разработчики считают, что первоклассные функции упрощают и облегчают программирование. Счастливые программисты - продуктивные программисты.

Уменьшить потенциальные точки отказа?

Более функциональный стиль программирования обескураживает изменчивое состояние, которое устраняет большой класс ошибок. Кроме того, более мощные абстракции приводят к меньшему количеству повторений, что уменьшает количество мест, где что-то не так.

Эффективность удара?

Нет никаких оснований полагать, что производительность будет влиять так или иначе. Предоставляемые структуры данных предназначены для простоты использования и выразительности, а не производительности, но они написаны оптимально для того, что они есть. Как и в любом другом, как вы управляете, важнее, чем вы едете. Например, fj.data.List является связанным списком, поэтому он имеет произвольный доступ и конкатенацию O (n), поэтому вы избегаете его для этих целей. Для сравнения: fj.data.Stream имеет O (1) конкатенацию.