Function Deyimi (Visual Basic)

Bir yordamı tanımlayan adı, parametreleri ve kodu bildirir Function .

Sözdizimi

[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Function ]
    [ statements ]
End Function

Parça

  • attributelist

    isteğe bağlı. Bkz. Öznitelik Listesi.

  • accessmodifier

    isteğe bağlı. Aşağıdakilerden biri olabilir:

    Bkz. Visual Basic'te erişim düzeyleri.

  • proceduremodifiers

    isteğe bağlı. Aşağıdakilerden biri olabilir:

  • Shared

    isteğe bağlı. Bkz. Paylaşılan.

  • Shadows

    isteğe bağlı. Bkz. Gölgeler.

  • Async

    isteğe bağlı. Bkz. Zaman Uyumsuz.

  • Iterator

    isteğe bağlı. Bkz. Yineleyici.

  • name

    Gerekli. Yordamın adı. Bkz. Bildirilen Öğe Adları.

  • typeparamlist

    isteğe bağlı. Genel yordam için tür parametrelerinin listesi. Bkz. Tür Listesi.

  • parameterlist

    isteğe bağlı. Bu yordamın parametrelerini temsil eden yerel değişken adlarının listesi. Bkz. Parametre Listesi.

  • returntype

    ise Option Strict gereklidir On. Bu yordam tarafından döndürülen değerin veri türü.

  • Implements

    isteğe bağlı. Bu yordamın, her biri bu yordamın içeren sınıfı veya yapısı tarafından uygulanan bir arabirimde tanımlanan bir veya daha fazla Function yordam uyguladığını gösterir. Bkz . Implements Deyimi.

  • implementslist

    Sağlanırsa Implements gereklidir. Function Uygulanan yordamların listesi.

    implementedprocedure [ , implementedprocedure ... ]

    Her implementedprocedure birinin söz dizimi ve bölümleri vardır:

    interface.definedname

    Bölüm Açıklama
    interface Gerekli. Bu yordamın içeren sınıfı veya yapısı tarafından uygulanan arabirimin adı.
    definedname Gerekli. Yordamın içinde interfacetanımlandığı ad.
  • Handles

    isteğe bağlı. Bu yordamın belirli bir veya daha fazla olayı işleyebileceğini gösterir. Bkz. Tanıtıcılar.

  • eventlist

    Sağlanırsa Handles gereklidir. Bu yordamın işlediği olayların listesi.

    eventspecifier [ , eventspecifier ... ]

    Her eventspecifier birinin söz dizimi ve bölümleri vardır:

    eventvariable.event

    Bölüm Açıklama
    eventvariable Gerekli. Nesne değişkeni, olayı oluşturan sınıfın veya yapının veri türüyle bildirildi.
    event Gerekli. Bu yordamın işlediği olayın adı.
  • statements

    isteğe bağlı. Bu yordam içinde yürütülecek deyim bloğu.

  • End Function

    Bu yordamın tanımını sonlandırır.

Açıklamalar

Tüm yürütülebilir kod bir yordam içinde olmalıdır. Sırayla her yordam bir sınıf, bir yapı veya içeren sınıf, yapı veya modül olarak adlandırılan bir modül içinde bildirilir.

Çağıran koda bir değer döndürmek için bir Function yordam kullanın; aksi takdirde bir Sub yordam kullanın.

İşlev Tanımlama

Bir Function yordamı 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ıdır ve kaynak dosya, ad alanı, yordam veya blok olamaz. Daha fazla bilgi için bkz . Bildirim Bağlamları ve Varsayılan Erişim Düzeyleri.

Function yordamları varsayılan olarak genel erişim olarak kullanır. Erişim değiştiricileri ile erişim düzeylerini ayarlayabilirsiniz.

Yordam Function , yordamın döndürdüğü değerin veri türünü bildirebilir. Herhangi bir veri türünü veya numaralandırmanın adını, yapısını, sınıfını veya arabirimini belirtebilirsiniz. Parametresini returntype belirtmezseniz, yordam döndürür Object.

Bu yordam anahtar sözcüğünü Implements kullanıyorsa, içeren sınıfın veya yapının da veya Structure deyimini Class hemen izleyen bir Implements deyimi olmalıdır. deyiminde Implementsimplementslistbelirtilen her arabirimi içermelidir. Ancak, arabirimin (içindedefinedname) tanımladığı Function adın bu yordamın adıyla (içindename) eşleşmesi gerekmez.

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

Function Yordam çağıran koda geri döndüğünde yürütme, yordamı çağıran deyimi izleyen deyimiyle devam eder.

bir işlevden değer döndürmek için, değeri işlev adına atayabilir veya bir Return deyime ekleyebilirsiniz.

Deyimi Return aynı anda dönüş değerini atar ve aşağıdaki örnekte gösterildiği 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 myFunction atar ve sonra döndürmek için deyimini Exit Function kullanır.

Function MyFunction(ByVal j As Integer) As Double
    MyFunction = 3.87 * j
    Exit Function
End Function

Exit Function ve Return deyimleri bir yordamdan Function hemen çıkışa neden olur. Yordamın herhangi bir yerinde herhangi bir Exit Function sayıda ve Return deyimi görüntülenebilir ve ve Return deyimlerini karıştırabilirsinizExit Function.

