programowanieProgramista Visual Basic na poziomie średnim/zaawansowanym

Jaka jest różnica między Option Strict On a Off w Visual Basic, jakie błędy zapobiega włączenie Strict i jak poprawnie pisać kod w trybie ścisłym?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

Historia pytania
Opcja Option Strict pojawiła się w Visual Basic .NET, aby zwiększyć bezpieczeństwo typów. W wcześniejszych wersjach języka (VB6) zachodziły niejawne konwersje typów, co prowadziło do nieoczekiwanego zachowania programu i trudnych do wychwycenia błędów. Włączony Strict sprawia, że zachowanie jest bardziej oczywiste i ściśle typowane.

Problem
Niejawna konwersja typów (np. przypisywanie ciągu znaków do zmiennej liczbowej lub zwracanie różnych typów z funkcji) prowadzi do błędów w czasie wykonania. Projekty z Option Strict Off często są źródłem trudnych do zidentyfikowania błędów.

Rozwiązanie
Przy Option Strict On nie można stosować niejawnych konwersji typów, wszystkie deklaracje zmiennych, parametry i zwracane typy funkcji muszą być wyraźnie określone. To zapobiega całej klasie błędów już na etapie kompilacji i sprzyja wysokiej jakości kodu.

Przykład kodu:

Option Strict On Dim x As Integer x = "123" ' Błąd kompilacji — konwersja jawna jest obowiązkowa x = CInt("123") ' OK Function GetNumber(ByVal input As String) As Integer Return input ' Błąd kompilacji End Function

Kluczowe cechy:

  • Wymaga jawnego rzutowania typów.
  • Zabrania niejawnych rozszerzających konwersji.
  • Zobowiązuje do deklarowania typu dla każdej zmiennej i zwracanej wartości.

Pytania z podstępem.

Po co potrzebny jest Option Strict Off, jeśli z Strict On jest wygodniej i bezpieczniej?

Option Strict Off jest używane do wsparcia starego kodu, w którym wiele niejawnych konwersji jest już wbudowanych (np. migracja z VB6). W nowych projektach zaleca się włączenie Strict dla bardziej niezawodnego i bezpiecznego kodu.

Czy można przywrócić ścisłość wyboru typów na poziomie pliku, jeśli w projekcie domyślnie jest Off?

Tak, można dodać dyrektywę Option Strict On na początku osobnego modułu lub pliku, a ścisła kontrola typów będzie stosowana tylko do tego pliku.

' Na początku pliku: Option Strict On

Czy Strict przeszkadza w używaniu late binding przez Object?

Tak, z Option Strict On nie można wywoływać członków obiektów nieznanych w czasie kompilacji (late binding). Należy przekształcać obiekty do znanego typu przez interfejsy lub używać dynamicznej pracy tylko z Off.

Typowe błędy i antywzorce

  • Używanie Option Strict Off tylko z powodu niechęci do pracy z bezpieczeństwem typów.
  • Niejawna konwersja typów prowadząca do wyjątków w czasie wykonania.
  • Masowe operacje rzutowania, bez sprawdzenia możliwości konwersji, np. przez CInt, CDbl itp. bez TryParse.

Przykład z życia

Negatywny przypadek

Programista nie włączył Option Strict, a przy wprowadzaniu danych z pola tekstowego TextBox wartości były bezpośrednio przypisywane do zmiennych liczbowych. Przy wprowadzaniu błędnych danych program ulegał awarii.

Zalety:

  • Szybki start.
  • Mniej kodu na etapie rozwoju.

Wady:

  • Wiele błędów na etapie eksploatacji.
  • Trudno znaleźć przyczynę nieoczekiwanych błędów.

Pozytywny przypadek

Programista włączył Option Strict On, wszystkie konwersje były realizowane jawnie przez TryParse. Błędy były wychwytywane na etapie kompilacji, wyjątki w czasie wykonania były minimalne.

Zalety:

  • Niezawodność, czytelność, przewidywalność kodu.
  • Szybko identyfikowane błędy.

Wady:

  • Nieco zwiększa objętość kodu.
  • Wymaga dobrych umiejętności posługiwania się konwersjami typów.