Действительно ли все динамические языки благоприятны для опечатки?

С Java на одной стороне и Ruby/Groovy на другом, я знаю, что во втором лагере я свободен сделать опечатки, которые не будут найдены до времени выполнения. Верен для этого всего динамически типизированные языки?

Править: Меня попросили уточнить тип опечатки. В Ruby и в Groovy, можно присвоить переменной со случайным именем, которое никогда не читается. Можно назвать методы, которые не существуют (очевидно, тесты должны поймать это, это было сказано). Можно обратиться к классам, которые не существуют, и т.д. и т.д. В основном, любой допустимый синтаксис, даже с типографскими ошибками, допустим и в Ruby и в Groovy.

5
задан Dan Rosenstark 11 March 2010 в 22:21
поделиться

4 ответа

В Perl, если вы объявляете use strict в своем коде, вы должны объявить свои переменные с помощью my . Опечатки в именах переменных будут обнаружены во время компиляции. Это одна из самых больших вещей, которых мне не хватает при кодировании на Python.

3
ответ дан 13 December 2019 в 22:06
поделиться

Python дружественен к опечаткам так, как вы описали в своем вопросе.

Но это не означает, что эти «опечатки» могут быть обнаружены только @ runtime. При использовании анализатора кода, такого как pylint (идеально интегрированного в вашу разработку) environment) вы поймаете «большинство» из них последовательно до того, как нажмете «запустить».

3
ответ дан 13 December 2019 в 22:06
поделиться

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

Однако они не связаны между собой по своей сути. Язык может легко иметь динамическую типизацию, требуя объявления имен переменных перед использованием. Как ire_and_curses упоминается, это может быть достигнуто на Perl с помощью директивы «использовать строгий».

2
ответ дан 13 December 2019 в 22:06
поделиться

Вот что происходит, когда я пытаюсь разобраться с упомянутыми вами подводными камнями в Squeak и Dolphin, двух реализациях динамического языка Smalltalk 80.

Вы можете присвоить переменной случайное имя, которое никогда не будет прочитано

Язык Smalltalk требует объявления переменных temp и instance. Если я пытаюсь скомпилировать метод, содержащий неопределенную переменную, я получаю ошибку времени компиляции.

| anArray |
anArrray := Array with: 2 with: 1. "Unknown variable anArrray"

Создание переменных динамически - это не то, что должны позволять динамические языки. Есть разница между декларациями без типов и вообще без деклараций.


Вы можете вызывать несуществующие методы

Компилятор выдает предупреждение, если вы используете селектор (т.е. имя метода), который совершенно неизвестен.

Компилятор не будет беспокоиться, если я вызову метод paint на массиве, потому что в системе есть другой класс, реализующий paint. Эта ошибка будет поймана только во время выполнения.

Если же я вызову метод sortt (в то время как я намереваюсь вызвать sort), компилятор выдаст предупреждение. При разработке сверху вниз вы можете обойти эти предупреждения.

| anArray |
anArray := Array with: 2 with: 1.
anArray paint. "Runtime error. You can't paint an array but perhaps a Shape"
anArray sortt. "Compile-time warning"

Вы можете ссылаться на классы, которые не существуют

Это недопустимо. Хотя в Squeak при необходимости можно быстро создать новый класс из диалога ошибок.

2
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: