Що ж, все, що я бачу в цій темі, все чудово, але в мене є визначення «інваріанта», яке дуже допомагало мені на роботі.
Інваріант - це будь-яке логічне правило, якого слід дотримуватися протягом усього виконання програми, яке може бути передано людині, але не вашому компілятору.
Це визначення є корисним, оскільки воно розбиває умови на дві групи: тих, кому компілятор може довіряти примусовому виконанню, і тих, які повинні бути задокументовані, обговорені, прокоментовані чи іншим чином повідомлені учасникам, щоб вони могли взаємодіяти з кодовою базою даних без введення помилок .
Також це визначення корисне, оскільки дозволяє використовувати узагальнення "Інваріанти погані".
Наприклад, перемикач автомобілів з механічною коробкою передач сконструйований, щоб уникнути інваріанта. Якби я хотів, я міг би побудувати коробку передач з одним важелем на кожну передачу. Цей важіль може бути вперед ("зачеплений") або назад ("відключений"). У такій системі я створив "інваріант", який може бути задокументований як такий:
"Вкрай важливо, щоб активована в даний час передача відключилася до того, як буде включена інша передача. Увімкнення будь-яких двох передач одночасно спричинить механічне напруження, яке розірве коробку передач. Завжди відключіть передачу, що займається в даний момент, перш ніж ввімкнути іншу".
Отож, у неохайній їзді можна звинуватити зламані коробки передач. Однак у сучасних автомобілях використовується одна палиця, яка обертається навколо передач. Він сконструйований таким чином, що на сучасному автомобілі з зміною палиці неможливо одночасно ввімкнути дві передачі.
Таким чином, можна сказати, що передача була спроектована для "видалення інваріанта", оскільки вона не дозволяє механічно налаштовуватися таким чином, що порушує логічне правило.
Кожен подібний інваріант, який ви вилучите зі свого коду, є вдосконаленням, оскільки він знижує когнітивне навантаження роботи з ним.