W Visual Basic programowanie proceduralne pozwala na jasne strukturalizowanie kodu poprzez wielokrotne użycie podprogramów (Sub, Function) w celu minimalizacji duplikacji i zwiększenia czytelności.
Początkowo programowanie w VB rozwijało się wokół pracy z dużymi blokami kodu wewnątrz formularzy i modułów. Prowadziło to do duplikacji logiki i komplikacji w debugowaniu. Podział na procedury i funkcje stał się przejściem do bardziej modułowej architektury.
Źle zorganizowane aplikacje zawierają ten sam kod w różnych miejscach, co utrudnia utrzymanie, poprawianie błędów i zmniejsza możliwość ponownego użycia.
Użycie procedur (Sub) i funkcji (Function) z argumentami i zwracaniem wartości. Dobrą praktyką jest wyodrębnianie powtarzającej się logiki do osobnych metod, przestrzegając zasady DRY (Don't Repeat Yourself).
Przykład kodu:
' Obsługa, która wywołuje ponownie używaną funkcję Sub btnCalculate_Click(sender As Object, e As EventArgs) Dim result As Double = CalculateDiscount(100, 0.2) MessageBox.Show($"Zniżka: {result}") End Sub ' Ponownie używana funkcja Function CalculateDiscount(total As Double, rate As Double) As Double Return total * (1 - rate) End Function
Kluczowe cechy:
Czy można w Visual Basic zadeklarować procedury i funkcje o tej samej nazwie, jeśli różnią się tylko typami zwracanych wartości?
W Visual Basic nazwa procedury lub funkcji musi być unikalna w swoim zakresie widoczności, a przeciążenie tylko na podstawie typu zwracanego nie jest możliwe. Przeciążenie jest wspierane tylko na podstawie sygnatur parametrów.
Przykład kodu:
' NIEPOPRAWNE — błąd kompilacji Function GetValue() As Integer Return 1 End Function Function GetValue() As String Return "Test" End Function
Czy jeśli zadeklaruję parametr jako Optional, czy muszę podać wartość domyślną?
Tak, dla parametrów Optional konieczne jest podanie wartości domyślnej.
Przykład kodu:
Function Sum(a As Integer, Optional b As Integer = 0) As Integer Return a + b End Function
Czy można używać Exit Sub/Exit Function do wyjścia nie tylko z bieżącej procedury, ale także z rodzicielskich?
Nie, Exit Sub/Exit Function wychodzi tylko z bieżącej procedury. Aby zarządzać przepływem na poziomie zewnętrznych procedur, należy używać struktur zarządzania przepływem, takich jak If/Return lub obsługa wyjątków.
W projekcie obliczania zniżki jest realizowane jako oddzielny fragment kodu w kilku obsługach zdarzeń na różnych formularzach. Przy zmianie wzoru należy poprawiać kod we wszystkich miejscach ręcznie.
Zalety:
Wady:
Wydzielenie obliczeń zniżki do osobnej funkcji CalculateDiscount i użycie jej we wszystkich potrzebnych miejscach przez wywołania.
Zalety:
Wady: