Funkcja i procedura - parametry i opis
Argument listy argumentów procedury czy funkcji to:
[ Optional ] [ByVal | ByRef ] [ParamArray ]
nazwa_parametru [()] [ As typ ] [ = wartość_domyślna ]
Typ musi być podany, gdy użyto Option Strict On.
Typ to: Boolean, Byte, Char, Date, Decimal, Double, Integer, Long, Object, Short, Single, String, nazwa wyliczenia, nazwa struktury, nazwa klasy lub interfejsu.
Funkcja czy procedura domyślnie są publiczne, czyli brak opcji jawnej oznacza Public.
Funkcja zwraca wartość przy użyciu instrukcji VB 6, wychodzącej z użycia:
Nazwa_funkcji = wartość
albo nowej konstrukcji:
Return wartość
albo domyślnej wartości, przy użyciu:
Exit Function (wtedy zwracana jest domyślna wartość danego typu,
czyli 0 dla numerycznych typów, Nothing dla obiektów itp.
Powyższe instrukcje mogą wystąpić wielokrotnie w ciele funkcji/procedury.
Parametry formalne funkcji/procedury:
Parametry Optional muszą być skupione na końcu listy parametrów i muszą mieć wartości domyślne.
Parametr ParamArray może być tylko jeden, i musi wystąpić jako ostatni i nie może współegzystować z parametrem Optional na jednej liście parametrów.
Wywołanie funkcji/procedury - parametry aktualne:
x=f(x, y, z)
f(x, y, z)
Call f(x, y, z) czyli można wywoływać (ten I powyższy przykład) funkcję jak procedurę (bez wykorzystania wtedy wartości zwracanej!!!
Parametry podaje się w wywołaniu zgodnie z kolejnością na liście deklaracyjnej parametrów, mogą to być tylko przecinki dla wartości domyślnych lub nawet ich brak w przypadku parametrów domyślnych ostatnich. Drugim sposobem jest użycie nazwanych parametrów - wtedy muszą wystąpić przynajmniej te, które nie mają wartości domyślnych i to w dowolnej kolejności, ale w postaci nazwa := wartość
======================================================================
Module Module1
'Delegate Sub pittance(ByVal f As odpowiedz, ByVal x As Integer, ByVal y As Integer)
'Delegate Function odpowiedz() As Integer
Delegate Function ff(ByVal x As Double) As Double
Sub Main()
Dim s As ff
' s = AddressOf Math.Sin
Console.WriteLine(f(AddressOf Math.Sin, Math.PI / 2))
Console.ReadLine()
End Sub
Function f(ByVal f1 As ff, ByVal xx As Double) As Double
Return (f1(xx))
End Function
'Sub pyt(ByVal o As odpowiedz, ByVal xx As Integer, ByVal yy As Integer)
'End Sub
End Module
======================================================================
Module Module1
Sub Main()
f(3, 4, 5, 6) ' wywołanie funkcji jak procedury
End Sub
Function f(ByVal ParamArray t() As Double) As Double
Dim i As Integer
For i = 0 To t.Length - 1
Console.WriteLine(t(i))
Next
End Function
End Module
Dim enum As IEnumerator = t.GetEnumerator ' użycie Interfejsu IEnumerator !
While (enum.MoveNext)
Console.WriteLine(enum.Current)
End While
===========================================================================