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