This answer поразил меня тем, что я никогда не понимал с тем, как вы обрабатываете типы параметров в динамических языках по сравнению с статическим языком (моя перспектива информируется или деформируется - как вам угодно) из Java.Как вы эффективно тестируете параметры динамических языков?
Учитывая метод foo, который принимает строку параметров на динамическом языке, во время компиляции типа строки не применяется принудительное выполнение. Ответ, связанный выше (и ответ, который я обычно видел на этом), заключается в том, что вам нужно правильно тестировать блок на динамическом языке.
Но в какой-то момент что-то вне устройства вызовет этот метод. Скажем, это тяжелый вес, который будет издеваться над любыми модульными тестами классов, которые его используют. Теперь у вас много классов, которые называют этот метод, и вам нужно изменить тип. Чтобы это было просто, оно использовало номер, но теперь требует буквенного числа, и вам нужно использовать метод, специально доступный по строке, а не на числовом объекте с новым требованием.
Как вы его изменяете и знаете, что код вызова будет исправлен? Конечно, если вы просто измените его, ваши юнит-тесты потерпят неудачу, но, поскольку вам нужно изменить его специально, вы якобы исправите свои модульные тесты. Как вы знаете, чтобы исправить код вызова? Я не просто имею в виду, насколько концептуально вы знаете, я имею в виду, как вы знаете, что нашли всех звонящих и действительно можете сказать, что это изменилось.
Казалось бы, только очень всесторонние интеграционные тесты предоставят вам эту гарантию. Я что-то упускаю?
Я думаю, это ответ. Я бы просто сказал, что теги типа могут быть большей нагрузкой, которая просто отвлекает. Я потратил много времени на «исправление» кода строго для того, чтобы удовлетворить систему типов, не говоря уже о дублировании кода из-за этого. – Yishai
Не судите статическую типизацию Java. Его система типа достаточно мощна, чтобы раздражать вас, но недостаточно мощна, чтобы помочь вам. Вы должны хотя бы проверить OCaml. – Chuck