Menu
Coddy logo textTech

Refactoring Loops

Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 16 из 66.

Рефакторинг циклов может улучшить читаемость и поддерживаемость кода.

Замените традиционный цикл на foreach для простоты:

string[] fruits = { "apple", "banana", "cherry" };

// Before refactoring
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}

// After refactoring
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

Извлеките сложную логику цикла в методы:

int[] numbers = { 1, 2, 3, 4, 5, 6 };

// Before refactoring
for (int i = 0; i < numbers.Length; i++)
{
    if (numbers[i] % 2 == 0)
    {
        Console.WriteLine($"{numbers[i]} is even");
    }
}

// After refactoring with helper method
for (int i = 0; i < numbers.Length; i++)
{
    if (IsEven(numbers[i]))
    {
        Console.WriteLine($"{numbers[i]} is even");
    }
}

// Helper method
bool IsEven(int number)
{
    return number % 2 == 0;
}

Разбивайте большие циклы на меньшие, более сфокусированные циклы:

int[] data = { 1, 2, 3, 4, 5 };

// Before: One large loop doing multiple things
for (int i = 0; i < data.Length; i++)
{
    // Process data
    data[i] = data[i] * 2;
    // Print results
    Console.WriteLine(data[i]);
}

// After: Separate loops with clear purposes
// Process data
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;
}

// Print results
for (int i = 0; i < data.Length; i++)
{
    Console.WriteLine(data[i]);
}
challenge icon

Задание

Средне

Создайте метод с названием refactorArrayFilter, который:

  1. Принимает массив целых чисел в качестве параметра
  2. Реализует две версии кода, которые подсчитывают числа, делящиеся на 3:
    • Original: Use a traditional for loop with an if statement
    • Refactored: Use a foreach loop with the logic extracted to a helper method
  3. Возвращает количество из рефакторированной версии как целое число

Например, для массива [3, 4, 6, 7, 9] метод должен вернуть 3, потому что есть три числа (3, 6 и 9), которые делятся на 3.

Примечание: Вам не нужно ничего выводить — просто верните количество как целое число.

Шпаргалка

Используйте foreach вместо традиционных циклов for для более простой итерации по массивам:

// Traditional for loop
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}

// Refactored with foreach
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

Извлеките сложную логику циклов в вспомогательные методы:

// Before refactoring
if (numbers[i] % 2 == 0)
{
    Console.WriteLine($"{numbers[i]} is even");
}

// After refactoring with helper method
if (IsEven(numbers[i]))
{
    Console.WriteLine($"{numbers[i]} is even");
}

// Helper method
bool IsEven(int number)
{
    return number % 2 == 0;
}

Разбивайте большие циклы на меньшие, сфокусированные циклы с единственной ответственностью:

// Before: One loop doing multiple things
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;  // Process
    Console.WriteLine(data[i]);  // Print
}

// After: Separate loops with clear purposes
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;  // Process only
}

for (int i = 0; i < data.Length; i++)
{
    Console.WriteLine(data[i]);  // Print only
}

Попробуйте сами

public class RefactorArrayFilter
{
    // Реализуйте метод refactorArrayFilter
    public static int refactorArrayFilter(int[] numbers)
    {
        // Напишите свой код здесь
        
    }
    
    // Реализуйте любые вспомогательные методы, которые вам нужны
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком