Function Deyimi (Visual Basic)
Bir yordamı tanımlayan adı, parametreleri ve kodu Function belirtir.
Syntax
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Bölümler
attributelistİsteğe bağlı. Bkz. Öznitelik Listesi.
accessmodifierİsteğe bağlı. Aşağıdakilerden biri olabilir:
Bkz. Visual Basic..
proceduremodifiersİsteğe bağlı. Aşağıdakilerden biri olabilir:
MustOverride OverridesNotOverridable Overrides
Sharedİsteğe bağlı. Bkz. Paylaşılan.
Shadowsİsteğe bağlı. Bkz. Gölgeler.
Asyncİsteğe bağlı. Bkz. Async.
Iteratorİsteğe bağlı. Bkz. Tekrarlayıcı.
nameGereklidir. Yordamın adı. Bkz. Bildirilen Öğe Adları.
typeparamlistİsteğe bağlı. Genel yordam için tür parametrelerinin listesi. Bkz. Tür Listesi.
parameterlistİsteğe bağlı. Bu yordamın parametrelerini temsil eden yerel değişken adlarının listesi. Bkz. Parametre Listesi.
returntypeise
Option StrictOngereklidir. Bu yordam tarafından döndürülen değerin veri türü.Implementsİsteğe bağlı. Bu yordamın, her biri bu yordamın sınıf veya yapıyı içeren bir arabirimde tanımlanan bir veya
Functiondaha fazla yordam uygulaydığını gösterir. Bkz. Implements Deyimi.implementslistSağlanırsa
Implementsgereklidir. UygulananFunctionyordamların listesi.implementedprocedure [ , implementedprocedure ... ]Her
implementedprocedurebiri aşağıdaki söz dizimi ve bölümlerine sahip:interface.definednameBölüm Description interfaceGereklidir. Bu yordamın sınıf veya yapı içeren tarafından uygulanan arabirimin adı. definednameGereklidir. Yordamın içinde tanımlandığı interfacead.Handlesİsteğe bağlı. Bu yordamın bir veya daha fazla belirli olayları işleyene olduğunu gösterir. Bkz. Tanıtıcılar.
eventlistSağlanırsa
Handlesgereklidir. Bu yordamın işlemektedir olay listesi.eventspecifier [ , eventspecifier ... ]Her
eventspecifierbiri aşağıdaki söz dizimi ve bölümlerine sahip:eventvariable.eventBölüm Description eventvariableGereklidir. Olayı yükselten sınıfın veya yapının veri türüyle bildirilen nesne değişkeni. eventGereklidir. Bu yordamın işlemektedir olayın adı. statementsİsteğe bağlı. Bu yordam içinde yürütülecek deyim bloğu.
End FunctionBu yordamın tanımını sonlandırılır.
Açıklamalar
Tüm yürütülebilir kod bir yordamın içinde yer alalır. Sırasıyla her yordam bir sınıf, yapı veya içeren sınıf, yapı veya modül olarak adlandırılan bir modül içinde bildiriliyor.
Çağıran koda bir değer dönmek için bir yordam Function kullanın; aksi takdirde bir yordam Sub kullanın.
İşlev Tanımlama
Bir yordamı Function yalnızca modül düzeyinde tanımlayabilirsiniz. Bu nedenle, bir işlevin bildirim bağlamı bir sınıf, yapı, modül veya arabirim olmalı ve kaynak dosya, ad alanı, yordam veya blok olarak kullanılamaz. Daha fazla bilgi için bkz. Bildirim Bağlamları ve Varsayılan Erişim Düzeyleri.
Function yordamları varsayılan olarak genel erişime göre ayarlar. Erişim değiştiricileriyle erişim düzeylerini ayarlayabilirsiniz.
Bir Function yordam, yordamın döndür olduğu değerin veri türünü bildirebilirsiniz. Herhangi bir veri türünü veya bir numaralamanın adını, yapıyı, sınıfı veya arabirimi belirtebilirsiniz. parametresini belirtmezseniz returntype yordam Object döndürür.
Bu yordam anahtar Implements sözcüğünü kullanıyorsa, içeren sınıf veya yapının da ya da deyiminden hemen Implements sonra bir deyimi Class Structure olmalıdır. deyiminde Implements belirtilen her arabirimi içermesi implementslist gerekir. Ancak, arabiriminin tanımladığı adın (içinde) bu yordamın adıyla (içinde) Function definedname eşleşmesi gerek name değildir.
Not
Satır içi işlev ifadelerini tanımlamak için lambda ifadelerini kullanabilirsiniz. Daha fazla bilgi için bkz. İşlev İfadesi ve Lambda İfadeleri.
İşlevden Dönme
Yordam Function çağıran koda döndüğünde, yürütme yordamını çağıran deyimini izleyen deyimle devam eder.
Bir işlevden değer dönmek için, değeri işlev adına atayın veya bir deyimine Return dahildir.
Deyimi aynı anda dönüş değerini atar ve aşağıdaki örnekte de olduğu Return gibi işlevden çıkar.
Function MyFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Aşağıdaki örnek, dönüş değerini işlev adına atar myFunction ve ardından dönüş için Exit Function deyimini kullanır.
Function MyFunction(ByVal j As Integer) As Double
MyFunction = 3.87 * j
Exit Function
End Function
ve Exit Function Return deyimleri bir yordamdan hemen çıkışa neden Function olur. Herhangi bir sayıda Exit Function Return ve deyimi yordamın herhangi bir yerinde görünebilir ve ile deyimlerini Exit Function Return karıştırabilirsiniz.
için bir Exit Function değer atamadan kullanırsanız, yordam içinde belirtilen name veri türü için varsayılan değeri returntype döndürür. returntypeBelirtilmezse, yordam için varsayılan Nothing değer olan değerini Object döndürür.
İşlev Çağırma
Bir yordamı, bir ifadede parantez içinde yordam adını ve ardından bağımsız Function değişken listesini kullanarak çağırabilirsiniz. Parantezleri yalnızca herhangi bir bağımsız değişken temin ediyorsanız atlarsanız. Ancak, parantezleri her zaman dahil ediyorsanız kodunuz daha okunabilir.
Bir Function yordamı, , veya gibi herhangi bir kitaplık işlevini çağırarak aynı Sqrt şekilde Cos ChrW çağırabilirsiniz.
Anahtar sözcüğünü kullanarak bir işlevi de Call çağırabilirsiniz. Bu durumda, dönüş değeri yoksayılır. Çoğu durumda Call anahtar sözcüğünün kullanılması önerilmez. Daha fazla bilgi için bkz. Call Deyimi.
Visual Basic bazen iç verimliliği artırmak için aritmetik ifadeleri yeniden düzenleyebilir. Bu nedenle, işlev aynı ifadede değişkenlerin değerini değiştirirken Function aritmetik ifadede bir yordam kullanmama gerekir.
Zaman Uyumsuz İşlevler
Zaman uyumsuz özellik, açık geri çağırmalar kullanmadan veya kodunuzu birden çok işlev veya lambda ifadesinde el ile bölmeden zaman uyumsuz işlevleri çağırmanıza olanak sağlar.
Bir işlevi Async değiştiricisi ile işaretleyeceksiniz, işlevinde Await işleci kullanabilirsiniz. Denetim işlevde Await bir ifadeye ulaştığında, denetim çağırana döner ve beklenen görev tamamlandıktan sonra işlevde ilerleme Async askıya alınır. Görev tamamlandığında, yürütme işlevinde sürdürebilirsiniz.
Not
Yordam, henüz tamamlanmadı ilk beklenen nesneyle karşılaştığında veya yordamın sonuna (hangisi önce gerçekleşirse) geldiğinde Async Async çağırana geri döner.
Bir Async işlevin dönüş türü veya Task<TResult> Task olabilir. Dönüş Async türüne sahip bir işlev örneği Task<TResult> aşağıda verilmiştir.
bir Async işlev herhangi bir ByRef parametresi bildirilemez.
Bir Alt Deyim değiştiriciyle de Async işaretlenir. Bu öncelikle bir değerin döndürülene olay işleyicileri için kullanılır. Bir yordam beklenemedi ve bir yordamın çağıranı, yordam tarafından Async Sub Async Sub atılan özel durumları Sub yakalayamaz.
İşlevler hakkında daha fazla bilgi için bkz. Async ve Await ile Zaman Uyumsuz Programlama, Zaman Flow Programlarında Denetim Ve Zaman Uyumsuz Async Dönüş Türleri.
Iterator İşlevleri
Bir yineleme işlevi, liste veya dizi gibi bir koleksiyon üzerinde özel yineleme gerçekleştirir. Bir tekrarlayıcı işlev, her öğeyi tek tek dönmek için Yield deyimini kullanır. Bir Yield deyimine ulaşıldı, kodda geçerli konum hatırlanmış olur. Yürütme, tekrarlayıcı işlevi bir sonraki çağrıda bu konumdan yeniden başlatılır.
İstemci kodundan Bir For Each... kullanarak bir daha fazla çağrıda bulundurabilirsiniz. Sonraki deyim.
Bir tekrarlayıcı işlevin dönüş türü , IEnumerable IEnumerable<T> , veya IEnumerator IEnumerator<T> olabilir.
Daha fazla bilgi için bkz. Tekrarlayıcılar.
Örnek 1
Aşağıdaki örnek, bir yordamın gövdesinde yer alan adı, parametreleri ve kodu Function bildiren deyimini Function kullanır. Değiştirici, ParamArray işlevin değişken sayıda bağımsız değişkeni kabul etmesini sağlar.
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
Örnek 2
Aşağıdaki örnek, önceki örnekte bildirilen işlevi çağırır.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
End Module
Örnek 3
Aşağıdaki örnekte, DelayAsync dönüş Async Function türüne sahip olan bir 'dır. Task<TResult> DelayAsync , tamsayı Return döndüren bir deyimine sahip. Bu nedenle işlevinin DelayAsync bildiriminin dönüş türüne sahip olması Task(Of Integer) gerekir. Dönüş türü Task(Of Integer) olduğundan, içinde ifadesinin değerlendirmesi Await bir tamsayı DoSomethingAsync üretir. Bu, şu deyimde gösterildi: Dim result As Integer = Await delayTask .
Yordam, startButton_Click bir yordam Async Sub örneğidir. bir işlev olduğundan, çağrısının görevi aşağıdaki deyimde de olduğu DoSomethingAsync Async gibi DoSomethingAsync bek gerekmektedir: Await DoSomethingAsync() . Yordam, startButton_Click Sub bir ifadeye sahip Async olduğundan değiştiriciyle Await tanımlanmalıdır.
' Imports System.Diagnostics
' Imports System.Threading.Tasks
' This Click event is marked with the Async modifier.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
Await DoSomethingAsync()
End Sub
Private Async Function DoSomethingAsync() As Task
Dim delayTask As Task(Of Integer) = DelayAsync()
Dim result As Integer = Await delayTask
' The previous two statements may be combined into
' the following statement.
' Dim result As Integer = Await DelayAsync()
Debug.WriteLine("Result: " & result)
End Function
Private Async Function DelayAsync() As Task(Of Integer)
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5