Понимание переменных в Visual Basic - PullRequest
0 голосов
/ 17 марта 2009

В чем основная проблема, если я не объявляю тип переменной? Например, Dim var1 против Dim var1 as Integer.

Ответы [ 5 ]

7 голосов
/ 17 марта 2009

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

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

Кроме того, обычно есть некоторые накладные расходы на обработку, связанные с вариантами, но это менее важная проблема.

3 голосов
/ 17 марта 2009

Есть несколько причин:

  • Значительно улучшена безопасность типов.
  • нижние когнитивные накладные расходы; компилятор и Intellisense могут вам помочь.
  • снижение производительности; преобразование вещей в Variant типов имеет небольшую, но нетривиальную стоимость.
  • Устраняет необходимость именования бородавок (например, lblTitle, чтобы сообщить вам, что что-то должно содержать Label).
  • Перемещает некоторые виды ошибок времени выполнения в ошибки времени компиляции, что является большой победой производительности.
1 голос
/ 17 марта 2009

Кто-то уже упоминал Intellisense, но стоит повторить.

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

Вы говорите "это может быть что угодно" & mdash; и это правда. Но затем вы продолжаете говорить «так должно быть хорошо». Это не обязательно следует, и это очень опасно. Не все может быть назначено или объединено со всем остальным. Это может быть что угодно & mdash; но это является чем-то, точнее, какой-то конкретной вещью Без явного типа компилятор не может знать, что именно, и не может помочь вам избежать ошибок.

0 голосов
/ 18 марта 2009

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

Dim myvar1
myvar1 = 1

'A whole lot more code 

myvar1 = "this string"

Если вам когда-нибудь понадобится поддерживать чужой код, вы начнете понимать, почему такого рода вещи (бесшумное изменение типа переменной) может быть чрезвычайно сложным в обслуживании. Особенно, если вы используете переменную уровня модуля, это может привести к некоторым действительно интересным проблемам. Это аналогично использованию Option Explicit в коде VB. Без Option Explicit вы можете делать такие вещи, не осознавая этого:

myvar1 = 1

'A whole lot more code here too

myvarl = 2

В некоторых шрифтах эти два имени переменных невозможно различить, и это может привести к трудностям при поиске ошибок.

0 голосов
/ 17 марта 2009

Внешне, если вы не объявите тип, Intellisense не сможет вам помочь, потому что не знает, какой это тип.

...