PoprzedniaWyżejGłównaSpis treściIndex hasełZnajdźBokGora
BokGora

Google
 

Function

Deklaruje nazwę, argumenty i kod, który tworzy procdurę Function.

Składnia rozkazu Function, Private Function, Public Function, Friend Function:

[Static] Function NazwaFun [(ListaArg)] [As typ]
  [rozkazy]
  [NazwaFun=Wartość]
  [Exit Function]
  [rozkazy]
  [NazwaFun=Wartość]
End Function

Private [Static] Function NazwaFun [(ListaArg)] [As typ]
  [rozkazy]
  [NazwaFun=Wartość]
  [Exit Function]
  [rozkazy]
  [NazwaFun=Wartość]
End Function

Public [Static] Function NazwaFun [(ListaArg)] [As typ]
  [rozkazy]
  [NazwaFun=Wartość]
  [Exit Function]
  [rozkazy]
  [NazwaFun=Wartość]
End Function

Friend [Static] Function NazwaFun [(ListaArg)] [As typ]
  [rozkazy]
  [NazwaFun=Wartość]
  [Exit Function]
  [rozkazy]
  [NazwaFun=Wartość]
End Function

Składnia instrukcji Function, Private Function, Public Function i Friend Function składa się z części:
Static (Opcjonalne). Określa, że lokalne zmienne procedury Function zachowują swoją wartość pomiędzy wywołaniami procedury. Atrybut Static nie działa na zmienne zadeklarowane na zewnątrz procedury Function, nawet jeżeli są używane wewnątrz procedury.
NazwaFun (Wymagany) Nazwa procedury zgodna ze standartami nazewnictwa.
ListaArg (Opcjonalne) Lista zmiennej reprezentujących argumenty, które są przekazywane do procedury Function podczas wywoływania. Nazwy zmiennych powinny być oddzielone od siebie przecinkami.
typ (Opcjonalne) Określa typ danych zwracanej wartości (Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (aktualnie nie obsługiwany), Date, String, Variant lub Object lub typ użytkownika). Nie może być zwrócona tablica określonego typu, ale może zostać zwrócona wartość typu Variant zawierająca tablicę.
rozkazy (Opcjonalne) Dowolna lista rozkazów , które mają być wykonane wewnątrz procedury.
Wartość (Opcjonalne) Wartość zwraca przez procedurę Function.

Argument ListaArg składa się z części:
[Optional] [ByVal | ByRef] [ParamArray] NazwaArg[()] [As typ] [=DomyślnaWartość]
Optional (Opjonalny) Słowo kluczowe, określające, że argument nie jest wymagany. Jeżeli zostanie użyty, wszystkie argumenty listy ListaArg muszą być również opcjonalne i zadeklarowane przy użyciu słowa Optional. Słowo Optional nie może być użyte z żadnym argumentem jeżeli zostanie użyte ParamArray.
ByVal (Opcjonalne) Określa, że wartość zostanie przekazana przez wartość.
ByRef (Opcjonalne) (Domyślne) Określa, że wartość zostanie przekazana przez referencję.
ParamArray (Opcjonalny) Używane tylko z ostatnim argumentem na liście ListaArg, aby określić, że ostatni argument jest opcjonalną (Optional) tablicą elementów typu Variant. Słowo kluczowe ParamArray pozwala na wprowadzenie zmiennej liczby argumentów. ParamArray nie może być użyte z ByVal, ByRef lub Optional.
NazwaArg (Wymagane) Nazwa argumentu zgodna z konwencją nazewnictwa zmiennych.
typ (Opcjonalne) Określa typ danych argumentu (Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (aktualnie nie obsługiwany), Date, String lub Variant).
DomyślnaWartość (Opcjonalne) Wartość domyślna argumentu. Może to być stała lub wyrażenie stałe. Dotyczy tylko poprawnych parametrów lub opcjonalnych (Optional). Jeżeli typem argumentu jest Object, dopuszczalną wartością jest tylko Nothing.

