可変長引数の乱用を避ける -- ソースコードレビューで最近指摘したこと
プログラムのソースコードレビューで私がよく指摘することをまとめようと思い、とりあえず直近のレビューフィードバックの内容を振り返ってみるメモの第2段です。
前回
今回のメモ
新たにメソッド定義する際に可変長引数 kwargs を使わない。可変長引数である必然性がなく通常のメソッド引数として定義すれば十分な場面で可変長引数を使うことは避けます。
改善前
def foo(
a: str,
**kwargs,
) -> bool:
flag = kwargs.get("flag", False)
...
改善後
def foo(
a: str,
flag: bool,
) -> bool:
...
可変長引数を使うと、呼び出し時にどんな引数を与えるべきなのかがドキュメントや実装を読まないとわからなくなります。ドキュメントも更新漏れがありえます。可変長引数があると関数のシグニチャすらあてにならなくなり、実装を読まないと呼び出しできなくなってしまいます。
引数の情報は kwargs などとごまかさずに関数のシグニチャに書いておくべきです。