Необязательные параметры (Visual Basic)

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

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

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

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

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

Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)  

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

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

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

Sub name(argument 1, , , argument 4)  

В следующем примере происходит несколько вызовов функции MsgBox. У функции MsgBox есть один обязательный параметр и два необязательных параметра.

При первом вызове MsgBox указываются все три аргумента в том порядке, в котором они определены в MsgBox. При втором вызове указывается только обязательный аргумент. При третьем и четвертом вызове указываются первый и третий аргументы. Третий вызов указывает аргумент по позиции, а четвертый — по имени.

MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")

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

Процедура во время выполнения не может отличить пропущенный аргумент от аргумента, для которого в вызывающем коде явным образом задано значение по умолчанию. Если такое различение существенно, можно задать в качестве значения по умолчанию значение, которое вряд ли будет использоваться. Следующая процедура определяет необязательный параметр 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 в качестве значения по умолчанию, при условии, что это не является ожидаемым значением аргумента.

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

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

См. также