2015-08-03 13 views
2

Давайте возьмем простую функцию, который увеличивает целое:Каковы некоторые примеры, когда динамическая типизация предпочтительнее статической типизации?

Статическая типизация:

function incrementNumber(int n) { 
    n = n + 1; 
}  

Динамический ввод:

function incrementNumber(n) { 
    if (type of n != int) { 
     throw Error; 
    } 
    n = n + 1; 
}  

Эти достижения то же самое, но динамический подход является более уродливым и более продолжительным, потому что требуется «проверка типа».

Я видел, как многие программисты используют этот подход, и это заставляет меня задаться вопросом, какие именно преимущества динамически типизированного языка, так как большинству функций потребуется проверка параметров как это?

У вас есть примеры, когда динамическая типизация работает (или выглядит) лучше, чем статическая типизация?

+1

Если вы выполняете проверку типов для динамического набора текста, цель теряется. Вы должны просто быть обеспокоены тем фактом, что оператор '+' определен для любого типа, в который входит. Так что независимо от того, является ли это int, decimal или string, он должен работать до тех пор, пока они знают, как выполнять операцию '+' не так ли? –

+0

Именно поэтому я был смущен: проверка типов поражает цель динамического набора текста, но в то же время я видел, как много разработчиков это делали. Так это плохая практика? –

+0

Это может быть скорее неадекватное знание или новичка, а не плохая практика. :) –

ответ

0

Если вы собираетесь проверять тип данных перед тем, как делать что-либо, у него нет никаких преимуществ.

Динамическая типизация имеет смысл только тогда, когда вы знаете, что существует функция или оператор может применяться, но компилятор не знает об этом до времени выполнения. Или создавать объекты без определенных свойств.

+0

Именно поэтому я был смущен: проверка типов поражает цель динамического набора текста, но в то же время я видел, как много разработчиков это делали. Это просто «неправильно», чтобы подойти к динамической типизации таким образом? –

+1

Правильно! Проверка типа при работе с динамикой неверна, поскольку она не использует преимущества динамического набора. –