Myślę, że wielu programistów nie zdaje sobie sprawy z faktu, że wywołując zewnętrzną procedurę parametryzowaną Sub ma znaczenie to, czy parametry zostaną podane w nawiasie czy też nie. Chodzi o różnicę, którą obrazują następujące składnie wywołania:
1 | ProceduraParametryzowana Argument |
2 | ProceduraParametryzowana (Argument) |
Zanim wyjaśnię różnicę i przyczynę różnicy najlepiej będzie jeżeli spojrzymy na przykład:
1 | Sub Boo( ByRef PARAM As String ) |
3 | PARAM = PARAM + " World" |
Wywołanie procedury Foo sprawi, że najpierw otrzymamy w wyniku 'Hello', a następnie uzyskamy wartość zmiennej 'Hello World". Skąd ta różnica? Otóż ujęcie argumentów procedury w nawias (wywołanie 1 powyżej) zmienia typ parametru z ByRef na ByVal, to zaś sprawia, że zmienna przekazana do podprocedury `Boo` nie zmienia swojej wartości. Przekazanie argumentu bez nawiasu sprawia, że parametr jest typu ByRef a więc wszystkie operacje na nim wykonane w podprocedurze zostaną również przekazane do procedury nadrzędnej.
Podobną różnicę w zachowaniu i wyniku wywołania podprocedury znajdziemy korzystając z instrukcji Call. W tym przypadku dodatkowy nawias będzie zmieniał tryb przekazania parametru. Obrazują to następujące przykłady:
1 | Call Boo(STR) >> przekazanie ByRef >>Wynik Hello World |
2 | Call Boo((STR)) >> przekazanie ByVal >>Wynik Hello |
Brak komentarzy:
Prześlij komentarz