名前設計
10-3

ロジック内の変数名も意図を語る

tmp1, tmp2 のような仮の名前や、条件式をそのまま全部つなげたようなメソッド名は、ロジックの構造を音読しているだけで意図を語らない。途中結果にも判定にも「それが何なのか」を表す名前を付ける。

01 tmp だらけの請求書合計計算

Bad

各 tmp が小計なのか税額なのか、コードを上から追わないとわからない

仮の名前のまま放置
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_tax

02 条件の構造をなぞっただけのメソッド名

Bad

条件を全部つなげた名前は長くて読めないうえ、条件が1つ変わるたびに名前が嘘になる

ロジック構造を音読する名前
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 と、目的の言葉で名付ける。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第10章。コード例は原則を自分の題材で表現し直したオリジナル。
10-3

ロジック内の変数名も意図を語る

tmp1, tmp2 のような仮の名前や、条件式をそのまま全部つなげたようなメソッド名は、ロジックの構造を音読しているだけで意図を語らない。途中結果にも判定にも「それが何なのか」を表す名前を付ける。

01 tmp だらけの請求書合計計算

Bad

各 tmp が小計なのか税額なのか、コードを上から追わないとわからない

仮の名前のまま放置
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_tax

02 条件の構造をなぞっただけのメソッド名

Bad

条件を全部つなげた名前は長くて読めないうえ、条件が1つ変わるたびに名前が嘘になる

ロジック構造を音読する名前
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 と、目的の言葉で名付ける。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第10章。コード例は原則を自分の題材で表現し直したオリジナル。