Недавно я задал вопрос о функциональном программировании и получил (хорошие!) ответы, которые вызвали больше вопросов (как это иногда бывает с обучением). Вот несколько примеров:
-
Один ответ сделал ссылку на преимущество неизменных структур данных: каждый поток может иметь свою собственную копию. Теперь для меня это звучит скорее как система управления версиями (использовать аналогию), где вместо того, чтобы блокировать код, который кто-то проверил, чтобы он не мог быть изменен кем-либо еще, каждый может проверить свои собственные копии. Звучит хорошо. Однако в VCS у вас есть концепция "слияния" изменений, в случае, если два человека изменили один и тот же материал. Похоже, что эта проблема может возникнуть в многопоточном сценарии... так как происходит "слияние", когда важно, чтобы потоки отображали самые последние данные?
-
В этом ответе говорилось о случае, когда операции выполнялись в цикле на объекте, и как вы можете использовать новый объект каждый раз, обновления старого. Однако скажем, что
bankAccount
обновляется в сценарии без цикла: например, банковская система GUI. Оператор нажимает кнопку "Изменить процентную ставку", которая запускает событие, которое (например, в С#) делает что-то вродеbankAccount.InterestRate = newRateFromUser
. Мне кажется, что я здесь плотный, но, надеюсь, мой пример имеет смысл: должен быть какой-то способ обновления объекта, не так ли? Несколько других вещей могут зависеть от новых данных.
В любом случае, если вы можете помочь мне разобраться в смене парадигмы, я буду благодарен. Я помню, как мой мозг проходил через подобные "глупые фазы" при обучении ООП на фоне простого процедурного императивного подхода к кодированию.