0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクト引数 VS 通常の引数 〜RORO (Receive an Object, Return an Object)〜

Posted at

オブジェクト引数とは

関数の引数としてオブジェクトを渡すパターンのことです。
例えば、下記のような関数を作るとき①のように書くことも出来ますが、②のように書くことも出来ます。

function findUserByName({ name, nationality }): User {
  // ...
}
function findUserByName(name, nationality): User {
  // ...
}

①のように書くと、関数を呼び出す時にキーを指定することになるので明示的に書けます。

findUserByName(
  {
    name:"佐藤"
    nationality:"日本"
  }
)

②のように書くと、スッキリ書けます。

findUserByName("佐藤","日本")

さて、どちらの書き方をすべきでしょうか?

RORO (Receive an Object, Return an Object)

 筆者はオブジェクト引数と言っていますが、このようなパターンはROROと呼ばれています。
※ROROは「オブジェクトで受けとてってオブジェクトで返す」考え方なので、この記事で取り上げているのは厳密には「RORO」ではなく「RO」ですね・・・

結論

引数が2つ以下の場合、通常の引数として受け取る。
引数が3つ以上の場合、オブジェクト引数にする。

理由

引数が2つ以下の場合に、オブジェクト引数を使うのは冗長なので可読性が落ちる。
逆に3つ以上の場合は、プロパティによって明示的になっている方が、可読性が高い。
また、オプショナルな引数が扱いやすくなる。
例えば、第二引数、第三引数がオプショナルな場合に第二引数は省略したい。といった場合にundefinedを挟まなくてはいけなくなってしまったりする。

findUserByName("佐藤",undefined,27); 

おわりに

他にも理由はありますが、基本的には引数の数で単純に考えるのが良いかと思います。
もし、この考え方で違和感が出てくるシチュエーションが発生したらその時考えましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?