Pętle języka C#
Dzisiaj krótko o pętlach, czyli wykonywaniu tych samych instrukcji określoną ilość razy. Każdą pętle można zastąpić inną pętlą i na odwrót, niemniej jednak zastosowanie odpowiedniej pętli specyficznego zastosowania zdecydowanie ułatwia nam zadanie.
While
Jest prostą pętlą, której działanie zależne jest od warunku jaki znajduje się w jej argumencie. Warunek ten jest sprawdzany za każdym razem, kiedy chce się wykonać pętla, więc doskonale sprawdza się w zastosowaniach, kiedy chcemy coś odczytać na przykład z pomocą enumeratora. Zawartość pętli może się nie wykonać ale może się również wykonywać ciągle (pętla nieskończona).
1 2 3 4 5 6 7 8 |
List<string> values = new List<string>() { "ala ma", "malego", "kota" }; using (var enumerator = values.GetEnumerator()) { while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); } } |
Do while
Jest pętlą podobną do while z tą różnicą, iż sprawdzenie warunku następuje dopiero po wykonaniu się zawartości pętli po raz pierwszy. I w takim celu powinna być ta pętla używana, kiedy chcemy, ażeby zawartość wykonała się przynajmniej raz.
1 2 3 4 5 |
do { Console.WriteLine("Game Play ;)"); Console.WriteLine("Want to play Again? Yes / No"); } while (!Console.ReadLine().StartsWith("N",StringComparison.InvariantCultureIgnoreCase)); |
For
Pętla umożliwia zdefiniowanie zmiennych wykorzystywanych wewnątrz pętli oraz wykonywać na nich operacje. W parametrze, a raczej parametrach pętli możemy podać Inicializację zmiennych, Warunek zakończenia oraz sposób inkrementacji zmiennych. Pętla wykonuje się zgodnie z kolejnością
Inicjalizacja -> Warunek-> Ciało pętli -> Inkrementacja zmiennych -> Warunek i tak dalej.
Pętli tej powinniśmy użyć, kiedy z góry wiemy ile chcemy iteracji danej pętli lub kiedy potrzebujemy dodatkowej zmiennej indeksującej, która będzie wykorzystana tylko w obrębie tejże pętli.
1 2 3 4 |
for (int i = 0; i<10; ++i) { Console.WriteLine(i); } |
ForEach
To pętla operująca na kolekcjach, która umożliwia iterację po każdej wartości kolekcji. UWAGA w czasie działania pętli kolekcja nie może się zmienić, to jest nie może do niej zostać dodany ani odjęty żaden element. I właśnie jako operacje na kolekcjach, kiedy musimy zrobić coś z każdym elementem powinniśmy wykorzystać tą pętle.
1 2 3 4 5 6 |
List<int> intValues = new List<int>() { 2, 5, 7, 9, 3, 10, 34 }; intValues.ForEach(element => Console.WriteLine(element)); foreach(int element in intValues) { Console.WriteLine(element); } |
Instrukcje Sterujące
W przypadku pracy z pętlami mamy jeszcze do dyspozycji dwie instrukcje sterujące.
Continue
Instrukcja continue umożliwia ominięcie części kodu pętli nie kończąc jej wykonania. Dzięki temu możemy wcześniej skończyć przetwarzanie wartości w pętli.
1 2 3 4 5 6 7 8 9 10 11 |
List<int> intValues = new List<int>() { 2, 5, 7, 9, 3, 10, 34 }; Console.WriteLine("skip odd elements"); foreach (int element in intValues) { if (element % 2 == 1) { continue; } Console.WriteLine(element); } |
Break
Ta instrukcja natomiast przerywa działanie całej pętli. Dzięki niej możemy zakończyć działanie pętli w określonym miejscu, jeśli nastąpią odpowiednie warunki.
1 2 3 4 5 6 7 8 9 10 |
Console.WriteLine("stop processing after negetive element difference"); for (int i = 0, j = intValues[0]; i < intValues.Count; i++) { if (j > intValues[i]) { break; } j = intValues[i]; Console.WriteLine(intValues[i]); } |
To by było na tyle, jeśli chodzi o pętle. Przykłady jak zwykle na GitHub-ie https://github.com/Matejkos/BlogProjects/tree/master/LoopsPlayGround