Я был сожжен за трансляцию этих мнений публично, но вот так:
Хорошо написанный код на языках с динамической типизацией следует соглашениям статической типизации
Используя Python, PHP, Perl и несколько других динамически типизированных языков, я обнаружил, что хорошо написанный код на этих языках следует соглашениям статической типизации, например:
Его считают плохим стиль для повторного использования переменной с разными типами (например, ее плохой стиль - брать переменную списка и назначать int, а затем назначать переменную bool в том же методе). Хорошо написанный код на динамически типизированных языках не смешивает типы.
Ошибка типа в статически типизированном языке все еще является ошибкой типа в динамически типизированном языке.
Функции, как правило, предназначены для одновременной работы с одним типом данных, так что функция, которая принимает параметр типа T
, может использоваться только с объектами типа T
или подклассами T
. ].
Функции, предназначенные для работы со многими различными типами данных, написаны таким образом, что параметры ограничиваются четко определенным интерфейсом. В общих чертах, если два объекта типов A
и B
выполняют сходную функцию, но не являются подклассами друг друга, то они почти наверняка реализуют один и тот же интерфейс.
Хотя языки с динамической типизацией, безусловно, предоставляют более одного способа взломать гайки, в большинстве хорошо написанных идиоматических кодов на этих языках пристальное внимание уделяется типам так же строго, как и кодам, написанным на статически типизированных языках.
Динамическая типизация не уменьшает количество кода, которое нужно писать программистам
Когда я укажу, как странно, что так много соглашений о статической типизации переходят в мир динамической типизации, Я обычно добавляю «так зачем использовать динамически типизированные языки для начала?». Непосредственный ответ - это нечто вроде написания более краткого, выразительного кода, потому что динамическая типизация позволяет программистам опускать аннотации типов и явно определенные интерфейсы. Тем не менее, я думаю, что наиболее популярные языки со статической типизацией, такие как C #, Java и Delphi, имеют громоздкий дизайн, а не в результате их систем типов.
Мне нравится использовать языки с реальной системой типов , такой как OCaml, которая не только статически типизирована, но и вывод типа и структурная типизация позволяют программистам опускать большинство аннотаций типов и определений интерфейса.
Существование семейства языков ML демонстрирует, что мы можем пользоваться преимуществами статической типизации со всей краткостью написания на динамически типизированном языке. Я на самом деле использую REPL OCaml для специальных, одноразовых сценариев точно так же, как все остальные используют Perl или Python в качестве языка сценариев.
Вы можете загрузить бесплатное дополнение Name Manager, разработанное мной и Яном Карелом Питерсом, с сайта http://www.decisionmodels.com/downloads.htm Это позволяет выполнять многие операции с именами, которые диспетчер имен Excel 2007 не может обрабатывать, включая изменение области имен.
В VBA:
Sub TestName()
Application.Calculation = xlManual
Names("TestName").Delete
Range("Sheet1!$A$1:$B$2").Name = "Sheet1!TestName"
Application.Calculation = xlAutomatic
End Sub