В настоящее время я пишу приложение для Android-плееров с помощью Scala. Я выбрал Scala для его функциональных возможностей программирования, и я хочу сделать код максимально совместимым с FP.Реализация состояний в функциональном программировании
Поскольку FP подразумевает неизменность, код не должен нести какое-либо состояние, а переменные должны быть неизменными. Но я сталкиваюсь с некоторыми осложняющими случаями использования. Я не знаю, как разрешить в чисто функциональном программировании.
Первый - это случай плейлиста. Музыкальный проигрыватель читает песню в середине списка воспроизведения. Это может быть представлено списком песен и курсором, который указывает текущую воспроизводимую песню. Но когда эта песня заканчивается, игрок должен сыграть следующий, следовательно, изменить значение курсора.
Такая же проблема возникает с самим плейлистом: пользователь должен иметь возможность изменять (добавлять или удалять песни) плейлист. Если сам плейлист является неизменным, каждый раз, когда пользователь добавляет или подавляет песню, создается новый плейлист. Но этот список воспроизведения должен быть затронут переменной, которая затем должна быть изменчивой.
Везде, где я смотрю в этом приложении, я вижу состояния - игрок остановился или нет? Какова текущая песня, текущий плейлист? Каково текущее состояние настроек? И т. Д. - и я не знаю, как это можно решить с помощью чистого функционального программирования, i.e. с неизменяемыми переменными.
Поскольку эти варианты использования выглядят довольно стандартными, я полагаю, что есть образцы дизайна для их решения (например, монады), но я не знаю, где искать.
http://typelevel.org/cats/datatypes/state.html – Reactormonk
«FP-совместимый» - нет такой вещи – naomik