Share via


Function (Instrucción, Visual Basic)

Declara el nombre, los parámetros y el código que definen un procedimiento Function.

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

Partes

Término

Definición

attributelist

Opcional. Vea la Lista de atributos.

accessmodifier

Opcional. Puede ser una de las siguientes:

Vea Niveles de acceso en Visual Basic.

proceduremodifiers

Opcional. Puede ser una de las siguientes:

Shared

Opcional. Vea Shared.

Shadows

Opcional. Vea Shadows.

name

Obligatorio. Nombre del procedimiento. Vea Nombres de elementos declarados (Visual Basic).

typeparamlist

Opcional. Lista de parámetros de tipo para un procedimiento genérico. Vea Lista de tipos.

parameterlist

Opcional. Lista de nombres de variables locales que representan los parámetros de este procedimiento. Vea Lista de parámetros (Visual Basic).

returntype

Obligatorio si Option Strict es On. Tipo de datos del valor devuelto por este procedimiento.

Implements

Opcional. Indica que este procedimiento implementa uno o más procedimientos Function, cada uno de los cuales se define en una interfaz implementada por la clase contenedora o la estructura de este procedimiento. Vea Implements (Instrucción).

implementslist

Requerido si se suministra Implements. Lista de procedimientos Function que se están implementando.

implementedprocedure [ , implementedprocedure ... ]

Cada implementedprocedure tiene la sintaxis y las partes siguientes:

interface.definedname

ParteDescripción
interface Obligatorio.Nombre de una interfaz implementada por la clase o estructura contenedora de este procedimiento.
definedname Obligatorio.Nombre por el que está definido el procedimiento en interface.

Handles

Opcional. Indica que este procedimiento puede controlar uno o más eventos concretos. Vea Handles (Cláusula, Visual Basic).

eventlist

Requerido si se suministra Handles. Lista de eventos que este procedimiento controla.

eventspecifier [ , eventspecifier ... ]

Cada eventspecifier tiene la sintaxis y las partes siguientes:

eventvariable.event

ParteDescripción
eventvariable Obligatorio.Variable de objeto declarada con el tipo de datos de la clase o estructura que provoca el evento.
event Obligatorio.Nombre del evento que controla este procedimiento.

statements

Opcional. Bloque de instrucciones que se ejecutan dentro de este procedimiento.

End Function

Termina la definición de este procedimiento.

Comentarios

El código ejecutable debe estar en un procedimiento. Cada procedimiento se declara a su vez dentro de una clase, estructura o módulo, que se denominan clase contenedora, estructura o módulo.

Utilice un procedimiento Function cuando necesita devolver un valor al código de llamada. Utilice un procedimiento Sub cuando no necesita devolver un valor.

Solo puede definir un procedimiento Function en el nivel de módulo. Esto significa que el contexto de la declaración para una función debe ser una clase, estructura, módulo o interfaz y no puede ser un archivo de código fuente, espacio de nombres, procedimiento o bloque. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados (Visual Basic).

Los procedimientos Function tienen como valor predeterminado el acceso público. Puede ajustar sus niveles de acceso con los modificadores de acceso.

Se puede llamar a un procedimiento Function en el lado derecho de una expresión cuando desee utilizar el valor devuelto por la función. El procedimiento Function se utiliza de la misma manera que utiliza cualquier función de la biblioteca como por ejemplo Sqrt, Cos o ChrW.

Puede llamar a un procedimiento Function con el nombre del procedimiento, seguido por la lista de argumentos entre paréntesis, en una expresión. Si no se proporcionan argumentos, se pueden omitir los paréntesis. Sin embargo, el código es más legible si se incluyen siempre los paréntesis.

Se puede llamar una función también mediante la instrucción Call. En cualquier caso, el valor devuelto se pasará por alto.

Nota

Puede utilizar expresiones lambda para definir expresiones de función en línea. Para obtener más información, vea Expresión de función (Visual Basic) y Lambda (expresiones) (Visual Basic).

Reglas

  • Tipo de valor devuelto. La instrucción Function puede declarar el tipo de datos del valor que devuelve. Puede especificar cualquier tipo de datos o el nombre de una enumeración, estructura, clase o interfaz.

    Si no especifica returntype, el procedimiento devuelve un tipo Object.

  • Implementación. Si este procedimiento utiliza la palabra clave Implements, la clase contenedora o la estructura también deben incluir una instrucción Implements inmediatamente después de la instrucción Class o Structure. La instrucción Implements debe incluir cada interfaz especificada en implementslist. Sin embargo, el nombre con el que una interfaz define Function (en definedname) no tiene que ser el mismo que el nombre de este procedimiento (en name).

Comportamiento

  • Volver de un procedimiento. Cuando el procedimiento Function vuelva al código de llamada, la ejecución continúa con la instrucción que sigue a la instrucción que lo llamó.

    Las instrucciones Exit Function y Return provocan una salida inmediata de un procedimiento Function. Puede aparecer cualquier número de instrucciones Exit Function y Return en cualquier parte del procedimiento y puede combinar instrucciones Exit Function y Return.

  • Valor devuelto. Para devolver un valor de una función, se puede asignar el valor al nombre de función o incluirlo en una instrucción Return. El ejemplo siguiente asigna el valor devuelto al nombre de función myFunction y, a continuación, utiliza la instrucción Exit Function para volver:

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

    Si utiliza Exit Function sin asignar un valor a name, el procedimiento devuelve el valor predeterminado del tipo de datos especificado en returntype. Si no se especifica returntype, el procedimiento devuelve Nothing, el valor predeterminado de Object.

    La instrucción Return asigna el valor devuelto y sale de la función. Esto se muestra en el siguiente ejemplo.

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

Solución de problemas

  • Orden de ejecución.  Visual Basic reorganiza a veces las expresiones aritméticas para aumentar la eficacia interna. Por esta razón, evite utilizar un procedimiento Function en una expresión aritmética cuando la función cambie el valor de las variables en la misma expresión.

Ejemplo

En el siguiente ejemplo se utiliza la instrucción Function para declarar el nombre, parámetros y código que forman el cuerpo de un procedimiento Function. El modificador ParamArray permite a la función aceptar un número variable 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

En el ejemplo siguiente se invoca a la función declarada en el ejemplo 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

Vea también

Tareas

Cómo: Usar clases genéricas (Visual Basic)

Solucionar problemas de procedimientos (Visual Basic)

Referencia

Sub (Instrucción, Visual Basic)

Lista de parámetros (Visual Basic)

Instrucción Dim (Visual Basic)

Call (Instrucción, Visual Basic)

Of (Cláusula, Visual Basic)

Expresión de función (Visual Basic)

Conceptos

Matrices de parámetros (Visual Basic)

Lambda (expresiones) (Visual Basic)