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:

  • 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ı.

  • name

    Gereklidir. 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.

  • returntype

    ise Option Strict On gereklidir. 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 Function daha fazla yordam uygulaydığını gösterir. Bkz. Implements Deyimi.

  • implementslist

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

    implementedprocedure [ , implementedprocedure ... ]

    Her implementedprocedure biri aşağıdaki söz dizimi ve bölümlerine sahip:

    interface.definedname

    Bölüm Description
    interface Gereklidir. Bu yordamın sınıf veya yapı içeren tarafından uygulanan arabirimin adı.
    definedname Gereklidir. Yordamın içinde tanımlandığı interface ad.
  • 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.

  • eventlist

    Sağlanırsa Handles gereklidir. Bu yordamın işlemektedir olay listesi.

    eventspecifier [ , eventspecifier ... ]

    Her eventspecifier biri aşağıdaki söz dizimi ve bölümlerine sahip:

    eventvariable.event

    Bölüm Description
    eventvariable Gereklidir. Olayı yükselten sınıfın veya yapının veri türüyle bildirilen nesne değişkeni.
    event Gereklidir. 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 Function

    Bu 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

Ayrıca bkz.