10-3
ロジック内の変数名も意図を語る
tmp1, tmp2 のような仮の名前や、条件式をそのまま全部つなげたようなメソッド名は、ロジックの構造を音読しているだけで意図を語らない。途中結果にも判定にも「それが何なのか」を表す名前を付ける。
01 tmp だらけの請求書合計計算
✕ Bad
def calc(items: list[LineItem]) -> int:
tmp = 0
for item in items:
tmp += item.unit_price * item.quantity
tmp2 = int(tmp * 0.1)
tmp3 = tmp + tmp2
return tmp3✓ Good
def total_with_tax(items: list[LineItem]) -> int:
subtotal = sum(item.unit_price * item.quantity for item in items)
consumption_tax = int(subtotal * TAX_RATE)
return subtotal + consumption_tax02 条件の構造をなぞっただけのメソッド名
✕ Bad
def is_amount_within_limit_and_has_receipt_and_applicant_active(
self, report: ExpenseReport
) -> bool:
if report.amount <= self.limit:
if report.has_receipt:
if report.applicant.is_active:
return True
return False✓ Good
def can_approve(self, report: ExpenseReport) -> bool:
if self.limit < report.amount:
return False
if not report.has_receipt:
return False
return report.applicant.is_active構造をなぞった名前は「意図を考えずに付けた」ことの自白でもある。承認可否なら can_approve と、目的の言葉で名付ける。