В каждом проекте, который я начинал на языках без систем типов, я в конце концов начинаю изобретать систему типов во время выполнения. Может быть, термин «система типов» слишком силен; по крайней мере, я создаю набор валидаторов типа / диапазона значений, когда работаю со сложными типами данных, а затем чувствую необходимость параноика в отношении того, где типы данных могут быть созданы и изменены.
Я не знал Я дважды не думал об этом до сих пор. Как независимый разработчик, мои методы работали на практике над рядом небольших проектов, и нет никаких причин, по которым они перестали бы работать сейчас.
Тем не менее, это должно быть неправильно. Мне кажется, что я "неправильно" использую языки с динамической типизацией. Если мне придется изобрести систему типов и реализовать ее сам, С таким же успехом я могу использовать язык, который имеет типы для начала.
Итак, мои вопросы:
Вот конкретный пример, который вы можете рассмотреть. Я работаю с датами и часовыми поясами в erlang (динамический, строго типизированный язык). Я обычно работаю с этим типом данных:
{{Y,M,D},{tztime, {time, HH,MM,SS}, Flag}}
... где {Y, M, D}
- кортеж, представляющий действительную дату (все записи - целые числа), tztime
и время
- атомы, HH, MM, SS
- целые числа, представляющие разумное 24-часовое время, и Флаг
является одним из атомов u, d, z, s, w
.
Этот тип данных обычно анализируется на входе, поэтому для обеспечения правильного ввода и правильного синтаксического анализатора, значения необходимо проверить на правильность типа и допустимые диапазоны. Позже экземпляры этого типа данных сравниваются друг с другом, что делает тип их значений еще более важным, поскольку сравниваются все термины. Из справочного руководства по Erlang
number < atom < reference < fun < port < pid < tuple < list < bit string