Необязательные параметры

Обновлен: Ноябрь 2007

Некоторые параметры процедуры можно задать как необязательные, тем самым указывая, что их можно не задавать при вызове процедуры. Необязательные параметры обозначены ключевым словом Optional в определении процедуры. Действуют следующие правила.

  • Для каждого необязательного параметра в определении процедуры должно быть указано значение по умолчанию.

  • Значение по умолчанию для необязательного параметра следует задавать в виде константного выражения.

  • Каждый параметр, идущий в определении процедуры после необязательного, также должен быть необязательным.

Ниже приведен синтаксис объявления процедуры с необязательным параметром:

Sub sub name(ByVal parameter 1 As data type 1, Optional ByVal parameter 2 As data type 2 = default value)

Вызов процедур с необязательными параметрами

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

Можно опустить сразу несколько необязательных аргументов в списке аргументов, ставя несколько запятых подряд для обозначения их позиций. Ниже приводится пример вызова процедуры, при котором задаются первый и четвертый аргументы, а второй и третий пропускаются.

Call sub name(argument 1, , , argument 4)

Определение наличия необязательного аргумента

Процедура во время выполнения не может отличить пропущенный аргумент от аргумента, для которого в вызывающем коде явным образом задано значение по умолчанию. Если такое различение существенно, можно задать в качестве значения по умолчанию значение, которое вряд ли будет использоваться. В следующей процедуре определяется необязательный параметр office и проверяется его значение по умолчанию QJZ, чтобы увидеть опущен ли он в вызове.

Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
    If office = "QJZ" Then
        Debug.WriteLine("office not supplied -- using Headquarters")
        office = "Headquarters"
    End If
    ' Insert code to notify headquarters or specified office.
End Sub

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

Необязательные параметры и перегрузка

Другой способ определения процедуры с необязательными параметрами состоит в использовании перегрузки. Если имеется один необязательный параметр, то можно определить две перегруженные версии процедуры, одна принимает параметр, а другая — нет. Такой подход становится более сложным с увеличением числа необязательных параметров. Однако, его преимущество заключается в том, что он позволяет точно знать, все ли необязательные аргументы заданы в вызывающей программе.

См. также

Задачи

Практическое руководство. Объявление необязательных параметров процедуры

Практическое руководство. Вызов процедуры, принимающей дополнительные параметры

Практическое руководство. Определение наличия значений необязательных параметров

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

Процедуры в Visual Basic

Параметры и аргументы процедуры

Передача аргументов по значению или по ссылке

Передача аргумента по позиции и по имени

Массивы параметров

Перегрузка процедур

Ссылки

Optional (Visual Basic)

ParamArray