Я никогда не был сторонником объектно-ориентированного программирования, и чем меньше я становлюсь, тем больше я узнаю о программировании в целом. Как я изучал разные парадигмы программирования, я понял , что неизменность является одной из самых центральных концепций разработки программ, затрагивающих программное обеспечение , написанное в соответствии с какой - либо философии. Это чрезвычайно важно в функциональном программировании, с последствиями для оптимизации и параллелизма помимо простых гарантий безопасности.
По сути, все, что может быть неизменным, вероятно, должно быть, если только у вас нет веских причин для изменчивого состояния. По моему опыту, написание программ на любом языке для достижения этой цели ведет к созданию более безопасного и лучшего кода. Вам нечего терять, используя, const
где это применимо - неизменность бесплатно!
(Между прочим, я поиграл с идеей создания форка GCC для диалекта C ++, в котором все типы, const
кроме как явно определены как mutable
. Если есть поддержка такой вещи, я полностью обязуюсь поддерживать и использовать ее.)
С точки зрения ОО, неизменяемость обеспечивает инкапсуляцию, предотвращая неограниченный доступ для записи. Это уменьшает связь между классами, потому что неизменяемые объекты должны полностью управлять своим собственным состоянием и, следовательно, вести себя как обычные значения. Корректность const значительно облегчает процесс подтверждения правильности программы, особенно в контексте параллельного программирования. С помощью ссылки на C ++ и семантики ссылок на значения C ++ 0x вы можете использовать неизменяемые объекты, не беспокоясь о копировании их повсюду. Кроме того, компилятор может применить довольно удивительную магию оптимизации, если вы работаете с в основном неизменяемыми объектами.
Я знаю, что печатать const
везде - отстой , но вы быстро привыкаете к нему, и со временем преимущества становятся очевидными с точки зрения надежности и удобства обслуживания. Я не гениальный писатель, и, кажется, это доказанная трудная задача, чтобы обосновать это, но я знаю, что правильность const была чрезвычайно полезна для меня как разработчика при разработке и реализации программ, и я думаю, что опыт лучший учитель в этом отношении.