Visual Basic/Pętle i instrukcje warunkowe

Często przy programowaniu zdarza się, iż trzeba wykonać jakiś kod kilka razy. Wpisywanie kilka razy tego samego jest niewydajne i niewygodne, szczególnie gdy trzeba będzie np. zmienić nazwę zmiennej w każdej linijce powielonego kodu.

Definicja pętli

edytuj

Czym jest pętla?

edytuj

Pętla, jest to jak sama nazwa wskazuje, blok kodu, który zależnie od postawionego warunku, wykonuje się więcej niż jeden raz. Dodatkowo, wykonując kod może zwiększać tzw. iterator, czyli licznik wykonań kodu w pętli, pozwalając przykładowo na wypisanie liczb od 1 do 20.

Jest kilka rodzajów pętli. Każda z nich ma różne właściwości, jedna może wykonać się co najmniej raz, inna może ani razu.

Pętla "For...Next"

edytuj

Pętla For...Next, to jedna z najłatwiejszych do opanowania pętli. Łączy się również z innymi słowami kluczowymi, tworząc na przykład pętle typu "For Each". Składnia takiej prezentuje się następująco:

For i As Integer = WartośćPoczątkowaZmiennej To WartośćKońcowaZmiennej

W ten sposób, możemy już napisać prosty program, generujący liczby od 1 do 20.

        For i As Byte = 1 To 20
            ' Tutaj wprowadzam już do użycia operator "&"
            ' Łączy on dwie wartości konwertując obie na String
            Console.Write(i & ", ")
        Next
        Console.WriteLine("Koniec pętli")
        Console.ReadKey()

Pętla "Do...Loop Until"

edytuj

Do...Loop Until różni się tym od For...Next, iż nie używa ona zmiennej, a warunek podawany jest na końcu, dzięki czemu pętla niezależnie od warunku wykona się przynajmniej jeden raz. Tak więc ten sam algorytm pisany używając tej pętli wygląda znacznie inaczej.

        Dim i As Byte
        Do
            i = i + 1
            Console.Write(i & ", ")
        Loop Until i = 20
        Console.WriteLine("Koniec pętli")
        Console.ReadKey()

Pętla "Do While...Loop"

edytuj

Ta pętla powtarza kod dopóty warunek jest spełniony. Jest odmienna od For...Next jedynie tym, że ta pętla sama nie tworzy zmiennej, tylko sprawdza warunek - więc można ją wykonywać do czasu np. naciśnięcia klawisza przez użytkownika. Implementacja algorytmu wyświetlania liczb przedstawia się następująco:

        Dim i As Byte
        Do While i < 20
            i = i + 1
            Console.Write(i & ", ")
        Loop
        Console.WriteLine("Koniec pętli")
        Console.ReadKey()

For Each

edytuj

For Each jest pętlą, którą nie będziemy się zajmować teraz, gdyż operuje tylko na typach danych złożonych, np. listach czy tablicach. Przedstawimy jej praktyczne zastosowanie w następnym rozdziale, gdy będziemy omawiać użycie obiektów.

Instrukcje warunkowe

edytuj

Działanie instrukcji warunkowych

edytuj

Często program nie będzie działał wciąż prostoliniowo - główną ideą przy tworzeniu wielkich aplikacji jest podejmowanie decyzji przez użytkownika, lub wykonywanie czegoś gdy jakiś warunek jest spełniony. Tym zajmują się właśnie instrukcje warunkowe - stanowią blok kodu który zostanie wykonany tylko gdy określony warunek jest spełniony.

Aby rozpocząć blok instrukcji warunkowej, należy zapisać słowo kluczowe If, następnie podać warunek do spełnienia, a potem dopisać Then. Całość powinna wyglądać tak:

        If WARUNEK Then
        ' [Instrukcja do wykonania gdy warunek jest spełniony]
        Else
        ' [Instrukcja do wykonania gdy warunek nie jest spełniony]
        End If

W ten sposób możemy już pozwolić użytkownikowi decydować o tym co chce robić.

    Sub Main()
        Dim Odpowiedź As String
        Console.Write("Wpisz 0 aby wyświetlić komunikat, dowolny inny znak aby zakończyć: ")
        Odpowiedź = Console.ReadLine 'Czyta łańcuch znaków z konsoli
        If Odpowiedź = "0" Then
            Console.WriteLine("Wpisałeś 0!")
        Else
            Application.Exit() 'Zakańcza aplikację
        End If
        Console.ReadKey()
    End Sub

Więcej niż dwa warunki

edytuj

Czasem przydaje się więcej niż dwa warunki do obsługi. Można oczywiście napisać cały wielki blok If-ów, lecz jest to niewydajne a na dłuższą metę zmniejsza czytelność kodu. Aby dodać dodatkową instrukcję, gdy warunek wyżej nie spełni się, używa się polecenia ElseIf.

        Dim Odpowiedź As String
        Console.Write("Wpisz cyfrę: ")
        Odpowiedź = Console.ReadLine
        If Odpowiedź = 0 Then
            Console.WriteLine("Wpisałeś 0")
        ElseIf Odpowiedź = 1 Then
            Console.WriteLine("Wpisałeś 1")
        ElseIf Odpowiedź = 2 Then
            Console.WriteLine("Wpisałeś 2")
        ElseIf Odpowiedź = 3 Then
            Console.WriteLine("Wpisałeś 3")
        Else
            Console.WriteLine("Wpisałeś coś innego niż 0, 1, 2 lub 3")
        End If
        Console.ReadKey()

Ćwiczenie

edytuj

Poniżej zapisany jest kod programu tworzącego w oknie konsoli tabliczkę mnożenia. Zmodyfikuj go tak, aby obok rzędu wypisywał dodatkowo sumę wszystkich wyników w wierszu tabelki. (Rozwiązanie)

    Sub Main()
        Dim Wynik As String
        Console.WriteLine("+--+--+--+--+--+--+--+--+--+--+")
        For i As Byte = 1 To 10
            For j As Byte = 1 To 10
                Wynik = (i * j).ToString
                If Wynik.Length = 1 Then
                    Console.Write("|" + Wynik + " ")
                Else
                    Console.Write("|" + Wynik + "")
                End If
            Next
            Console.WriteLine("|")
            If i < 10 Then
                Console.WriteLine("+--+--+--+--+--+--+--+--+--+--+")
            End If
        Next
        Console.WriteLine("+--+--+--+--+--+--+--+--+--+--+")
        Console.ReadKey()
    End Sub