none
¿Cómo comprobar si se especifió un parámetro opcional en un método? RRS feed

Respuestas

  • Hola

    Simplemente utilice la palabra clave opcional y proporcione un valor predeterminado. Los parámetros opcionales deben ser los últimos parámetros definidos, para evitar la creación de funciones ambiguas.

    Sub MyMethod(ByVal Param1 As String, Optional ByVal FlagArgument As Boolean = True)
        If FlagArgument Then
            Console.WriteLine(Param1)
        End If
    End Sub

    Utilizar método

    MyMethod("test1")
    o
    MyMethod("test2", False)

    Revisa este link Definir parámetros opcionales para un procedimiento (Visual Basic)

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    • Marcado como respuesta James2016-2 lunes, 31 de julio de 2017 0:03
    domingo, 30 de julio de 2017 23:37
  • Hola James:

     Los parámetros opcionales de la firma de un método o funcion deben de tener un valor por default SI O SI precisamente para los casos en que no se le asigne valor, la implementacion del método no falle, entonces resolviendo tu pregunta, ¿Como validas la asignación de un parámetro opcional? sencillo, Preguntando por el valor default:

    Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
        If office = "QJZ" Then
            Debug.WriteLine("office not supplied -- using Headquarters")
            office = "Headquarters"
        End If
        ' Insert code to notify headquarters or specified office.
    End Sub

     Para los temas de parámetros booleanos esta mas que claro que no aplicaría para un parámetro opcional y si declaras un parámetro del tipo string como optional tampoco valdría del todo ponerlo como nullable, puesto que los strings están para almacenar cadenas y tienen un valor string.empty por defecto salvo cuando sea una referencia de tipo pero volvemos al mismo tema, string a null? en todo caso pones por default un string.empty pero caemos en el mismo tema que el parámetro booleano, si pones un parámetro del tipo string como optional asignale un valor string. 

     Para mayor información por favor lee la información ofrecida aqui:

    Optional Parameters (Visual Basic)

     Como dato adicional, muchas veces los parámetros adicionales resultan complicar el código innecesariamente ya que la implementación del mismo podría adquirir validaciones innecesarias de parámetros opcionales, para esos casos, lo mas recomendable seria sobre cargar los métodos, que no es otra cosa que declarar un método o función con el mismo nombre pero con diferentes tipos o parámetros adicionales.

    Para mas información:

    Overloading Methods in Visual Basic .NET

     Espero que la información te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!


    • Editado JoséLuisGarcía lunes, 31 de julio de 2017 4:51
    • Propuesto como respuesta Pedro Ávila lunes, 31 de julio de 2017 4:52
    • Marcado como respuesta James2016-2 martes, 1 de agosto de 2017 2:38
    lunes, 31 de julio de 2017 4:49
  • Recuerdo haber visto en un proyecto desarrollado en Visual Basic 6.0 la función IsMissing() que hacía precisamente lo que requieres, comprobar si un valor de parámetro opcional había sido proporcionado desde la línea de llamada. Sin embargo, al parecer esta función no está presente en Visual Basic .Net aunque tampoco es necesario, creo. 

    Para comprobar si un valor de parámetro opcional a sido proporcionado desde la línea de llamada puedes especificar como valor por defecto alguno que sea improbable como argumento, por ejemplo, si el parámetro opcional es un tipo por referencia podrías establecer Nothing como valor por defecto.

    - Función

    Private Sub TestFunction(Nombre As String, Optional Apellido As String = Nothing)
    
    	If Apellido Is Nothing Then
    		'El valor del parámetro Apellido no fue proporcionado en la llamada
    	End If
    
    End Sub


    - Llamada

    TestFunction("Juan")

    Dependerá del caso, si es un tipo de valor -por ejemplo un parámetro opcional para la edad- puedes establecer 0 como valor por defecto improbable, quizá también te sirva sobrecargar la función, reitero, dependerá del caso.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    • Marcado como respuesta James2016-2 martes, 1 de agosto de 2017 2:36
    lunes, 31 de julio de 2017 3:25
  • Si es un tipo de valor tienes la posibilidad de permitir valores nulos enmascarando el tipo en la estructura Nullable, por ejemplo, si tienes un parámetro de tipo Boolean y le asignas True como valor por defecto es lógico que no podrás determinar si el valor True fue proporcionado en la llamada o se trata del valor por defecto, podrías establecer Nothing como valor por defecto.

    Private Sub TestFunction(Nombre As String, Optional Activo As Boolean? = Nothing)
    
    	If Activo Is Nothing Then
    		'El valor del parámetro Activo no fue proporcionado en la llamada
    	End If
    
    End Sub


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta James2016-2 martes, 1 de agosto de 2017 2:37
    lunes, 31 de julio de 2017 3:36

