Нещодавно я відкрив Design by Contract (DbC) і вважаю надзвичайно цікавим способом написання коду. Серед іншого, здавалося б, пропонуються:
- Краща документація. Оскільки договір є документацією, неможливо застаріти. Крім того, оскільки в контракті конкретно визначено, що робить рутина, це допомагає підтримувати повторне використання.
- Простіша налагодження. Оскільки виконання програми припиняється з моменту відмови контракту, помилки не можуть поширюватися, а певне порушення, яке порушується, імовірно буде виділено. Це пропонує підтримку під час розробки та під час технічного обслуговування.
- Кращий статичний аналіз. DbC - це лише реалізація логіки Хоара, і ті ж принципи повинні застосовуватися.
Витрати, порівняно, здаються досить невеликими:
- Додаткове натискання пальцем. Оскільки договори мають бути прописані.
- Проходить певну кількість тренувань, щоб комфортно писати контракти.
Тепер, ознайомившись насамперед з Python, я розумію, що насправді можливо записати передумови (просто викидаючи винятки за невідповідний ввід), і навіть можна використовувати твердження, щоб знову перевірити певні постусловини. Але неможливо імітувати певні функції, такі як "старий" чи "результат", без додаткової магії, яка в кінцевому підсумку вважалася б непітонічною. (Крім того, є кілька бібліотек, які пропонують підтримку, але в кінцевому підсумку я розумію, що було б неправильно використовувати їх, як це не робить більшість розробників.) Я припускаю, що це аналогічна проблема для всіх інших мов (крім звичайно , Ейфелева).
Моя інтуїція підказує мені, що відсутність підтримки має бути наслідком якогось відмови від практики, але пошук в Інтернеті не дав результатів. Мені цікаво, чи хтось може уточнити, чому, здається, більшість сучасних мов надають таку маленьку підтримку? Чи недолік DbC чи надмірно дорогий? Або це просто застаріло завдяки Екстремальному програмуванню та іншим методологіям?