In Visual Basic (zowel Classic als .NET) kunnen procedures en functies optionele parameters worden gedeclareerd met behulp van het sleutelwoord Optional. Het is ook mogelijk om standaardwaarden voor dergelijke parameters op te geven.
Syntax:
Sub SendMessage(message As String, Optional urgent As Boolean = False) If urgent Then Console.WriteLine("URGENT: " & message) Else Console.WriteLine(message) End If End Sub ' Oproepen: SendMessage("Hallo!") ' urgent = False SendMessage("Belangrijke boodschap!", True)
Belangrijke nuances:
Optionalparameters moeten altijd als laatste in de parameterlijst komen.- Als er geen standaardwaarde voor een parameter is, wordt deze gedefinieerd als
Nothingof als de standaardwaarde voor het type (bijvoorbeeld 0 voor Integer).- In Classic VB zijn de opties voor
Optionaltypes beperkt: het is niet mogelijk om types zonder standaardwaarde te gebruiken (bijvoorbeeld non-nullable classes).
Vraag: Is het mogelijk om een verplichte parameter na een optionele (Optional) parameter in Visual Basic te declareren? Leg uit waarom (nee/ja) en hoe je dit kunt vermijden.
Antwoord: Nee, na de verklaring van een parameter als Optional, moeten alle volgende parameters ook als Optional worden verklaard. Dit is een syntactische vereiste om verwarring bij het doorgeven van parameters op basis van positie te voorkomen.
Voorbeeld van onjuiste code:
Sub PrintReport(Optional pageSize As String = "A4", copies As Integer) ' Compilatiefout: verplichte parameters kunnen niet achter optioneel komen End Sub
Om dit op te lossen — wijzig de volgorde van parameters:
Sub PrintReport(copies As Integer, Optional pageSize As String = "A4") ' Correcte versie End Sub
Verhaal
Bij een groot project voegde de klant een optionele parameter toe aan de bestanddelingprocedure, waarbij hij zijn vereiste standaardwaarde vergat. Vervolgens, bij het aanroepen van de methode zonder het opgegeven parameter, werd
Nothingverwerkt als de bestandsnaam, wat leidde tot een fout bij het uploaden.
Verhaal
Als gevolg van het kopiëren van de methodehandtekening uit een ander systeem, was de volgorde van de parameters verstoord — de verplichte parameter kwam na de
Optional. De programmeur corrigeerde de compilatiefout door alleen de volgorde te wijzigen, maar in alle aanroepen werd niet opgemerkt dat de nummering nu was verschoven. Dit veroorzaakte een onjuiste werking van de functie op meer dan 30 plaatsen in de code.
Verhaal
Om de hoeveelheid code te verkorten, werd besloten om een lege string als standaardwaarde voor de stringparameter in te stellen. Echter, in verschillende gevallen verschilde de verwerking van een lege waarde van de verwerking van een weggelaten parameter, wat leidde tot onlogische logica in de werking van de dialoog - in plaats van de standaardtekst weer te geven, gebeurde er een verbergen van het formulier zonder uitleg.