Todas las respuestas

  • Hola

    Simplemente utilice la palabra clave opcional y proporcione un valor predeterminado. Los parámetros opcionales deben ser los últimos parámetros definidos, para evitar la creación de funciones ambiguas.

    Sub MyMethod(ByVal Param1 As String, Optional ByVal FlagArgument As Boolean = True)
        If FlagArgument Then
            Console.WriteLine(Param1)
        End If
    End Sub

    Utilizar método

    MyMethod("test1")
    o
    MyMethod("test2", False)

    Revisa este link Definir parámetros opcionales para un procedimiento (Visual Basic)

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    • Marcado como respuesta James2016-2 lunes, 31 de julio de 2017 0:03
    domingo, 30 de julio de 2017 23:37
  • Recuerdo haber visto en un proyecto desarrollado en Visual Basic 6.0 la función IsMissing() que hacía precisamente lo que requieres, comprobar si un valor de parámetro opcional había sido proporcionado desde la línea de llamada. Sin embargo, al parecer esta función no está presente en Visual Basic .Net aunque tampoco es necesario, creo. 

    Para comprobar si un valor de parámetro opcional a sido proporcionado desde la línea de llamada puedes especificar como valor por defecto alguno que sea improbable como argumento, por ejemplo, si el parámetro opcional es un tipo por referencia podrías establecer Nothing como valor por defecto.

    - Función

    Private Sub TestFunction(Nombre As String, Optional Apellido As String = Nothing)
    
    	If Apellido Is Nothing Then
    		'El valor del parámetro Apellido no fue proporcionado en la llamada
    	End If
    
    End Sub


    - Llamada

    TestFunction("Juan")

    Dependerá del caso, si es un tipo de valor -por ejemplo un parámetro opcional para la edad- puedes establecer 0 como valor por defecto improbable, quizá también te sirva sobrecargar la función, reitero, dependerá del caso.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.

    • Marcado como respuesta James2016-2 martes, 1 de agosto de 2017 2:36
    lunes, 31 de julio de 2017 3:25
  • Si es un tipo de valor tienes la posibilidad de permitir valores nulos enmascarando el tipo en la estructura Nullable, por ejemplo, si tienes un parámetro de tipo Boolean y le asignas True como valor por defecto es lógico que no podrás determinar si el valor True fue proporcionado en la llamada o se trata del valor por defecto, podrías establecer Nothing como valor por defecto.

    Private Sub TestFunction(Nombre As String, Optional Activo As Boolean? = Nothing)
    
    	If Activo Is Nothing Then
    		'El valor del parámetro Activo no fue proporcionado en la llamada
    	End If
    
    End Sub


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta James2016-2 martes, 1 de agosto de 2017 2:37
    lunes, 31 de julio de 2017 3:36
  • Hola James:

     Los parámetros opcionales de la firma de un método o funcion deben de tener un valor por default SI O SI precisamente para los casos en que no se le asigne valor, la implementacion del método no falle, entonces resolviendo tu pregunta, ¿Como validas la asignación de un parámetro opcional? sencillo, Preguntando por el valor default:

    Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
        If office = "QJZ" Then
            Debug.WriteLine("office not supplied -- using Headquarters")
            office = "Headquarters"
        End If
        ' Insert code to notify headquarters or specified office.
    End Sub

     Para los temas de parámetros booleanos esta mas que claro que no aplicaría para un parámetro opcional y si declaras un parámetro del tipo string como optional tampoco valdría del todo ponerlo como nullable, puesto que los strings están para almacenar cadenas y tienen un valor string.empty por defecto salvo cuando sea una referencia de tipo pero volvemos al mismo tema, string a null? en todo caso pones por default un string.empty pero caemos en el mismo tema que el parámetro booleano, si pones un parámetro del tipo string como optional asignale un valor string. 

     Para mayor información por favor lee la información ofrecida aqui:

    Optional Parameters (Visual Basic)

     Como dato adicional, muchas veces los parámetros adicionales resultan complicar el código innecesariamente ya que la implementación del mismo podría adquirir validaciones innecesarias de parámetros opcionales, para esos casos, lo mas recomendable seria sobre cargar los métodos, que no es otra cosa que declarar un método o función con el mismo nombre pero con diferentes tipos o parámetros adicionales.

    Para mas información:

    Overloading Methods in Visual Basic .NET

     Espero que la información te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!


    • Editado JoséLuisGarcía lunes, 31 de julio de 2017 4:51
    • Propuesto como respuesta Pedro Ávila lunes, 31 de julio de 2017 4:52
    • Marcado como respuesta James2016-2 martes, 1 de agosto de 2017 2:38
    lunes, 31 de julio de 2017 4:49
  • Exacto, eso es lo que trataba, era para el caso del acceso directo precisamente.

    El problema era que si edito un ícono, quiero que las propiedades que no indique, no cambien, que queden intactas.

    martes, 1 de agosto de 2017 2:36