July 16

Правила написания кода

1 Производительность

стараться не допускать

  • большой вложенности
  • блокировок и синхронизаций
  • обработчиков исключений
  • вызовов функций

чаще использовать

  • силу всех хранилищ данных (list, tuple, set, frozenset, numpy arrays)
  • списковые включения
  • оптимизированные функции (стандартная библиотека, numpy)
  • генераторы при больших объемах данных
  • branch predictor

2 Читаемость

стараться не допускать

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

чаще использовать

  • нейминг по таким правилам: действие (если оно есть), обьект получения, тип данных обьекта, количество (get_data_list_1). допустимо сокращение слова если сокращаемое находится в корне директории ({object} get -> {part of the object} g_data)
  • аннотации типов данных
  • документация в коде с помощью docstring. пример:
def greet(name):
'''
ARGS:
name (str): the name to greet

RETURNS:
list[str]: list of name elements

COMM:
example of a comment

'''

3 Компактность

чаще использовать

  • декораторы

Принципы "Скорость, читаемость, компактность" при написании кода имеют важное значение, потому что они помогают создать эффективный, поддерживаемый и устойчивый код. Вот объяснение каждого из этих принципов и почему они важны именно в этом порядке:

1. Скорость

Почему важна:

  • Производительность: Быстрый код обеспечивает лучшее время отклика и может обрабатывать больше данных за меньшее время. Это особенно важно в приложениях, где производительность критична (например, высоконагруженные серверы, игровые приложения, системы реального времени).
  • Ресурсы: Быстрый код обычно использует меньше ресурсов (CPU, память), что может снизить затраты на оборудование и инфраструктуру.

Почему на первом месте:

  • Если код не выполняется достаточно быстро, даже самый читаемый и компактный код теряет свою ценность, так как не удовлетворяет основные требования производительности.
  • Производительность часто труднее всего улучшить постфактум; лучше проектировать быстрый код с самого начала.

2. Читаемость

Почему важна:

  • Поддержка: Читаемый код проще понять, отладить и модифицировать. Это особенно важно для командной работы, когда несколько разработчиков работают над одним проектом.
  • Ошибки: Читаемый код с меньшей вероятностью содержит ошибки, так как его проще рецензировать и тестировать.
  • Документация: Читаемый код часто не требует обширной документации, так как сам по себе является самодокументируемым.

Почему на втором месте:

  • Читаемость важна, но не должна идти в ущерб производительности. Иногда приходится делать компромисс между читаемостью и скоростью ради достижения необходимых показателей производительности.
  • После того как основные требования производительности достигнуты, можно уделить внимание улучшению читаемости кода, не жертвуя при этом скоростью.

3. Компактность

Почему важна:

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

Почему на третьем месте:

  • Компактность не должна идти в ущерб читаемости или производительности. Чрезмерно компактный код (например, чрезмерное использование лямбда-функций или односимвольных переменных) может быть трудным для понимания и сопровождения.
  • После того как достигнута оптимальная производительность и читаемость, можно рассматривать оптимизацию компактности, чтобы упростить код и уменьшить его объем.

Заключение

Этот порядок - "Скорость, читаемость, компактность" - позволяет сначала гарантировать, что код удовлетворяет требованиям производительности, затем делает его понятным для других разработчиков, и наконец, оптимизирует его объем для дальнейшего упрощения и поддержания. Следование этому порядку помогает создать сбалансированный, эффективный и устойчивый код.