Многозадачная функция
Анти-паттерн
Функция, которая выполняет сразу несколько разных задач, часто нарушает принцип единственной ответственности (SRP - Single Responsibility Principle), делает код трудночитаемым, сложно тестируемым и неподходящим для повторного использования.
Пример 1¶
Если название функции содержит слово "and" или в её описание хочется добавить "а потом", то наверняка стоит её разбить. Иногда функция может делать и несколько действий, но тогда лучше подбирать для неё более общее название.
Плохо:
def download_image_and_upload_it_to_telegram(url, tg_token):
...
Хорошо:
def download_image(url):
...
def upload_image_to_telegram(tg_token):
...
Пример 2¶
Функция calculate_statistics содержит логику, которую лучше вынести наружу, иначе внутренние задачи выходят за рамки названия, а название функции ни в коем случае не должно обманывать.
Плохо:
def extract_salaries(vacancies):
...
def calculate_statistics(vacancies):
salaries = extract_salaries(vacancies)
average_salary = int(sum(salaries) / len(salaries)) if salaries else 0
...
def main():
...
statistics = ...
vacancies = ...
statistics[language] = calculate_statistics(vacancies)
...
Хорошо:
def extract_salaries(vacancies):
...
def calculate_statistics(vacancies, salaries):
average_salary = int(sum(salaries) / len(salaries)) if salaries else 0
...
def main():
...
statistics = ...
vacancies = ...
salaries = extract_salaries(vacancies)
statistics[language] = calculate_statistics(vacancies, salaries)
...