7:コレクションを引数にせずintやstrを受け取る¶
関数の引数にはどういった値を期待するのが良いでしょうか? 関数の引数を考えることは、関数の入力仕様を決めることなのでとても重要です。
次の関数は何が問題でしょうか?
具体的な失敗¶
def calc_tax_included(item, tax_rate=0.1):
return item['price'] * (1 + tax_rate)
この calc_tax_included
は引数に item
(商品を表す辞書)を期待しています。
これでは単に「消費税を計算したい」という場合にも、毎度「 'price'
キーを持つ辞書」を用意する必要があります。
関数の再利用性が低くなってしまいます。
ベストプラクティス¶
関数の引数は数値(int)や浮動小数点数(float)、文字列(str)など、 コレクション でない値を受け取るのが良いでしょう。
def calc_tax_included(price, tax_rate=0.1):
return price * (1 + tax_rate)
辞書を受け取らずに数値で受け取る関数にすることで、単に消費税込みの金額を計算したい場合にも calc_tax_included
関数が使えます。
(中略)詳細は書籍 自走プログラマー をご参照ください