Функция minimumSize
является функцией curry .
Curry - это способ разбить вызов функции на несколько последовательных вызовов подфункций.
У функции карри есть много хороших преимуществ, одно из которых заключается в том, что она позволяет вашей функции быть более компонуемой, откладывая реальный источник данных.
Давайте изобразим использование:
n => email => email.text.size >= n
Сначала мы можем вызвать эту функцию, передав параметр только для n
:
minimumSize(2) // partially applies the minimumSize function with 2 as n
Вы получите вна этот раз:
val nextFunction = email => email.text.size >= 2
Далее вы позвоните nextFunction
с электронной почтой:
nextFunction(Email("anemail@domain.com"))
В этот раз вы получите логическое значение:
val bool = Email("anemail@domain.com").text.size >= 2
Такесли мы подведем итоги:
Мы начали с Int
, затем Email
, затем Boolean
:
Int => Email => Boolean
И, посмотрев на эту подпись более внимательно, выраспознает EmailFilter
подпись.
Давайте подставим:
Int => EmailFilter
Идея состоит в том, чтобы EmailFilter
действовал как шаблон , который можно параметризировать с более высокимfunctions.
Здесь мы параметризовали сравнение размера текста электронной почты, чтобы мы могли сохранить универсальный EmailFilter
.
Имейте в виду, что функциональное программирование - это создание функций.