Неточное название функции
Анти-паттерн
Важно точно называть функции. Название функции должно быть понятным. Название функции не должно обманывать. Из названия функции должно быть ясно, что она делает. Функция - это действие, поэтому название функции должно начинаться с глагола.
Пример 1¶
Название должно прояснять суть того, что делает функция, и каким будет результат.
Плохо:
def get(book_name, books_folder_path):
...
return book
Плохо:
def get_something(book_name, books_folder_path):
...
return book
Хорошо:
def get_book(book_name, books_folder_path):
...
return book
Пример 2¶
Название функции не может быть одиночным существительным. Функция - это действие, поэтому название её всегда должно начинаться с лексического глагола.
Плохо:
def book(book_name, books_folder_path):
...
return book
Хорошо:
def get_book(book_name, books_folder_path):
...
return book
Пример 3¶
В названии этой функции вообще не раскрыто ключевое действие.
Плохо:
def soon_birthday(args):
...
return birthday_datetime
Хорошо:
def calculate_birthday(args):
...
return birthday_datetime
Пример 4¶
Данная функция рассчитывает именно площадь круга, значит стоит отразить это в названии.
Плохо:
from math import pi
def calculate_area(radius):
circle_area = pi * (radius ** 2)
return circle_area
Хорошо:
from math import pi
def calculate_circle_area(radius):
circle_area = pi * (radius ** 2)
return circle_area
Пример 5¶
get обещает, что мы что-то получим, но ничего не говорит о том, что будет происходить вычисление.
Плохо:
class Employee:
def __init__(self, name, salary, bonus_percentage, is_good_employee):
self.name = name
self.salary = salary
self.bonus_percentage = bonus_percentage
self.is_good_employee = is_good_employee
self.bonus = 0
def get_salary(self):
self.bonus = self.get_bonus()
return self.salary + self.bonus
def get_bonus(self):
if self.is_good_employee:
return self.salary * (self.bonus_percentage / 100)
return 0
Хорошо:
class Employee:
def __init__(self, name, salary, bonus_percentage, is_good_employee):
self.name = name
self.salary = salary
self.bonus_percentage = bonus_percentage
self.is_good_employee = is_good_employee
self.bonus = 0
def calculate_full_salary(self):
self.bonus = self.calculate_bonus()
return self.salary + self.bonus
def calculate_bonus(self):
if self.is_good_employee:
return self.salary * (self.bonus_percentage / 100)
return 0
Пример 6¶
В том случае, когда предполагается расширение или переопределение стандартных методов фреймфорка, названых специфическим образом, их названия остаются изначальными, даже если к ним есть вопросы.
Исключение:
from django.contrib import admin
class ProductAdmin(admin.ModelAdmin):
...
def response_add(self, request, obj, post_url_continue=None):
# Дополнительная логика
...
return super().response_add(request, obj, post_url_continue)
def response_change(self, request, obj):
# Дополнительная логика
...
return super().response_change(request, obj)