можете пояснить почему использование конструкции Call Sub(...) не хорошо?
Нехорошо потому, что процедуры отлично выполняются без Call, а функцию можно вызвать только через Call
Call MyFunction
либо же в правой части операции присвоения
Dim a: a = FunctionCall
При чтении кода очень полезно бывает понимать, что вызывается, процедура иди функция. Если использовать Call для вызова как процедур, так и функций, то в таком коде при чтении будет невозможно разделить вызов процедуры от вызова функции.
Явных ограничений на использования Call для вызова процедур не встречал
Явных ограничений никаких нет. Так же, как, например, на объявление переменных :) Тем не менее, в любых пособиях по написанию качественного кода рекомендуется объявлять переменные.
в данном случае вызов процедуры как раз соответствует вызову функции, когда возвращаемое значение не используется :)
Не понимаю, как вызов процедуры может соответствовать вызову функции. Повторно используемый код сразу определяется либо как функция, которая возвращает значение всегда
Public Function MyFunction
либо как процедура, которая никогда не возвращает значение
Public Sub MySub
Вообще были проблемы (обсуждались и на этой ветве форума) при Call с передачей параметров по ссылке/значению, но к данной теме это отношения не имеет вроде как.
Никогда не испытывал проблем при передачи параметров. Единственная проблема, которая может возникать, это при вызове процедуры с единственным параметром, который ей пытаются передать в скобках. В этом случае параметр будет передаваться по значению всегда, поскольку VBScript будет интерпретировать данную ситуацию как вызов процедуры
MySub с параметром
(a). И сначала выполнит действие в скобках, т.е. получит значение переменной
a, а потом передаст его в качестве параметра в процедуру MySub.
Dim a
Public Sub MySub(byRef parametr)
parametr = 6
End Sub
a = 10
MySub a
Print a ' 6 will be printed
a = 10
MySub(a)
Print a ' 10 will be printed