В интервью с Джоном Хьюзом, где он говорит об Эрланге и Хаскеле, он может сказать следующее об использовании библиотек с сохранением состояния в Эрланге:
Если я хочу использовать библиотеку с состоянием, я обычно строю поверх нее интерфейс без побочных эффектов, чтобы затем безопасно использовать его в остальной части своего кода.
Что он имеет в виду под этим? Я пытаюсь придумать пример того, как это будет выглядеть, но мое воображение и / или знания меня подводят.
Ответы:
(Я не знаю Эрланга и не могу написать на Хаскеле, но, тем не менее, могу ответить)
Что ж, в этом интервью приведен пример библиотеки генерации случайных чисел. Вот возможный интерфейс с отслеживанием состояния:
Выход может быть
5 2 7
. Для того, кто любит неизменность, это совершенно неправильно! Так должно быть5 5 5
, потому что мы вызвали метод для одного и того же объекта.Так что бы был интерфейс без состояния? Мы можем просмотреть последовательность случайных чисел в виде лениво вычисляемого списка, где
next
фактически извлекается голова:С таким интерфейсом мы всегда можем вернуться к предыдущему состоянию. Если две части вашего кода ссылаются на один и тот же ГСЧ, они фактически получат одинаковую последовательность чисел. В функциональном мышлении это очень желательно.
Реализация этого на государственном языке не так уж сложна. Например:
Когда вы добавляете немного синтаксического сахара, чтобы он выглядел как список, это на самом деле довольно приятно.
источник
Ключевой концепцией здесь является концепция внешнего изменяемого состояния . Библиотека, которая не имеет внешнего изменяемого состояния, не содержит побочных эффектов. Каждая функция в такой библиотеке зависит только от переданных ей аргументов.
Удобные лакмусовые тесты, которые я использую:
источник