Очень часто можно встретить такое мнение:
Для чего-нибудь алгоритмического или математического я использую ФП. Но для любого рода симуляции ООП решение гораздо проще.
Предположим, что симуляция означает много меняющихся вложенных акторов, например поле боя, где есть техника, содержащая солдат, у которых есть оружие. И даже техника состоит из колёс и прочих частей, которые могут быть независимо повреждены. Функциональный подход выглядит как головоломка. Что если нужно из кода танка изменить что-то во вне? Таскать ли с собой везде состояние мира?
В сравнении ООП версия проста и очевидна: просто меняй объекты как требуется (вызовом их методов, конечно). Объекты содержат ссылки друг на друга, все обновления происходят с потерей информации о прошлом. Но так ли всё просто?
Допустим симуляция происходит с фиксированным шагом и в течение одного из этих шагов танк стреляет. Надо просто добавить снаряд в коллекцию объектов симуляции. Но тут есть загвоздка. Танки, обработанные ранее в симуляции не будут знать о снаряде, а обработанные позже будут.
Чтобы такого не происходило, надо отложить создание всех новых объектов до конца кадра.
Теперь, предположим, каждый танк принимает решение что делать основываясь на состоянии остальных объектов поблизости. Танк1 сканирует ближайшие объекты, двигается вперёд. Танк2 делает тоже самое и видит, что Танк1 слишком близко к нему, хотя на самом деле это не так, Танк2 имеет неправильные представления о положении Танк1, полученные как бы из будущего.
Для этой проблемы есть пара решений: разделить кадр на фазу принятия решений и на фазу перемещения. Второе — сохранить список всех изменений и потом атомарно применять его на финальном этапе.
Если бы симуляция сразу писалась в функциональном стиле, костылей, придуманных выше, вводить бы не пришлось. Это более естественный способ работы, когда у тебя нет мутабельных структур данных. Было бы ФП решение проще ООП? Может быть и нет. Хоть все обновления и отложены, остаётся вопрос как управляться с передаваемой вокруг информацией об изменениях.
Но если ФП-версия сначала казалась автору исходной копипасты невозможной, теперь это выглядит как естественный подход к подобным проблемам.