Visual Basic'te (hem Classic hem de .NET) prosedürler ve fonksiyonlar için Optional anahtar kelimesiyle isteğe bağlı parametreler tanımlanabilir. Bu tür parametreler için varsayılan değerler de atanabilir.
Sözdizimi:
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 ' Çağrılar: SendMessage("Merhaba!") ' urgent = False SendMessage("Önemli bir mesaj!", True)
Önemli noktalar:
Optionalparametreler her zaman parametre listesinin en sonuna konulmalıdır.- Eğer bir parametrede varsayılan değer yoksa, bu
Nothingolarak veya türün varsayılan değeri olarak belirlenir (örneğin, Integer için 0).- Klasik VB'de Optional tür seçenekleri sınırlıdır: varsayılan değeri olmayan türler (örneğin, null olamaz sınıflar) kullanılamaz.
Soru: Visual Basic'de isteğe bağlı (Optional) bir parametreden sonra zorunlu bir parametre tanımlanabilir mi? Neden (hayır/evet) ve bunu nasıl önlersiniz?
Cevap: Hayır, en az bir parametre Optional olarak tanımlandıktan sonra, tüm sonraki parametreler de Optional olarak tanımlanmalıdır. Bu, parametrelerin konumuna göre iletiminde karışıklığı önlemek için bir sözdizimi gereğidir.
Yanlış kod örneği:
Sub PrintReport(Optional pageSize As String = "A4", copies As Integer) ' Derleme hatası: zorunlu parametreler optional'dan sonra gelemez End Sub
Çözüm için — parametrelerin sırasını değiştirin:
Sub PrintReport(copies As Integer, Optional pageSize As String = "A4") ' Doğru seçenek End Sub
Hikaye
Büyük bir projede, müşteri bir dosya paylaşım prosedürüne isteğe bağlı bir parametre ekledi, varsayılan değerini unutarak. Bunun sonucunda, parametre belirtilmeden çağrılan yöntem
Nothingolarak dosya adı işleyen hata yüklemesi hatasına neden oldu.
Hikaye
Başka bir sistemden yöntem imzasının kopyalanması sonucunda, parametrelerin sırası bozuldu — zorunlu parametre
Optional'dan sonra geldi. Programcı, yalnızca sıralamayı değiştirerek derleme hatasını düzeltti, ancak tüm çağrılarda numaralandırmanın kaydığını göz önünde bulundurmadı. Bu, kodun 30'dan fazla yerinde fonksiyonun hatalı çalışmasına neden oldu.
Hikaye
Kodun hacmini azaltmak amacıyla, bir dizi durum için varsayılan değer olarak boş bir dizi atama kararı alındı. Ancak, boş bir değerin işlenmesi, atlanmış bir parametrenin işlenmesinden farklıydı ve diyalogun mantığın dışına çıkmasına neden oldu - standart metnin gösterilmesi yerine, açıklama olmadan formun gizlenmesiyle sonuçlandı.