Compartilhar via


Instrução de função (Visual Basic)

Declara o nome, parâmetros e código que definem um procedimento Function.

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

Partes

Termo

Definição

attributelist

Opcional.Veja Lista de Atributos.

accessmodifier

Opcional.Pode ser um dos seguintes:

Veja Níveis de acesso em Visual Basic.

proceduremodifiers

Opcional.Pode ser um dos seguintes:

Shared

Opcional.Consulte Compartilhada.

Shadows

Opcional.Veja Shadows.

Async

Opcional.Consulte Async.

Iterator

Opcional.Consulte iterador.

name

Obrigatório.Nome do procedimento.Consulte Nomes de elementos declarados (Visual Basic).

typeparamlist

Opcional.Lista de parâmetros de tipo para um procedimento genérico.Consulte Type List.

parameterlist

Opcional.Lista de nomes variável local que representam os parâmetros deste procedimento.Consulte Lista de parâmetros (Visual Basic).

returntype

Necessário se Option Strict está On.Tipo de Dados do valor retornado por esse procedimento.

Implements

Opcional.Indica que essa propriedade implementa uma ou mais procedimentos Function, cada uma delas definida em uma interface implementada por essa classe ou estrutura contendo o procedimento.Consulte Instrução Implements.

implementslist

Necessário se Implements é fornecido.Lista de procedimentos Function que serão implementados

implementedprocedure [ , implementedprocedure ... ]

Cada implementedprocedure possui a seguinte sintaxe e partes:

interface.definedname

ParteDescrição
interface Obrigatório.Nome de uma interface implementada por essa classe ou estrutura contendo o procedimento.
definedname Obrigatório.Nome pelo qual o procedimento é definido em interface.

Handles

Opcional.Indica que esse procedimento pode manipular um ou mais eventos específicos.Consulte Cláusula Handles (Visual Basic).

eventlist

Necessário se Handles é fornecido.Lista de eventos que esse procedimento manipula.

eventspecifier [ , eventspecifier ... ]

Cada eventspecifier possui a seguinte sintaxe e partes:

eventvariable.event

ParteDescrição
eventvariable Obrigatório.Variável de objeto declarada com o tipo de dados da classe ou estrutura que gera o evento.
event Obrigatório.Nome do evento que esse procedimento manipula.

statements

Opcional.Bloco de instruções a ser executado dentro deste procedimento.

EndFunction

Finaliza a definição desse procedimento.

Comentários

Todos os códigos executáveis deverão estar dentro de um procedimento.Cada procedimento, por sua vez é declarado em uma classe, estrutura, ou módulo que é conhecido como a classe, estrutura, ou o módulo recipiente.

Para retornar um valor para o código de chamada, use um procedimento de Function ; caso contrário, use um procedimento de Sub .

definindo uma função

Você pode definir um procedimento de Function somente em nível de módulo.Portanto, o contexto da declaração para uma função deve ser uma classe, estrutura, módulo, ou interface e não pode ser um arquivo fonte, namespace, procedimento, ou bloco.Para obter mais informações, consulte Níveis de acesso padrão (Visual Basic) e os contextos de declaração.

Procedimentos Function têm acesso público como padrão.Você pode ajustar seus níveis de acesso com os modificadores de acesso.

Um procedimento de Function pode declarar o tipo de dados do valor que o procedimento retorna.Você pode especificar qualquer tipo de dados ou o nome de uma enumeração, estrutura, de uma classe, ou interface.Se você não especificar o parâmetro de returntype , o procedimento retorna Object.

Se este procedimento usa a palavra-chave de Implements , a classe ou estrutura contenedora também devem ter uma instrução de Implements que segue a declaração imediatamente de Class ou de Structure .A declaração de Implements deve incluir cada interface que é especificada em implementslist.Em o entanto, o nome pelo qual uma interface define Functiondefinedname(em) não precisa corresponder ao nome do procedimento (em name).

ObservaçãoObservação

Você pode usar expressões lambda para definir as expressões de função in-line.Para obter mais informações, consulte Expressão de função (Visual Basic) e Expressões lambda (Visual Basic).

retornar de uma função

Quando o procedimento retorna de Function o código de chamada, continuarão execução com a declaração que segue a declaração que chamou o procedimento.

Para retornar um valor de uma função, você pode atribuir um valor ao nome da função ou incluí-lo em uma instrução de Return .

A declaração de Return simultaneamente atribui o valor de retorno do procedimento e sai da função, como mostra o exemplo a seguir.

Function myFunction(ByVal j As Integer) As Double
    Return 3.87 * j
End Function

O exemplo a seguir atribui o valor de retorno ao nome da função myFunction e, em seguida, usa a instrução Exit Function para retornar.

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

O Exit Function e instruções Return causam saída imediata de um procedimento Function.Qualquer número de declarações Exit Function e Return pode aparecer em qualquer lugar no procedimento, e você pode misturar declarações Exit Function e Return.

