wtorek, 11 marca 2014

Nawigacja wewnątrz procedury a stary poczciwy BASIC

Powinienem zacząć od tego, że część prezentowanych poniżej technik należy do grupy tych niezalecanych. Łamią bowiem zasady programowania strukturalnego, a więc takiego tworzenia programu, którego przebieg zgodny jest z kolejnością zapisu kodu. Praktyka jest jednak inna- w drobnych, prostych rozwiązaniach sięganie po nawigację wewnątrz procedury bywa najszybszym sposobem na rozwiązanie danego problemu.

Przypomnę najpierw najbardziej znaną i dobrze opisaną technikę nawigacji wewnątrz procedury opartą o instrukcje GoTo. Sposoby nawigacji oprzemy o wspólny przykład- chcemy pobrać od użytkownika jego imię i dopóki nie zostanie wprowadzona jakaś wartość dopóty będziemy wykonywać fragment kodu.

Wariant 1 oparty o etykietę tekstową prezentuje prosty poniższy przykład.

01Sub Wariant_1()
02'etykieta- to dowolny tekst z dwukropkiem na końcu
03Powrót:
04    Imię = InputBox("Wprowadź swoje imię")
05    
06    'jeżeli nie wprowadzono tekstu to przeskocz do lini _
07     ze wskazaną etykietą
08    If Len(Imię) = 0 Then GoTo Powrót
09    
10    'gdy imię zostanie podane wyświetl komunikat
11    MsgBox "Witaj " & Imię
12End Sub

Wariant 2 wykorzystuje stare rozwiązanie z klasycznego języka programowania BASIC. 
Język ten był dość popularny w latach '80-'90 XX wieku, a jego klasyczną zasadą było, że każdy wiersz zaczynał się od numeru, numery były zaś ułożone w kolejności rosnącej, choć nie musiały to być kolejne numery całkowite. Okazuje się, że rozwiązanie to można zastosować także w VBA. Zasadnicza różnica sprowadza się do tego, że nie musimy jednak numerować każdego wiersza, wystarczy, że uczynimy to z wybranymi. Dodatkowo nie jest wymagane, aby numery były w kolejności rosnącej. Poniższy kod wykorzystuje tą technikę w celu rozwiązania naszego problemu.

01Sub Wariant_2()
02    Dim Imię As String
03'numerowanie wybranych wierszy
0410  Imię = InputBox("Wprowadź swoje imię")
05 
06    'jeżeli nie wprowadzono tekstu to przeskocz do wiersza _
07     o wskazanym numerze
08    If Len(Imię) = 0 Then GoTo 10
09    
10    'gdy imię zostanie podane wyświetl komunikat
1150    MsgBox "Witaj " & Imię
12End Sub

Wariant 3 opiera się o pętle Do...Loop i prezentuję go jako najwłaściwsze z rozwiązań. 
Podobnego rodzaju przykład jest jednym z wielu prezentowanych w czasie kursu VBA jakie prowadzimy w celu prezentacji działania pętli Do...Loop.
01Sub Wariant_3()
02    Dim Imię As String
03    
04    'pętla- nawigacja pomiędzy początkiem i końcem
05    Do
06        Imię = InputBox("Wprowadź swoje imię")
07    Loop While Len(Imię) = 0
08    
09    'gdy imię zostanie podane wyświetl komunikat
10    MsgBox "Witaj " & Imię
11End Sub

Brak komentarzy:

Prześlij komentarz