Раздутый код - причины и методы борьбы

Лекция



Привет, Вы узнаете о том , что такое раздутый код, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое раздутый код , настоятельно рекомендую прочитать все из категории Разработка программного обеспечения и информационных систем.

раздутый код — это код, который содержит избыточные, ненужные или плохо написанные элементы, усложняющие его чтение, сопровождение и выполнение. Раздутость кода часто становится следствием отсутствия оптимизации, неопытности разработчиков или стремления к излишней универсальности. В компьютерном программировании раздувание кода — это создание программного кода ( исходного кода или машинного кода ), который воспринимается как неоправданно длинный, медленный или иным образом расточительный. Раздувание кода может быть вызвано неадекватностью языка программирования , на котором написан код, компилятора, используемого для его компиляции, или программиста, пишущего его. Таким образом, хотя раздувание кода обычно относится к размеру исходного кода (созданного программистом), его можно использовать для обозначения размера сгенерированного кода или даже размера двоичного файла .

Признаки раздутого кода

    Jungle Cars Trip Multiplayer - Invite your friends!

    Game: Perform tasks and rest cool.2 people play!

    Play game
  1. Повторение кода (Code Duplication):

    • Одни и те же фрагменты встречаются в разных местах.
    • Пример:
      csharp
      int CalculateArea(int length, int width) 
      { 
      return length * width; 
      } 
      
      int CalculateVolume(int length, int width, int height) 
      { 
      return length * width * height; 
      } 
      Вместо этого можно выделить общую логику.
  2. Избыточные комментарии:

    • Комментарии, поясняющие очевидное или дублирующие то, что уже понятно из кода.
    • Пример:
      csharp
      // Увеличиваем значение переменной на 1
       counter = counter + 1; 
  3. Сложные конструкции:

    • Использование чрезмерно сложной логики там, где можно обойтись простыми решениями.
    • Пример:
      csharp
      if (value == true)
       { return true; } 
        else
       { return false; } 
    • Можно заменить на:
      csharp
      return value; 
  4. Массивные или лишние классы и методы:

    • Классы и методы, которые выполняют слишком много операций или содержат слишком много строк кода.
    • Методы с большим количеством параметров.
  5. Неиспользуемый код:

    • Функции, переменные или классы, которые не вызываются или не используются.
    • Пример:
      csharp
      int unusedVariable = 0; 
  6. Излишняя универсальность:

    • Добавление ненужных параметров и возможностей "на будущее", которые никогда не используются.
  7. Избыточное наследование или сложная иерархия:

    • Наследование классов там, где можно использовать простую композицию.
  8. Жестко закодированные значения (Hardcoding):

    • Использование чисел или строк напрямую в коде вместо констант или конфигурационных файлов.

Примеры раздутого кода

Раздутый:

csharp

public void PrintMessage(string message)
{ 
    if (!string.IsNullOrEmpty(message)) 
     { 
      Console.WriteLine(message); 
      }  else { 
      Console.WriteLine("No message provided."); 
    } 
} 

Оптимизированный:

csharp

public void PrintMessage(string message) 
{ 
  Console.WriteLine(string.IsNullOrEmpty(message) ? "No message provided." : message);
} 

Раздутый код из-за лишних классов — это ситуация, когда проект содержит избыточное количество классов, которые либо не используются, либо дублируют функциональность других классов, либо выполняют настолько узкие задачи, что становятся бессмысленными. Об этом говорит сайт https://intellect.icu . Это приводит к ухудшению читаемости, усложнению сопровождения и повышению вероятности ошибок.

Признаки раздутого кода от лишних классов

  1. Избыточное дробление логики:

    • Логика, которая могла бы быть реализована в одном классе, разбита на множество мелких, плохо связанных классов.
    • Пример: классы UserHelper, UserValidator, UserManager, которые можно объединить в один.
  2. Дублирование функционала:

    • Несколько классов выполняют схожие задачи с минимальными отличиями.
    • Пример: FileReader1, FileReader2, где отличия лишь в одном методе.
  3. Отсутствие реального использования:

    • Классы создаются "на всякий случай", но не имеют реальных вызовов или применения.
    • Пример: TempLogger или BackupHelper, которые никто не использует.
  4. Плохое именование:

    • Классы с неинформативными или дублирующимися названиями, например, HandlerHandler, ManagerManager.
  5. Сложные иерархии наследования:

    • Глубокая цепочка наследования, в которой большая часть классов существует только для передачи данных или вызова одного метода.

Примеры раздутого кода от лишних классов

Пример 1: Избыточное дробление

