Почему объявление переменных настолько просто в языках сценариев, как php, perl, но не в Java, C и т. Д.? - PullRequest
7 голосов
/ 19 сентября 2010

В php / perl мы можем просто сказать $ a = 'hi "и затем $ a = 1 без необходимости объявлять его тип. Но в java есть ошибки приведения типов к тому же.

Почему эта разница?

Ответы [ 5 ]

11 голосов
/ 19 сентября 2010

PHP динамически типизирован, а Java и C - статически.

При статической типизации проверка типов может выполняться во время компиляции, и это может отлавливать много ошибок, так что это не обязательно плохо. Это также позволяет им работать намного быстрее динамических языков.

См .: http://en.wikipedia.org/wiki/Type_system

4 голосов
/ 19 сентября 2010

То, что язык статически типизирован, как говорят другие ответы, не означает, что ему нужны явные объявления типов. Существует множество алгоритмов вывода типов, которые работают очень хорошо, требуя только редких объявлений типов.

Просто случается, что в динамических языках они имеют тенденцию (чаще всего) не столько заботиться о типе объекта, сколько о том, что он реагирует на определенный набор поведений (типизирование утки), поэтому для них не имеет значения, что это за явный тип.

Подсказка объявления типа полезна для компилятора, хотя явно не требуется для общего случая (и, в зависимости от алгоритма вывода, требуется только в сложных случаях).

3 голосов
/ 19 сентября 2010

Как уже упоминалось, Java, C, C ++ статически типизированы. PHP, Perl, Ruby, Boo и т. Д. Динамически набираются.

Однако некоторые статически типизированные языки, такие как, например, C # 4, также поддерживают динамически типизированное программирование.

dynamic x = 3;

Функциональные языки, C ++, C # и другие также поддерживают вывод типов, что означает, что он все еще использует статические типы, но компилятор выводит тип.

auto x = 3; // C++0x

var x = 3; // C#

let x = 3 // F#

Почему статически типизированные языки также страдают от ошибок приведения типов? Потому что они поддерживают наследование и переход от суперклассов к подклассам. Даункасты, как правило, не могут быть проверены во время компиляции, но могут быть обнаружены во время выполнения и вызовут исключение.

0 голосов
/ 19 сентября 2010

Многие (но не все) скомпилированные языки используют статическую типизацию, потому что это помогает компилятору быстрее создавать машинный (или байтовый) код.Это также помогает компилятору находить ошибки в вашем коде.

0 голосов
/ 19 сентября 2010

Java использует так называемую систему статических типов. Это означает, что каждая переменная определена, чтобы иметь определенный тип во время компиляции, и это не может быть изменено. Как и у любых функций, здесь есть свои плюсы и минусы. В общем, компилятор может отлавливать гораздо больше ошибок программирования, если типы являются фиксированными, и, как правило, генерировать более надежный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...