Должен ли я явно объявлять свои переменные в VB6

Я пишу код на Visual Basic 6 и заметил, что мне даже не нужно объявлять переменные, чтобы все работало.

Следующее (явное объявление):

Dim foo As String
foo = "Bar"

Кажется, работает так же хорошо, как это (неявное объявление):

Dim foo
foo = "Bar"

Или это (без объявления):

foo = "Bar"

Я знаю, что в C# мне нужно объявить переменную перед ее использованием, и что допустимы как неявные, так и явные объявления. Я также знаю, что в Python вы вообще не объявляете свои переменные перед их использованием.

Что касается Visual Basic 6 (и, соответственно, VBA), что подходит?

Спасибо


person JMK    schedule 18.04.2012    source источник
comment
+1 Очень хороший вопрос!   -  person Siddharth Rout    schedule 19.04.2012


Ответы (4)


Должен ли я явно объявлять свои переменные в VB6?

да. Почему?

Не только потому, что это хорошая привычка или необходимость, а только по одной основной причине, которую я упомянул в этом посте.

VB по умолчанию присваивает переменной тип Variant. Переменная типа Variant может содержать данные любого типа: от строк до целых чисел, длинных целых чисел, дат, валюты и т. д. По умолчанию «варианты» являются «самым медленным» типом переменных.

А ТАКЖЕ

Как я упоминал ранее, если вы не укажете тип переменной, VB по умолчанию присвоит переменной тип Variant. И вы бы этого не хотели, так как это замедлит ваш код, поскольку компилятору VB требуется время, чтобы решить, какую переменную вы используете. Также следует избегать вариантов, поскольку они несут ответственность за возможные «ошибки несоответствия типов».

Тема: Человеку свойственно ошибаться (см. пункт 3)

Ссылка: http://siddharthrout.wordpress.com/2011/08/01/to-err-is-human/

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

ХТН

person Siddharth Rout    schedule 18.04.2012
comment
+1 Объявление ваших переменных всегда хорошо. Однако, если вы не объявляете их, добавьте к ним соответствующий идентификатор, такой как $ и т. д., чтобы они не считались вариантными. например abc$ — это строка, xyz& — длинная и т. д. - person Pradeep Kumar; 19.04.2012

Это хорошая ПРИВЫЧКА.

Существует опция VB под названием Option Explicit. Если для этого параметра установлено значение ON, VB заставляет вас объявлять переменную перед ее использованием: не более того.

foo = "Bar"

Это помогает с опечаткой имени переменной позже в вашем коде... без этого вы можете опечатать имя переменной, ваша программа компилируется, но не будет работать, и это ТРУДНО раскопать.

person Willow Anne    schedule 18.04.2012
comment
+1. Вы также можете использовать DefObj A-Z в каждом модуле, чтобы снизить вероятность того, что вы случайно пропустите тип, написав Dim foo без типа. Престижность Джиму Маку... О, кстати, это опечатка в слове преднамеренная опечатка :) - person MarkJ; 18.04.2012

В разделе "Инструменты/Параметры" на вкладке "Редактор" установите флажок Требовать объявление переменной. Это автоматически добавит Option Explicit в каждый новый модуль кода.

введите здесь описание изображения

Я бы сказал, что это больше, чем лучшая практика; Я думаю об этом как о требовании здравомыслия программиста. Настройка является постоянной; после установки он остается включенным. Microsoft сделала это опцией, потому что в некоторых старых версиях VB этой функции не было, что также объясняет, почему она была отключена по умолчанию.

person JeffK    schedule 18.04.2012

Я настоятельно рекомендую вам всегда объявлять свои переменные. Это можно сделать принудительно, установив Option Explicit в каждом модуле кода. Вы можете позволить VB6 сделать это автоматически, перейдя в Инструменты-> Параметры, на вкладке Редактор установите флажок Требовать объявление переменной.

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

Вам не нужно объявлять тип ваших переменных, но я также рекомендую вам это сделать. Типом переменной по умолчанию является Variant, который имеет небольшую нагрузку на производительность и создает некоторые проблемы, если вы создаете COM-объекты для использования в C++ или C# (если кто-то еще так делает).

person GTG    schedule 18.04.2012
comment
+1. Вы также можете использовать DefObj A-Z в каждом модуле, чтобы снизить вероятность того, что вы случайно пропустите тип, написав Dim foo без типа. Спасибо Джиму Маку - person MarkJ; 18.04.2012