Трябва ли изрично да декларирам моите променливи във 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/

Горната връзка обхваща и други части, свързани с кодирането, за които човек може/трябва да се погрижи.

HTH

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 без типа. Слава на Jim Mack... О, BTW е правописната грешка в думата typo deberate :) - 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