Явное и неявное объявление (Visual Basic)

По умолчанию компилятор Visual Basic допускает только explicit declaration, при котором каждая переменная должна объявляться до ее использования. Можно отменить это требование и разрешить implicit declaration.

Visual Basic предоставляет переключатель, управляющий явным объявлением. По умолчанию этот переключатель имеет значение On, и поэтому компилятор применяет явное объявление. Если переключатель имеет значение Off, можно использовать переменные без их объявления.

Переключатель явного объявления. Можно установить значение переключателя явного объявления On или Off одним из следующих способов:

  • Установите соответствующее свойство проекта в интегрированной среде разработки (IDE). Нажмите кнопку <ProjectName> Properties в меню Project и перейдите на вкладку Compile. Для параметров Option explicit, Option Strict и Option compare можно задать значения по умолчанию.

  • Укажите параметр командной строки компилятора /optionexplicit.

  • В начале кода добавьте Оператор Option Explicit (Visual Basic).

Если используется оператор Option Explicit, то он переопределяет как свойство проекта, так и параметры компилятора, но только для того файла исходного кода, в который был вставлен оператор.

Преимущества производительности. Задание для Option Explicit значения On имеет преимущество, состоящее в том, что типы вводятся во время компиляции, а не во время выполнения. Это повышает производительность.

Неявное объявление

Если Option Explicit имеет значение Off, можно неявно объявить переменную, просто используя ее в коде. Компилятор назначает Тип данных Object для всех неявно объявленных переменных. Однако приложение будет работать эффективнее, если все переменные будут объявлены явно и с определенным типом данных. Это уменьшает потенциальное количество орфографических ошибок и конфликтов именования. Это также позволяет компилятору определять потенциальные ошибки во время выполнения, например назначение типа Integer типу Short.

Потенциальные ошибки

Непредусмотренные новые переменные

Можно написать процедуру, в которой локальная переменная не объявлена. Это показано в приведенном ниже примере.

Function safeSqrt(num)
' Make sure num is positive for square root.
    tempVal = Math.Abs(num)
    Return Math.Sqrt(tempVal)
End Function

Visual Basic автоматически создает локальную переменную tempVal, которую можно использовать так, как если бы она была объявлено явно. Такой способ объявления хотя и удобен, но может привести к появлению трудно обнаруживаемых ошибок в коде, если имя переменной будет введено неправильно. Предположим, процедура в предыдущем примере была записана следующим образом:

Function safeSqrt(num)
' Make sure num is positive for square root.
    tempVal = Math.Abs(num)
    Return Math.Sqrt(temVal)
End Function

На первый взгляд код выглядит так же. Но поскольку переменная tempVal по ошибке является аргументом Sqrt, компилятор создает дополнительную локальную переменную с именем temVal, которой никогда не присваивается значение, и функция всегда возвращает ноль.

Непредусмотренный существующий элемент ссылки

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

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

Явное объявление

Явное объявление необходимо для исходного файла, содержащего процедуру safeSqrt. В предыдущем примере Visual Basic будет распознавать tempVal и temVal как необъявленные переменные и генерировать ошибки в обоих случаях. Поэтому переменную tempVal необходимо явно объявить. Это показано в приведенном ниже примере.

Function safeSqrt(ByVal num As Double) As Double
' Make sure num is positive for square root.
    Dim tempVal As Double = Math.Abs(num)
    Return Math.Sqrt(temVal)
End Function

Исправленный код поможет понять, где находится ошибка, поскольку Visual Basic отобразит сообщение об ошибке в написании temVal. Поскольку явное объявление помогает обнаруживать подобные ошибки, рекомендуется использовать его во всем коде.

Примечание

Оператор Option Explicit работает на основе "файл-файл".Он должен находиться в начале каждого файла исходного кода, в котором необходимо управлять принудительным явным объявлением переменной.

См. также

Задачи

Практическое руководство. Изменение свойств проекта и параметров конфигурации

Ссылки

Сводка типов данных (Visual Basic)

Функции преобразования типов (Visual Basic)

Основные понятия

Программирование без типов в Visual Basic

Проверка типов в Visual Basic

Object как универсальный тип данных (Visual Basic)

Эффективное использование типов данных (Visual Basic)

Переменные в Visual Basic

Соглашения об именах Visual Basic