История развития языков программирования в целом, а также желания и чаяния программистов порой удивляют своими непредсказуемостью и непостоянством. Так, например, некогда были созданы типированные языки типа C/C++, Pascal, Java и так далее. В этих языках программирования типы переменных сначала объявлялись, а затем пристрастно проверялись на соответствие.
Нельзя было создать переменную, не указав её тип. Почему нельзя? Да потому, что любая переменная занимает какое-то место в памяти. К тому же, разные типы переменных занимают разный объём памяти. Так сколько прикажете компьютеру выделять памяти для хранения той или иной переменной? Отсюда и следовало незыблемое правило указывать тип переменной.
К сожалению, жизнь не такая гладкая и везде абсолютно правильная. Были задачи, в которых было сложно заранее определить и назначить тип переменных. Были также и люди, которым указание типов было идеологически неприятно. Поэтому стали появляться шаблоны (templates), которые допускали использование переменных разных типов. Но изначально тип переменных всё равно нужно было указывать.
А потом появился Питон, в котором можно писать программы как попало. И в индустрию программирования хлынул поток недопрограммистов и говнокодеров. И началось! А вы думаете, почему интернет-браузеры так тормозят?
И вот, в какой-то момент программисты, ещё не опустившиеся до уровня гвонокодеров внезапно спохватились:
— Ах! А ведь было бы не плохо контролировать типы переменных, передаваемых функциям и контролировать возвращаемые значения. Это бы сильно облегчило проверку качества кода.
И маятник качнулся в обратную сторону — давайте теперь в нетипированных языках (Python, например) контролировать типы. И было придумано такое понятие — контрактное программирование.
Контрактное — это значит, что перед тем как писать код программы программисты сначала договариваются о типах переменных, которые будут «гулять» на стыках их программ.
Так как же нам, недопрограммистам-питонщикам использовать это контрактное программирование?
Читать далее →