Eu posso ver os benefícios de objetos mutáveis vs imutáveis, como objetos imutáveis, que levam muito tempo para solucionar problemas na programação multiencadeada devido ao estado compartilhado e gravável. Pelo contrário, objetos mutáveis ajudam a lidar com a identidade do objeto, em vez de criar uma nova cópia todas as vezes e, assim, também melhoram o desempenho e o uso da memória, especialmente para objetos maiores.
Uma coisa que estou tentando entender é o que pode dar errado em ter objetos mutáveis no contexto da programação funcional. Como um dos pontos que me disseram é que o resultado de chamar funções em ordem diferente não é determinístico.
Estou procurando um exemplo concreto real, onde é muito evidente o que pode dar errado usando objetos mutáveis na programação de funções. Basicamente, se é ruim, é ruim, independentemente do OO ou paradigma de programação funcional, certo?
Creio que abaixo da minha própria declaração responde a essa pergunta. Mas ainda preciso de um exemplo para que eu possa senti-lo mais naturalmente.
OO ajuda a gerenciar a dependência e a escrever programas mais fáceis e de manutenção com a ajuda de ferramentas como encapsulamento, polimorfismo etc.
A programação funcional também tem o mesmo motivo de promover código sustentável, mas usando o estilo que elimina a necessidade de usar ferramentas e técnicas de OO - uma das quais acredito ser a minimização de efeitos colaterais, funções puras etc.