6. Pętle – Jeden ze sposobów skrócenia powtarzalności kodu (for, foreach, while, do..while, break, continue, pętle zagnieżdżone)

6. Pętle – Jeden ze sposobów skrócenia powtarzalności kodu (for, foreach, while, do..while, break, continue, pętle zagnieżdżone)
23 maja 2022 Brak komentarzy C#, Poradnik Tajko
Punkty w nagraniu:
  1. Czym jest pętla?
  2. Pętla for
  3. Pętla while
  4. Pętla do..while
  5. Pętla foreach
  6. Słowa kluczowe break i continue
  7. Pętle zagnieżdżone
  8. Przykłady z poziomu kodu

Linki:

  • Projekt do pobrania: Link

1. Czym jest pętla?

Pętla jak sama nazwa wskazuje, pozwala powtórzyć daną czynność konkretną ilość razy. W powyższym przykładzie mamy utworzoną tablicę z elementami liczb całkowitych, gdzie do każdego elementu, ręcznie przypisujemy wartości. Poniżej użyto pętlę for, która pozwala zredukować liczbę linii kodu do dwóch 🙂


2. Pętla for

Pętlę for zaczynamy od słowa kluczowego for, w nawiasach zazwyczaj podajemy trzy elementy
inicjalizacja

  • inicjalizacja – zazwyczaj jest to zmienna typu int, która zaczyna się od 0, ustawiamy tutaj od którego indeksu/numeru ma się rozpocząć działanie pętli, np. jeśli chcemy zacząć od 0 to piszemy 0 i potem zwiększamy o 1, więc pierwsza iteracja będzie miała numer 0, druga numer 1 itd. 0, 1, 2, 3, 4.. n+1
  • warunek – warunek, który musi zostać spełniony żeby pętla przeszła do kolejnej iteracji i żeby wykonała kod wewnątrz niej
  • inkrementacja – zwiększany numer iteracji, zazwyczaj jest to zwykła inkrementacja np. i++, czyli zwiększanie wartości o 1

for (int i = 0; i < 20; i++)
    Console.WriteLine(i);

Podana pętla wykona się 20 razy wyświetlając wartość zmiennej i, czyli 0, 1, 2, 3, 4…

for (int i = 0; i < 20;)
    Console.WriteLine(i++);

Sytuacja podobna do powyższej z taką różnicą, że pominięto trzeci człon w pętli, mianowicie przeniesiono inkrementację zmiennej i do miejsca wyświetlania w konsoli.

int inicjalizacja = 0;
for (; inicjalizacja < 20;)
    Console.WriteLine(inicjalizacja++);

Podobnie jak powyżej tylko tym razem jeszcze pominięto lewą część i zostawiono jedynie warunek do spełnienia

// Ręczne podejście
int[] ints = { 1, 2, 3, 4, 5, 6 };
ints[0] = 1;
ints[1] = 2;
ints[2] = 3;
ints[3] = 4;
ints[4] = 5;
ints[5] = 6;

// Powyższa czynność zrealizowana przy pomocy pętli
for (int i = 0; i < ints.Length; i++)
     ints[i] = i + 1;

Prosty przykład korzyści płynącej z korzystania z pętli. Mamy tablicę liczb całkowitych z 6 elementami, chcemy przypisać wartości od 1 do 6, gdybyśmy ręcznie to robili to zajęłoby to 6 linii kodu. Gdy skorzystamy z pętli, ilość kodu zostaje zredukowana tylko do dwóch linii:)


3. Pętla while

Warunek musi zostać spełniony żeby pętla była wykonywana
int number = 0;
while (number < 5)
      Console.WriteLine(number++);

// Zwróci
// 1
// 2
// 3
// 4
// 5

W podanym przykładzie, pętla będzie wykonywana aż zmienna number będzie miała wartość <5. Dodatkowo żeby kod wewnątrz pętli został wykonany, warunek przynajmniej raz musi zostać spełniony.


4. Pętla do..while

Kod wewnątrz pętli, zostanie przynajmniej raz wykonany.
int number = 5;
do
     Console.WriteLine(number++);
while (number < 5);

// Zwróci tylko jedną wartość
5

// lub z klamrami
do
{
     Console.WriteLine(number++);
}
while (number < 5);

