Чистый против нечистого
По определению, лямбда-выражение / выражение - это чистая функция , если она не изменяет состояние, и нечистая функция в противном случае.Под состоянием один подразумеваются аргументы, которые он получает, или данные в его окружении / окружающем окружении.
Создание результата
Лямбда-выражение / оператор может давать результат или нет.Это не должно мешать его аспекту чистоты функций.
Таким образом, можно рассуждать о следующих категориях (нечистые мутируют аргумент)
- Чистая функция лямбда, выдающая результат (например,
x -> x + 1
) - нечистая функция лямбда, дающая результаты (например,
(StringBuilder sb) -> {sb.append("impure and proud of it"); return -3;}
) - чистая функция void лямбда (например,
x -> {}
) - нечистая функция void лямбда (например,
(StringBuilder sb) -> sb.append("abc")
)
Как определить чистоту функции следующих лямбд:
x -> System.out.println(x)
x -> Util.writeToDb(x)
(рассмотрим writeToDb(int x)
методкоторый принимает int
или String
в качестве аргументов, подключается к БД с помощью jdbc, вставляет аргумент в готовую таблицу и закрывает соединение.)
Конечно, в обоих случаях состояниеВселенная меняется с вызовом.Однако, формально, где кончается государственная сфера?