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