Обратите внимание на объявления
Dim x As Double
Dim avg(1 To 10) As Double
Каковы значения по умолчанию в x
и avg
?
Путем тестирования я хочу сказать, что x
инициализируется нулем.
Точно так же я хочу сказать, что все элементы в avg
были инициализированы равными нулю.
Однако могу ли я написать код, который зависит от этого? Или значения инициализации по умолчанию действительно неопределенны?
Если вы указываете тип данных, но не указываете инициализатор, Visual Basic инициализирует переменную значением по умолчанию для ее типа данных, который для всех числовых типов равен 0 (нулю).
При запуске макроса все переменные инициализируются значением. Числовая переменная инициализируется нулем, строка переменной длины инициализируется строкой нулевой длины (""), а строка фиксированной длины заполняется кодом ASCII 0. Переменные переменной инициализируются пустыми. Пустая переменная представлена нулем в числовом контексте и строкой нулевой длины ("") в строковом контексте.
Ссылка .
Вы можете написать код, который неявно зависит от значения по умолчанию данного типа данных, но это не значит, что вы всегда должны , потому что это не так очевидно, как вы Вы делаете, что может запутать следующего человека, читающего ваш код (и этот человек может стать вами через год).
Вы не можете ошибиться с явным присвоением начального значения вашим переменным. Если вы хотите, вы можете сделать это в той же строке, что и объявление:
Dim x As Double: x = 0
Конечно, это немного больше для массивов, но обычно есть удобное место для инициализации их ниже в вашем коде где вы их все равно проходите.
Да, вы должны иметь возможность зависеть от того, какие типы чисел инициализируются в 0 в VBA, поскольку это их значение по умолчанию.
Однако, если вас это беспокоит, а начальные значения так важны, тогда я рекомендую вам просто явно присвоить им значение 0 (хотя вам это и не нужно).