W podanym przykładzie wyświetli liczbę 5 i dopiero sprawdzi warunek, drugiego podejścia nie będzie, ponieważ zmienna number, będzie miała już wartość 5. Gdyby to była pętla while z identycznym sprawdzeniem to ani razu by nie wykonało kodu i nie wyświetliło wartości ze zmiennej number.


5. Pętla foreach

// Przykładowe dane
List<MyVeryLongNamedClass> items = new List<MyVeryLongNamedClass>()
{
    new MyMyVeryLongNamedClass("Tajko"),
    new MyMyVeryLongNamedClass("Goku"),
    new MyMyVeryLongNamedClass("Naruto"),
    new MyMyVeryLongNamedClass("Rias"),
}

foreach (MyMyVeryLongNamedClass item in items)
   Console.WriteLine(item.Name);

// lub skrócona wersja podawania typu elementu z listy
foreach (var item in items)
   Console.WriteLine(item.Name);

Pętla foreach jest świetna przy pracy przy kolekcjach. Pozwala w bardzo przyjemny sposób iterować po elementach bez potrzeby sprawdzania indeksów i martwienia się czy indeks nie wyjdzie poza tablicę / kolekcję. Dodatkowo nie trzeba dodawać żadnego warunku sprawdzającego.

W podanym przykładzie mamy listę z czterema elementami klasy MyVeryLongNamedClass. W pierwszej pętli, jako typ elementy podajemy nazwę klasy, gdybyśmy mieli klasę z jeszcze większą nazwą to średnio by to wyglądało. W drugiej pętli korzystamy ze słowa kluczowego var, pętla dalej działa tak samo, ponieważ visualka z automatu rozpozna typ tego elementu na podstawie tego jakie elementy są w kolekcji po której będzie iterować


6. Słowa kluczowe break i continue

Słowo kluczowe break i continue można wykorzystać w trakcie działania pętli w momencie, gdy będziemy chcieli przerwać działanie pętli lub pominąć dalsze wykonywanie iteracji i przejść do kolejnej iteracji. W powyższym przykładzie mamy tablicę liczb całkowitych (int), pętla normalnie wykonywałaby się tyle razy ile elementów jest w tablicy. Dodałem instrukcję warunkową sprawdzającą czy zmienna i == 4 to ma przejść do kolejnej iteracji, natomiast jeśli trafi na wartość 8 to ma całkowicie przerwać wykonywanie pętli. Innymi słowy utrzymamy wartości od 1 do 8 bez 4, więc 9 i 10 będzie pominięte .

Wyświetla wszystkie wartości z tablicy poza 4, 9, 10
Liczba 4 zostanie pominięta oraz 9, 10 które już w ogóle nie wyświetliło w tabeli

7. Pętle zagnieżdżone

Pętla zagnieżdżona jak sama nazwa wskazuje, jest to pętla w pętli. Może wydawać się skomplikowanie, ale w rzeczywistości jest to dość prosta rzecz, trzeba jedynie rozkminić i wiedzieć po co chce się mieć taką pętlę zagnieżdżoną.

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        Console.WriteLine($"{i} + {j} = {i + j}");

        if (j > 8)
        {
            Console.WriteLine("...");
            break;
        }
    }
    break;
}
Wynik zwrócony po wykonaniu kodu obok. Jak widać, jest to prosty kawałek tabliczki mnożenia.
Console.WriteLine("Prosta tabliczka mnożenia: ");
for (int y = 1; y <= 10; y++)
{
    for (int x = 1; x <= 10; x++)
        Console.Write($"{x * y}".PadRight(4));
    Console.WriteLine();
}
Powyżej pełna wersja tabliczki mnożenia z dodanymi pustymi znakami (spacjami) tylko po to żeby ładnie sformatować wyświetlany tekst. Do dodania spacji do stringa służy metoda PadRight

Podsumowując jak widzisz, mamy dość sporo rodzajów pętli, każda może przydać się do czegoś innego. Natomiast jeśli chodzi o pętle zagnieżdżone to tutaj nie ma ograniczenia co do typów, więc nie jest powiedziane, że tylko pętla for może być w pętli for, albo while tylko w pętli while, można je dowolnie ze sobą łączyć, zależnie od potrzeb:)

Tagi
O Autorze
Tajko
Tajko Tajko z tej strony:) Obecnie pracuję we Wrocławiu przy projektach desktopowych. Skoro sam się czegoś nauczyłem to i inni mogliby nauczyć się tego co ja w łopatologiczny sposób:)

ZOSTAW ODPOWIEDŹ