メソッドを作る時、複数の引数を取ることはよくあるが、その引数の順番をどうするべきか、結構悩んでしまう。
重要なものが先
def func(require_arg, option_arg=None): ...
重要な引数を先にする。 指定しなくてもよかったりするものは後に置く。
引数が2つなどであれば、この考えですぐに決まることが多い。
from, to があるタイプをどうするべきか
from から to にコピーしたり移動したり、というメソッドの引数はどうするべきか。
- 有名な cp コマンド では from, to の順番
- x86 の MOV 命令 では to, from の順番
これは、どっちもあって悩ましい・・。
- 自然言語的には from A to B なので、from, to の順番
- プログラミング的には 代入文の
A = B
などを考えると、 to, from の順番?
引数の順番問題に対する解決策たち
ひとつのクラスにまとめる
たとえば2つの引数がいつも一緒に必要なら、ひとつのクラスにまとめてしまうのが良い
# bad def func(user_id, post_id, post_date): ... # good class UserPost: def __init__(user_id, post_id, post_date): self.user_id = user_id ... func(user_post): ...
名前付き引数
引数を単に並べるのではなく、名前付きで渡すようにする方法。 順番をきにせず書けるのでとても良い
自分がよくつかう言語だと、Python や C# にある。
def func(arg1, arg2): ... # 呼び出し時に名前を指定できる func(arg2="test", arg1=100)