Instrucción Function (Visual Basic)

Actualización: noviembre 2007

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

Nota:

Visual Basic 2008 presenta las expresiones lambda, que permiten definir expresiones de función en línea. Para obtener más información, vea Expresión de función y Expresiones lambda.

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

Partes

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

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

  • parameterlist
    Opcional. Lista de nombres de variables locales que representan los parámetros de este procedimiento. Visite Lista de parámetros.

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

    implementedprocedure [ , implementedprocedure ... ]

    Cada implementedprocedure tiene la sintaxis y las partes siguientes:

    interface.definedname

    Parte

    Descripción

    interface

    Obligatorio. Nombre de una interfaz implementada por la clase contenedora o la estructura de este procedimiento.

    definedname

    Obligatorio. Nombre por el que se define el procedimiento en interface.

  • Handles
    Opcional. Indica que este procedimiento puede controlar uno o más eventos específicos. Vea Handles.

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

    eventspecifier [ , eventspecifier ... ]

    Cada eventspecifier tiene la sintaxis y las partes siguientes:

    eventvariable.event

    Parte

    Descripció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.

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

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.

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.

Dim returnedValue As Double = calcSum(4, 3, 2, 1)
' The function's local variables are assigned the following values:
' args(0) = 4, args(1) = 3, and so on.

Vea también

Tareas

Cómo: Utilizar una clase genérica

Procedimientos de solución de problemas

Conceptos

Matrices de parámetros

Expresiones lambda

Referencia

Instrucción Sub (Visual Basic)

Lista de parámetros

Instrucción Dim (Visual Basic)

Instrucción Call (Visual Basic)

Of

Expresión de función