En Visual Basic (tanto Classic como .NET) se pueden declarar parámetros opcionales para procedimientos y funciones utilizando la palabra clave Optional. También es posible establecer valores predeterminados para dichos parámetros.
Sintaxis:
Sub SendMessage(message As String, Optional urgent As Boolean = False) If urgent Then Console.WriteLine("URGENTE: " & message) Else Console.WriteLine(message) End If End Sub ' Llamadas: SendMessage("¡Hola!") ' urgent = False SendMessage("¡Mensaje importante!", True)
Aspectos importantes:
- Los parámetros
Optionalsiempre deben ser los últimos en la lista de parámetros.- Si no hay un valor predeterminado para un parámetro, se define como
Nothingo el predeterminado para el tipo (por ejemplo, 0 para Integer).- En VB clásico, las opciones de tipos
Optionalestán limitadas: no se pueden utilizar tipos sin valor predeterminado (por ejemplo, clases no anulables).
Pregunta: ¿Se puede declarar un parámetro obligatorio en Visual Basic después de un parámetro opcional (Optional)? Explique por qué (no/sí) y cómo evitarlo.
Respuesta: No, después de declarar al menos un parámetro como Optional, todos los parámetros subsiguientes también deben ser declarados como Optional. Este es un requisito de sintaxis para evitar confusiones al pasar parámetros por posición.
Ejemplo de código incorrecto:
Sub PrintReport(Optional pageSize As String = "A4", copies As Integer) ' Error de compilación: los parámetros obligatorios no pueden ir después de optional End Sub
Para solucionarlo, cambie el orden de los parámetros:
Sub PrintReport(copies As Integer, Optional pageSize As String = "A4") ' Variante correcta End Sub
Historia
En un gran proyecto, el cliente agregó un parámetro opcional al procedimiento de compartición de archivos, olvidando su valor requerido por defecto. Después de esto, al llamar al método sin especificar el parámetro, se procesaba
Nothingcomo el nombre del archivo, lo que causaba un error de carga.
Historia
Como resultado de copiar la firma del método de otro sistema, se alteró el orden de los parámetros: el parámetro obligatorio fue después del
Optional. El programador corrigió el error de compilación, cambiando solo el orden, pero en todas las llamadas no tuvo en cuenta que ahora la numeración se había desplazado. Esto provocó un funcionamiento incorrecto de la función en más de 30 lugares del código.
Historia
Para reducir el volumen de código, se decidió asignar una cadena vacía como valor predeterminado para un parámetro de cadena. Sin embargo, en varios casos, el tratamiento del valor vacío difería del tratamiento del parámetro omitido y conducía a una lógica de funcionamiento ilógica en el diálogo: en lugar de mostrar el texto estándar, se ocultaba el formulario sin explicaciones.