引数の順番に悩まされる

メソッドを作る時、複数の引数を取ることはよくあるが、その引数の順番をどうするべきか、結構悩んでしまう。

重要なものが先

def func(require_arg, option_arg=None):
    ...

重要な引数を先にする。 指定しなくてもよかったりするものは後に置く。

引数が2つなどであれば、この考えですぐに決まることが多い。

from, to があるタイプをどうするべきか

from から to にコピーしたり移動したり、というメソッドの引数はどうするべきか。

これは、どっちもあって悩ましい・・。

  • 自然言語的には 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)