Раньше я много занимался веб-программированием на Rails (до PHP), прежде чем начал изучать компьютерную инженерию.
С тех пор я проделал большую школьную работу в C и некоторые личные вещи в Objective-C (Mac).Я научился любить статическую типизацию.
Но теперь мне нужно заняться профессиональной веб-разработкой (фрилансингом) и снова заняться Rails.Я нахожу действительно раздражающим писать несемантические тесты проверки типов.Я получал их бесплатно от компиляторов C и Objective-C.Мне нравилось нажимать на Build и заставлять систему проверять весь мой код, чтобы увидеть, что A может вызывать B, B может вызывать какую-то непонятную библиотеку C и т. Д. Все, что мне нужно было сделать, это проверить семантику.Но с Rails я компилятор.:(
Кто-нибудь ходил по этому же пути? Являются ли мои единственные варианты веб-разработки ASP.NET MVC с C # и структурой Java + x? Ищете некоторые предложения или даже сочувствие ...: P
Кстати, я делаю конкретную ссылку на Rails, а не на Ruby, потому что я не возражаю против динамической природы Ruby для таких простых вещей, как скриптинг или что-то еще. Но так как Rails зависит от очень многих гемов, и поскольку каждый обычно добавляетКоличество других драгоценных камней, динамическая типизация становится проблемой.
Я последовал предложению PST и посмотрел на ScalaЧитая книгу «Программирование на Scala», написанную создателем языка Мартином Одерским, я наткнулся на этот фрагмент текста, который во многом выражает мои опасения и немного больше. Очень интересное чтение.
Статическая типизация Scala
Статическая система типов классифицирует переменные иd выражений в соответствии с типами значений, которые они хранят и вычисляют.Scala выделяется как язык с очень продвинутой системой статических типов.Начиная с системы вложенных типов классов, очень похожих на Java, она позволяет параметризировать типы с помощью обобщенных типов, объединять типы, используя пересечения, и скрывать детали типов, используя абстрактные типы.Они дают прочную основу для создания и компоновки ваших собственных типов, так что вы можете создавать интерфейсы, которые одновременно безопасны и гибки в использовании.
Если вам нравятся динамические языки, такие как Perl, Python, Ruby,или Groovy, вам может показаться странным, что система статических типов Scala указана в качестве одной из ее сильных сторон.В конце концов, некоторые считают, что отсутствие статической системы типов является главным преимуществом динамических языков.Наиболее распространенные аргументы против статических типов состоят в том, что они делают программы слишком многословными, мешают программистам выражать себя так, как они хотят, и делают невозможными определенные шаблоны динамических модификаций программных систем.
Однако зачастую эти аргументы не приводятсяпротив идеи статических типов в целом, но против конкретных систем типов, которые воспринимаются как слишком многословные или слишком негибкие.Например, Алан Кей, изобретатель языка Smalltalk, однажды заметил: «Я не против типов, но я не знаю ни одной системы типов, которая не является полной болью, поэтому я все еще люблю динамическую типизацию».
Мы надеемся убедить вас в этой книге, что система типов Scala далеко не «полная боль». На самом деле, она хорошо решает две из обычных проблем статической типизации: многословия избегают благодаря выводу типа и гибкостидостигается путем сопоставления с образцом и нескольких новых способов написания и составления типов.С учетом этих препятствий можно лучше оценить классические преимущества систем статического типа.Среди наиболее важных из этих преимуществ - проверяемые свойства программных абстракций, безопасный рефакторинг и улучшенная документация.
Проверяемые свойства
Статический типсистемы могут доказать
отсутствие определенных ошибок во время выполнения.
Например, они могут доказать
свойства как: логические значения никогда не
добавлено к целым числам; частные переменные
не доступны снаружи их
учебный класс; функции применяются к
правильное количество аргументов; только
Строки когда-либо добавляются в набор
строки.
Другие виды ошибок не обнаружены
современными системами статического типа. За
Например, они обычно не обнаружат
не завершающие функции, массив
границы нарушения, или деления на
нуль. Они также не обнаружат, что
ваша программа не соответствует
спецификация (при условии, что есть
Спец это!). Системы статического типа
поэтому были отклонены некоторыми
как не очень полезно. Аргумент
выходит, что, поскольку такие системы типов могут
обнаруживать только простые ошибки, тогда как
модульные тесты дают более обширный
охват, зачем возиться со статическими типами
совсем?
Мы считаем, что эти аргументы отсутствуют
точка. Хотя статический тип
система, конечно, не может заменить блок
тестирование, это может уменьшить количество
модульные тесты, необходимые, заботясь о
некоторые свойства, которые в противном случае
необходимо проверить. аналогично, единица измерения
тестирование не может заменить статическую типизацию.
В конце концов, как сказал Эдсгер Дейкстра,
тестирование может только доказать наличие
ошибки, никогда их отсутствие. Итак
гарантирует, что статическая типизация дает
может быть простым, но они реальны
гарантии формы без суммы
тестирование может доставить.
Безопасный рефакторинг
Система статического типа обеспечивает
сеть безопасности, которая позволяет вам вносить изменения
в кодовую базу с высокой степенью
доверие. Рассмотрим, например,
рефакторинг, который добавляет дополнительный
параметр метода. В статически
набранный язык вы можете сделать изменения,
пересоберите свою систему и просто исправьте
все строки, которые вызывают ошибку типа.
Как только вы закончили с этим, вы
обязательно нашли все места, которые
нужно изменить. То же самое относится и к
много других простых рефакторингов, таких как
изменение имени метода или перемещение
методы из одного класса в другой. В
во всех случаях проверка статического типа будет
обеспечить достаточную уверенность в том, что новый
Система работает так же, как старая.
Документация
Статические типы - программная документация
это проверяется компилятором для
правильность. В отличие от обычного комментария,
аннотация типа никогда не может быть вне
дата (по крайней мере, если исходный файл
который содержит это недавно прошло
компилятор). Кроме того, компиляторы и
интегрированные среды разработки
можно использовать аннотации типа для
обеспечить лучшую контекстную помощь. За
Например, комплексное развитие
среда может отображать все
Члены доступны для выбора
определение статического типа
выражение, на котором выбор
сделал и поиск всех членов
этот тип.