Рубрика «статическая типизация» - 2

Эта статья рассказывает о разнице между статически типизированными и динамически типизированными языками, рассматривает понятия "сильной" и "слабой" типизации, и сравнивает мощность систем типизации в разных языках. В последнее время наблюдается четкое движение в сторону более строгих и мощных систем типизации в программировании, поэтому важно понимать о чем идет речь когда говорят о типах и типизации.

Статическая и динамическая типизация - 1

Тип — это коллекция возможных значений. Целое число может обладать значениями 0, 1, 2, 3 и так далее. Булево может быть истиной или ложью. Можно придумать свой тип, например, тип "ДайПять", в котором возможны значения "дай" и "5", и больше ничего. Это не строка и не число, это новый, отдельный тип.

Статически типизированные языки ограничивают типы переменных: язык программирования может знать, например, что x — это Integer. В этом случае программисту запрещается делать x = true, это будет некорректный код. Компилятор откажется компилировать его, так что мы не сможем даже запустить такой код. Другой статически типизированный язык может обладать другими выразительными возможностями, и никакая из популярных систем типов не способна выразить наш тип ДайПять (но многие могут выразить другие, более изощренные идеи).

Динамически типизированные языки помечают значения типами: язык знает, что 1 это integer, 2 это integer, но он не может знать, что переменная x всегда содержит integer.

Среда выполнения языка проверяет эти метки в разные моменты времени. Если мы попробуем сложить два значения, то она может проверить, являются ли они числами, строками или массивами. Потом она сложит эти значения, склеит их или выдаст ошибку, в зависимости от типа.Читать полностью »

Я был фанатом статически типизированных языков много лет. Я усвоил урок на собственном горьком опыте, используя C. Слишком много систем ломались из-за глупых ошибок типизации. Когда C++ вышел, я был заядлым приверженцем и яростным адептом строгой типизации. Я насмехался над smalltalk'ерами, кто ныл о потери гибкости. Надежность, в конце концов, была гораздо более важна, чем гибкость. И кроме того, мы могли поддерживать наше ПО гибким И статически типизированным, если просто следовать хорошим принципам управления зависимостями.

Четыре года назад приобщился к XP (методология Extreme Programming). Я полюбил акцент на практичности, который она добавила к разработке ПО. Мне также понравился упор на тестирование. С тех пор я заразился идеей тестирования. Я не могу более представлять себе создания кода без использования TDD (test driven development). Не могу вообразить даже, чтобы не иметь полное покрытие тестами, чтобы мои разработки были в сохранности.

Около двух лет назад я кое-что заметил. Я стал все меньше и меньше зависеть от типизации в плане надежности. Мои юнит-тесты предохраняли меня от совершения ошибок, связанных с типизацией. Чем больше я зависел от юнит-тестов, тем меньше я зависел от надежности на основе типизации в Java или C++ (мои языки).
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js