Procedura Function jest dostępna dla wszystkich procedur modułu.
Procedura Private Function jest dostępna tylko w module, w którym została zadeklarowana.
Procedura Public Function jest dostępna we wszystkich procedurach i we wszystkich modułach w aplikacji, chyba że zostało użyte Option Private, które powoduje, że procedury są publiczne tylko wewnątrz projektu, w którym rezydują.
Procedura Friend Function (tylko w modułach klas) jest dostępna tylko w projekcie ale nie jest widziana przez kontroler instancji obiektu.

Procedury Function mogą być rekurencyjne. Oznacza to, że mogą wywoływać siebie. Jednak rekurnecja może powodować błędy (stack overflow). Słowo Static zwykle nie jest używane w procedurach rekurencyjnych.

Cały wykonywalny kod musi być umieszczony wewnątrze procedur. Nie można stworzyć procedury Function wewnątrz innej procedury Function, Function lub Property.

Słowo kluczowe Exit Function jest używane do bezwarunkowego zakończenia wykonywania procedury Function. Wykonywanie programu jest kontynuowane od rozkazu następnego za wywołaniem procedury Function. Dowolna liczba rozkazów Exit Function może znajdować się w dowolnych miejscach wewnątrz procedury.

Podobnie jak procedura Sub, procedura Function jest oddzielną częścią programu, która może pobrać argumenty, wykonać wiele rozkazów i zmieniać wartość argumentów. Jednak w przeciwieństwie do procedury Sub, która nie zwraca wartości, procedura Function może być używana po prawej stronie wyrażenia.

Procedurę Function wywołuje się przez podanie jej nazwy z listą argumentów do przekazania. Procedury Function można wywoływać również przez użycie rozkazu Call.

Aby zwrócić wartość z funkcji, należy podstawić tę wartość pod nazwę funkcji. Dowolna liczba takich podstawień może się znajdować w dowolnych miejscach funkcji. Jeżeli żadna wartość nie zostanie podstawiona pod NazwaFun, funkcja zwróci wartość domyślną: funkcje numeryczne zwracają 0, funkcje łańcuchowe zwracają łańcuch zerowej długości ("") funkcje Variant zwracają Empty. Funkcje, które zwracają odowłanie do obiektu zwracają Nothing, jeżeli żadne odwołanie do obiektu nie zostanie skojarzone z nazwą funkcji (przez użycie Set) wewnątrz funkcji.

Poniższy przykład pokazuje jak zwracać wartość funkcji:

Function Razy2(intA As Integer) As Integer
...
Razy2=intA*2  'pomnóż argument przez 2 i zwróć
...
End Function


Zmienne używane wewnątrz procedur Function dzielą się na dwie kategorie: lokalne - zadeklarowane wewnątrz procedury i zewnętrzne - zadeklarowana poza procedurą. Zmienne, które są zadeklarowane wewnątrz procedury (przy użyciu Dim lub równoważnego) są zawsze lokalne dla procedury. Zmienne, które są używane w procedurze a nie są w niej zadeklarowane są również lokalne, z wyjątkiem tych, które zostały zadeklarowane poza procedurą (na wyższym poziomie).

Procedury mogą korzystać ze zmiennych, które nie są zadeklarowane w procedurze, ale może powstać kofilkt nazw, jeżeli jest coś zdefiniowane na poziomie modułu, co ma taką samą nazwę. Jeżeli procedura odnosi się do niezadeklarowanej zmiennej, która ma taką samą nazwę jak inna procedura, zmienna lub stała, to zostanie przyjęte, że procedura odwołuje się do nazwy na poziomie modułu. Aby uniknąć takich konfliktów należy deklarować zmienne. Można użyć rozkazu Option Explicit aby wymusić deklaracje zmiennych.



Przykład użycia rozkazu Function:

Function Przyklad(intI As Integer)  'początek procedury
  If intI=0 Then  'sprawdzenie czy intI=0
   Exit Function  'jeżeli tak to opuść procedurę
  Else
  Przyklad=intI*3  'jeżeli nie to wykonaj obliczenie i zwróć wartość
  End If
End Function  'koniec procedury


(Zmienne, typy zmiennych i rozkaz If Else zostały opisane w innych częściach kursu.)



na górę strony...


Google
 
Poprzednia | Wyżej | Strona główna | Spis Treści | Index haseł | Opis VB

BokDol
PoprzedniaWyżejGłównaSpis treściIndex hasełZnajdźBokGora
BokGora