için bir değer nameatamadan kullanırsanızExit Function, yordam içinde returntypebelirtilen veri türü için varsayılan değeri döndürür. belirtilmezsereturntype, yordam için Objectvarsayılan değer olan değerini döndürürNothing.

İşlev Çağırma

Yordam adını ve ardından parantez içindeki bağımsız değişken listesini bir ifadede kullanarak bir yordamı çağırırsınız Function . Parantezleri atlayabilirsiniz, ancak herhangi bir bağımsız değişken sağlamazsanız. Ancak, parantezleri her zaman eklerseniz kodunuz daha okunabilir olur.

Bir yordamı, , Cosveya ChrWgibi herhangi bir Function kitaplık işlevini çağırdığınız gibi Sqrtçağırırsınız.

Ayrıca anahtar sözcüğünü Call kullanarak bir işlevi çağırabilirsiniz. Bu durumda, dönüş değeri yoksayılır. Anahtar sözcüğün Call kullanılması çoğu durumda önerilmez. Daha fazla bilgi için bkz . Arama Deyimi.

Visual Basic bazen iç verimliliği artırmak için aritmetik ifadeleri yeniden düzenler. Bu nedenle, işlev aynı ifadedeki değişkenlerin değerini değiştirdiğinde aritmetik ifadede bir yordam kullanmamalısınız Function .

Zaman Uyumsuz İşlevler

Zaman Uyumsuz özelliği, açık geri çağırmalar kullanmadan veya kodunuzu birden çok işlev veya lambda ifadesi arasında el ile bölmeden zaman uyumsuz işlevleri çağırmanıza olanak tanır.

Bir işlevi Zaman Uyumsuz değiştirici ile işaretlerseniz işlevde Await işlecini kullanabilirsiniz. Denetim işlevdeki Async bir Await ifadeye ulaştığında, denetim çağırana geri döner ve beklenen görev tamamlanana kadar işlevdeki ilerleme askıya alınır. Görev tamamlandığında, yürütme işlevinde devam edebilir.

Not

Yordam Async , henüz tamamlanmamış ilk beklenen nesneyle karşılaştığında veya yordamın Async sonuna geldiğinde (hangisi önce gerçekleşirse) çağırana geri döner.

İşlevin Async dönüş türü Task<TResult> veya Taskolabilir. Dönüş türüne Task<TResult> sahip bir işlev örneği Async aşağıda verilmiştir.

İşlev Async herhangi bir ByRef parametresi bildiremez.

Bir Alt Deyim de değiştirici ile Async işaretlenebilir. Bu öncelikle bir değerin döndürülemediği olay işleyicileri için kullanılır. Bir AsyncSub yordam beklenemez ve bir AsyncSub yordamın çağıranı yordam tarafından Sub oluşan özel durumları yakalayamaz.

İşlevler hakkında Async daha fazla bilgi için bkz . Async ve Await ile Zaman Uyumsuz Programlama, Zaman Uyumsuz Programlarda Denetim Akışı ve Zaman Uyumsuz Dönüş Türleri.

Yineleyici İşlevleri

Yineleyici işlevi, liste veya dizi gibi bir koleksiyon üzerinde özel bir yineleme gerçekleştirir. Yineleyici işlevi, her öğeyi birer birer döndürmek için Yield deyimini kullanır. Bir Yield deyimine ulaşıldığında koddaki geçerli konum hatırlanır. Yineleyici işlevi bir sonraki çağrılışında yürütme bu konumdan yeniden başlatılır.

Her İçin... kullanarak istemci kodundan bir yineleyici çağırırsınız. Sonraki deyim.

Yineleyici işlevinin dönüş türü , , IEnumerable<T>IEnumeratorveya IEnumerator<T>olabilirIEnumerable.

Daha fazla bilgi için bkz . Yineleyiciler.

Örnek 1

Aşağıdaki örnek, bir Function yordamın gövdesini Function oluşturan adı, parametreleri ve kodu bildirmek için deyimini kullanır. Değiştirici işlevin ParamArray değişken sayıda bağımsız değişkeni kabul etmesine olanak tanır.

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üş türü olan bir AsyncFunction değeridir Task<TResult>. DelayAsync tamsayı döndüren bir Return deyime sahiptir. Bu nedenle işlevinin bildiriminin DelayAsync dönüş türüne Task(Of Integer)sahip olması gerekir. dönüş türü olduğundan Task(Of Integer)içindeki ifadenin AwaitDoSomethingAsync değerlendirilmesi bir tamsayı oluşturur. Bu, şu deyimde gösterilmiştir: Dim result As Integer = Await delayTask.

Yordam startButton_Click , bir Async Sub yordam örneğidir. Bir DoSomethingAsyncAsync işlev olduğundan, aşağıdaki deyimin gösterdiği gibi çağrısının DoSomethingAsync görevi beklenmelidir: Await DoSomethingAsync(). bir startButton_ClickSub ifadeye sahip Await olduğundan yordamın Async değiştirici ile tanımlanması gerekir.

' 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

Ayrıca bkz.