Se você usar Exit Function sem atribuir um valor a name, o procedimento retornará o valor padrão para o tipo de dados que é especificado em returntype.Se returntype não for especificado, o procedimento retorna Nothing, que é o valor padrão para Object.

chamando uma função

Você chama um procedimento Function usando o nome do procedimento, seguido de lista de argumentos entre parênteses, em uma expressão.Você pode omitir os parênteses somente se você não está fornecendo quaisquer argumentos.No entanto, seu código é mais legível se você sempre incluir os parênteses.

Você chama um procedimento de Function a mesma maneira que você chama toda a função da biblioteca como Sqrt, Cos, ou ChrW.

Você também pode chamar uma função usando a palavra-chave de Call .Em esse caso, o valor de retorno é ignorado.O uso da palavra-chave de Call não é recomendado na maioria dos casos.Para obter mais informações, consulte Instrução de chamada (Visual Basic).

Visual Basic, às vezes, reorganiza expressões aritméticas para aumentar a eficiência interna.Por esse motivo, você não deve usar um procedimento de Function em uma expressão aritmética quando a função altera o valor de variáveis na mesma expressão.

funções de Async

O recurso de Async permite que você chama funções assíncronas sem usar retornos de chamada explícita ou manualmente dividir seu código em várias funções ou expressões lambda.

Se você marcar uma função com o modificador de Async , você pode usar o operador de espere na função.Quando o controle atingir uma expressão de Await na função de Async , o controle retorna para o chamador, e o estado na função é suspenso até que a tarefa deve terminar.Quando a tarefa estiver concluída, a execução pode continuar a função.

ObservaçãoObservação

O procedimento retorna para o chamador de Async quando qualquer ele localiza o primeiro objeto esperado que ainda não está completo, ou obtém ao final do procedimento de Async , qualquer surge principalmente.

uma função de Async pode ter um tipo de retorno de Task<TResult> ou de Task.um exemplo de uma função de Async que tenha um tipo de retorno de Task<TResult> é fornecido abaixo.

Uma função de Async não pode declarar nenhum parâmetro de ByRef .

Instrução Sub (Visual Basic) também pode ser marcado com o modificador de Async .Isso é usado primariamente para os manipuladores de eventos, onde um valor pode não ser retornado.Um procedimento de AsyncSub não pode ser esperado, e o chamador de um procedimento de AsyncSub não pode capturar exceções que são geradas pelo procedimento de Sub .

Para obter mais informações sobre funções de Async , consulte Programação com Async assíncrona e esperar (C# e Visual Basic), Fluxo de controle em programas Async (C# e Visual Basic), e Tipos de retorno de Async (C# e Visual Basic).

Funções de iterador

Uma função de iterador executa uma iteração personalizado em uma coleção, como uma lista ou uma matriz.Uma função de iterador usa a declaração de Produzir para retornar um de cada vez a cada elemento.Quando uma declaração de Produzir é alcançada, o local atual no código está recordado.A execução é reiniciada de aquele local na próxima vez que a função de iterador é chamada.

Você chama um iterador código do cliente usando uma instrução de For each… next .

O tipo de retorno de uma função de iterador pode ser IEnumerable, IEnumerable<T>, IEnumerator, ou IEnumerator<T>.

Para obter mais informações, consulte Iteradores (C# e Visual Basic).

Exemplo

O exemplo a seguir utiliza a instrução Function para declarar o nome, parâmetros e código que formam o corpo de um procedimento Function.O modificador ParamArray permite que a função aceite um número variável de argumentos.

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

O exemplo a seguir chama a função declarada no exemplo anterior.

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

Em o exemplo, DelayAsync é AsyncFunction que tem um tipo de retorno de Task<TResult>.DelayAsync tem uma instrução de Return que retorna um número inteiro.Portanto a declaração da função das necessidades de DelayAsync de ter um tipo de retorno de Task(Of Integer).Porque o tipo de retorno é Task(Of Integer), a avaliação da expressão de Await em DoSomethingAsync gera um número inteiro.Isso é demonstrado em essa instrução: Dim result As Integer = Await delayTask.

o procedimento de startButton_Click é um exemplo de um procedimento de Async Sub .Porque DoSomethingAsync é uma função de Async , a tarefa para a chamada a DoSomethingAsync deve ser esperada, porque a instrução a seguir demonstra: Await DoSomethingAsync().o procedimento de startButton_ClickSub deve ser definido com o modificador de Async porque tem uma expressão de Await .

' 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

Consulte também

Tarefas

Como: usar uma classe genérica (Visual Basic)

Procedimentos de solução de problemas (Visual Basic)

Referência

Instrução Sub (Visual Basic)

Lista de parâmetros (Visual Basic)

Instrução (Visual Basic) Dim

Instrução de chamada (Visual Basic)

Da cláusula (Visual Basic)

Expressão de função (Visual Basic)

Conceitos

Procedimentos Function (Visual Basic)

Matrizes de parâmetros (Visual Basic)

Expressões lambda (Visual Basic)