Refaktoryzacja pętli
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 16 z 66.
Refaktoryzacja pętli może poprawić czytelność i łatwość utrzymania kodu.
Zastąp tradycyjną pętlę pętlą foreach, aby uprościć kod:
string[] fruits = { "apple", "banana", "cherry" };
// Przed refaktoryzacją
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
// Po refaktoryzacji
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}Wydziel złożoną logikę pętli do metod:
int[] numbers = { 1, 2, 3, 4, 5, 6 };
// Przed refaktoryzacją
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 == 0)
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// Po refaktoryzacji z użyciem metody pomocniczej
for (int i = 0; i < numbers.Length; i++)
{
if (IsEven(numbers[i]))
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// Metoda pomocnicza
bool IsEven(int number)
{
return number % 2 == 0;
}Podziel duże pętle na mniejsze, bardziej ukierunkowane pętle:
int[] data = { 1, 2, 3, 4, 5 };
// Przed: Jedna duża pętla wykonująca wiele zadań
for (int i = 0; i < data.Length; i++)
{
// Przetwarzanie danych
data[i] = data[i] * 2;
// Wyświetlanie wyników
Console.WriteLine(data[i]);
}
// Po: Oddzielne pętle o jasno określonych celach
// Przetwarzanie danych
for (int i = 0; i < data.Length; i++)
{
data[i] = data[i] * 2;
}
// Wyświetlanie wyników
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
}Wyzwanie
ŚredniUtwórz metodę o nazwie refactorArrayFilter, która:
- Przyjmuje tablicę liczb całkowitych jako parametr
- Implementuje dwie wersje kodu zliczającego liczby podzielne przez 3:
- Oryginalna: używa tradycyjnej pętli for z instrukcją if
- Po refaktoryzacji: używa pętli foreach, a logika jest wyodrębniona do metody pomocniczej
- Zwraca liczbę elementów z wersji po refaktoryzacji jako liczbę całkowitą
Na przykład dla tablicy [3, 4, 6, 7, 9] metoda powinna zwrócić 3, ponieważ trzy liczby (3, 6 i 9) są podzielne przez 3.
Uwaga: nie musisz niczego wyświetlać — po prostu zwróć liczbę elementów jako liczbę całkowitą.
Spróbuj swoich sił
public class RefactorArrayFilter
{
// Zaimplementuj metodę refactorArrayFilter
public static int refactorArrayFilter(int[] numbers)
{
// Napisz tutaj swój kod
}
// Zaimplementuj wszystkie potrzebne metody pomocnicze
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Tablice wielowymiarowe
Podstawy tablic 2DDeklarowanie i inicjalizacja tablic 2DDostęp do elementów tablic 2DZagnieżdżone pętle z tablicami 2DTablice postrzępionePodstawowe operacje na macierzachPodsumowanie — tablice wielowymiarowe4Techniki sterowania przepływem
Wczesne zwrotyKlauzule ochronneInstrukcje skoku (goto)Break i continueSpłaszczanie zagnieżdżonych warunków7Zaawansowane operatory logiczne
Ewaluacja z krótkim spięciemWarunkowe operatory logicznePriorytet operatorówPowtórzenie — zaawansowane operatory2Zaawansowane podejmowanie decyzji
Wiele warunkówZłożona logika Boole’aPorównanie if i switchZagnieżdżone instrukcje switchPodsumowanie — zaawansowane decyzje5Obsługa wyjątków
Podstawy try-catchTypy wyjątkówWiele bloków catchPraca z plikamiBlok finallyusing a try-finallyWłasne wyjątkiPowtórzenie — obsługa błędów3Udoskonalenia pętli
Wydajność pętliIterowanie po złożonych strukturachKażdy typ pętliRefaktoryzacja pętliPodsumowanie — zoptymalizowane pętle6Obsługa wartości null
Podstawy referencji nullTypy wartości dopuszczające nullWzorce sprawdzania nullProgramowanie defensywnePodsumowanie — bezpieczeństwo nullPoćwicz samodzielnie: Kompilator C# online