Подтвердить что ты не робот

Значения по умолчанию переменной VBA/массива

Рассмотрим объявления

Dim x As Double
Dim avg(1 To 10) As Double

Каковы значения по умолчанию в x и avg?

Через тестирование я хочу сказать, что x инициализируется нулем. Аналогично, я хочу сказать, что все элементы в avg были инициализированы нулем.

Однако, могу ли я написать код, который зависит от этого? Или значения инициализации по умолчанию действительно неопределимы?

4b9b3361

Ответ 1

Если вы указываете тип данных, но не указываете инициализатор, Visual Basic инициализирует переменную значением по умолчанию для своего типа данных, которое для всех числовых типов равно 0 (ноль).

При запуске макроса все переменные инициализируются значением. числовая переменная инициализируется до нуля, строка переменной длины инициализируется нулевой строкой ( "), а строка фиксированной длины - заполненный кодом ASCII 0. Вариантные переменные инициализируются Пустой. Пустая переменная представлена ​​нулем в числовом контексте и строку нулевой длины (" ") в контексте строки.

Ссылка.

Ответ 2

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

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

Dim x As Double: x = 0

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

Ответ 3

Да, вы должны быть в состоянии зависеть от инициализации числовых типов до 0 в VBA, поскольку это значение по умолчанию.

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