Раздутый код - причины и методы борьбы

Оптимизация:

csharp
public class UserService 
{ 
// Включает в себя валидацию, вспомогательные методы и управление 
} 

Пример 2: Лишняя цепочка наследования

Раздутый код - причины и методы борьбы

Оптимизация:

csharp
public class Handler
 { 
// Объединяет базовую и продвинутую логику 
} 

Причины появления раздутого кода

  1. Неопытность разработчиков.
  2. Отсутвие профильного образования, опыта, не технический слад ума
  3. Отсутвие критического и системного, комплексного мышления и знаний, умений
  4. Скорость разработки в ущерб качеству.
  5. Отсутствие ревью кода.
  6. Попытки угодить всем возможным сценариям использования.
  7. Устаревшие библиотеки и подходы.

Причины появления раздутого кода от лишних классов

  1. Избыточное проектирование:
    • Стремление заранее предусмотреть все возможные сценарии использования.
  2. Отсутствие ревью кода:
    • Никто не проверяет целесообразность добавления новых классов.
  3. Неопытность разработчиков:
    • Желание следовать принципам ООП без осознания необходимости их применения.
  4. Подражание сложным архитектурам:
    • Попытка копировать сложные шаблоны проектирования, которые не подходят для задачи.

Последствия раздутого кода

  1. Сложность в сопровождении и изменении.
  2. Увеличение времени разработки новых функций.
  3. Потеря производительности.
  4. Повышенная вероятность ошибок.

Последствия раздутого кода от лишних классов

  1. Сложность в понимании:
    • Новым разработчикам сложно разобраться в обилии классов и их назначении.
  2. Увеличение времени разработки:
    • Каждое изменение требует анализа множества классов.
  3. Снижение производительности:
    • Избыточные связи и вызовы могут замедлить выполнение программы.
  4. Увеличение размера проекта:
    • Кодовая база становится громоздкой и сложной.

Как бороться с раздутым кодом

  1. Применять принципы SOLID и DRY (Don't Repeat Yourself).
  2. Проводить Рефакторинг кода (Упрощать методы.Удалять неиспользуемый код.), преобразующего часто используемую последовательность кода в подпрограмму и вызывающего эту подпрограмму из нескольких мест, а не копируя и вставляя код в каждое из этих мест ( программирование методом копирования и вставки ).
  3. Использовать ревью кода.
  4. Разбивать сложные классы и методы на более мелкие.
  5. Не использовать лишние классы
  6. Автоматизировать проверку качества кода:
    • Использовать статический анализатор (например, SonarQube, ReSharper).
  7. Писать модульные тесты.
    • Они помогают выявить ненужные зависимости и упрощают код.
  8. Повторное использование уже написанных подпрограмм (возможно, с дополнительными параметрами), а не их переписывание с нуля в качестве новой процедуры.
  9. Объедините анализ программы для обнаружения раздутого кода с преобразованием программы для удаления раздутого кода.

Как избежать

  1. Анализ необходимости:
    • Прежде чем создавать новый класс, оцените, можно ли обойтись без него.
  2. Принцип YAGNI (You Aren't Gonna Need It):
    • Не добавляйте то, что сейчас не используется.
  3. Рефакторинг:
    • Регулярно пересматривайте проект, объединяя или удаляя ненужные классы.
  4. Используйте композицию вместо наследования:
    • Вместо сложных иерархий используйте агрегацию и композицию.

Плотность кода разных языков

Разница в плотности кода между различными компьютерными языками настолько велика, что зачастую требуется меньше памяти для хранения программы, написанной на «компактном» языке (например, на предметно-ориентированном языке программирования , Microsoft P-Code или потоковом коде ), и интерпретатора для этого компактного языка (написанного на машинном коде), чем для хранения программы, написанной непосредственно на машинном коде .

Выводы

Раздутый код — это проблема, которую можно решить с помощью дисциплины, опыта и инструментов для оптимизации. Регулярный рефакторинг и внимание к качеству кода — лучшие способы избежать этой проблемы. Лишние классы — это частая проблема в проектах, стремящихся к "идеальному" дизайну. Главное — найти баланс между модульностью и простотой.

Вау!! 😲 Ты еще не читал? Это зря!

Исследование, описанное в статье про раздутый код, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое раздутый код и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Разработка программного обеспечения и информационных систем

Из статьи мы узнали кратко, но содержательно про раздутый код
создано: 2025-01-14
обновлено: 2025-01-15
25



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Разработка программного обеспечения и информационных систем

Термины: Разработка программного обеспечения и информационных систем