Eu nunca fui um defensor da programação orientada a objetos e, se alguma coisa eu cresci menos, mais aprendi sobre programação em geral. Como eu estudei diferentes paradigmas de programação, eu percebi que a imutabilidade é um dos os conceitos centrais da concepção do programa, afetando software escrito de acordo com qualquer filosofia. É extremamente importante na programação funcional, com implicações na otimização e simultaneidade, além das simples garantias de segurança.
Basicamente, tudo o que pode ser imutável provavelmente deveria ser, a menos que você tenha um bom motivo para um estado mutável. Na minha experiência, escrever programas em qualquer idioma em busca desse objetivo leva a um código melhor e mais seguro . Você não tem nada a perder usando const
onde aplicável - a imutabilidade é grátis!
(Aliás, eu brinquei com a idéia de criar uma bifurcação do GCC para um dialeto de C ++ no qual todos os tipos são, a const
menos que explicitamente qualificados como mutable
. Se houver suporte para tal coisa, eu me comprometerei totalmente em mantê-la e usá-la.)
Do ponto de vista do OO, a imutabilidade reforça o encapsulamento, impedindo o acesso irrestrito à gravação. Reduz o acoplamento entre classes porque objetos imutáveis devem gerenciar completamente seu próprio estado e, assim, se comportar como valores comuns. A correção constante facilita significativamente o processo de comprovação da correção do programa, especialmente no contexto da programação simultânea. Com a semântica de referência C ++ e a referência C ++ 0x rvalue, você pode usar objetos imutáveis sem se preocupar com a sobrecarga de copiá-los por todo o lugar. Além disso, o compilador pode funcionar com uma mágica incrível de otimização, se você estiver trabalhando com objetos imutáveis.
Sei que é péssimo digitar em const
qualquer lugar, mas você se acostuma rapidamente e os benefícios se tornam aparentes ao longo do tempo em termos de confiabilidade e manutenção. Não sou um escritor brilhante, e parece ser uma tarefa difícil comprovada, mas sei que a correção constante tem sido imensamente útil para mim como desenvolvedor ao projetar e implementar programas, e acho que a experiência é o melhor professor a esse respeito.