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
edytujCzym jest pętla?
edytujPę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"
edytujPę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"
edytujDo...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"
edytujTa 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
edytujFor 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
edytujDziałanie instrukcji warunkowych
edytujCzę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
edytujCzasem 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
edytujPoniż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