JavaScriptにおける名前付き引数
投稿日: 2024年10月27日
JavaScriptでは、関数のパラメータが複数ある場合、実行時には引数を順番通りに渡してあげないと、意図する処理ができません。
const login = (email, password, username) => {
console.log("email:", email);
console.log("password:", password);
console.log("username:", username);
};
const email = "hoge@test.com"
const password = "fuga"
const username = "hoge"
// 引数を渡す順番を間違えているので、意図した処理ができない
login(username, email, password);
引数が2, 3個ならまだ良いですが、引数が5個以上となってくると、順番を間違えずに渡すように書くのはまあまあ気を使いますし、ヒヤヒヤする実装の1つです。
一般的にプログラミング言語には、「名前付き引数」という機能が備わっていることが多いです。
例えばRubyであれば、以下のように実装できます。
def login(email:, password:, username:)
puts "email: #{email}"
puts "password: #{password}"
puts "username: #{username}"
end
email = "hoge@test.com"
password = "fuga"
username = "hoge"
login(username: username, email: email, password: password)
パラメータに名前を付けられるようになっており、実行時には引数に名前を指定することで、順番通りでなくとも正しく動作できます。
この仕様はPHPにもPythonにも備わっているのですが、JavaScriptには存在しません。
JavaScriptには公式の名前付き引数はありませんが、オブジェクトを引数として渡すことで、名前付き引数に近い形で実装できます。
const login = ({ email, password, username }) => {
console.log("email:", email);
console.log("password:", password);
console.log("username:", username);
};
const email = "hoge@test.com";
const password = "fuga";
const username = "hoge";
// どちらも正しく動作する
login({ email, password, username });
login({ username, password, email });
生徒さんから「なぜ、関数の引数をオブジェクトで渡す場合とそうでない場合があるの?」という質問を受けたので、
こういった背景があるという解説でした。
基本、パラメータが2つ以上の関数を作るときは、オブジェクトで受けるようにした方が、個人的には安心できます。