【デザイン基礎|実務向け】JavaScriptの『SyntaxError: missing formal parameter』を解消する基本と回避策

1. 導入:なぜこのエラーが重要なのか

Web開発の現場で、ふとした瞬間に遭遇する「SyntaxError: missing formal parameter」。このエラーは、初心者が関数を定義する際に最も陥りやすい罠の一つです。特に「関数を呼び出す時(実行時)」と「関数を定義する時」の文法を混同してしまうことで発生します。このエラーの根本原因を正しく理解することは、クリーンでバグのないコードを書くための第一歩です。

2. 基礎知識:Formal Parameter(仮引数)とは

プログラミングにおいて「Formal Parameter(仮引数)」とは、関数定義の丸括弧の中に書く「入れ物(変数名)」のことです。
JavaScriptの関数定義におけるルールとして、括弧の中には必ず「識別子(Identifier)」を指定しなければならないという決まりがあります。識別子とは変数名のように、データの入れ物となる名前のことです。対して、数値を直接書いたり、文字列を囲んだりすることは「値」であり、これらを定義側に書いてしまうと、JavaScriptエンジンは「ここは変数名であるべき場所だ」と判断し、構文エラー(SyntaxError)を返します。

3. 実装/解決策:正しい定義と呼び出しの分離

このエラーを回避する鍵は、定義と呼び出しを明確に分けることです。
関数定義時:任意の変数名(識別子)を置く。
関数呼び出し時:実際の値(実引数)を渡す。
この原則を守るだけで、このエラーは完全に防ぐことができます。

4. サンプルプログラム:エラー例と正しい実装

以下のコードで、何が間違いでどう修正すべきかを確認してください。

// --- エラーが発生するコード ---
// 関数定義の括弧の中に、直接数値を書いてしまっている
function multiply(5) {
  return 5  5;
}
// 実行結果:SyntaxError: missing formal parameter

// --- 正しい実装 ---
// 1. まず「変数名(仮引数)」を使って定義する
function multiply(number) {
  return number  number;
}

// 2. 呼び出す時に「具体的な値」を渡す
const result = multiply(5); 
console.log(result); // 25と出力される

// オブジェクトの受け渡しも同様
function showMessage(data) {
  // ここでdataは呼び出し時に渡されたオブジェクトそのものになる
  console.log(data.text);
}

// 呼び出し側でオブジェクトを渡す
showMessage({ text: "こんにちは!" });

5. 応用・注意点:現場で陥りやすい罠

実務で特によくあるのが、ライブラリのドキュメントを参考にした際に、例示されている「呼び出しサンプル」と「定義の書き方」を混同してしまうケースです。

特に分割代入(Destructuring)を使用する際、以下のように書いてしまうミスが多発します。
誤:function user({ name: “Guest” }) { … }
正:function user({ name = “Guest” }) { … }

括弧の中でイコール(=)を使って値を指定するのは「デフォルト引数」として正しい文法ですが、コロン(:)を使って値を決め打ちするのは「値の代入」とみなされ、エラーとなります。引数の設定はあくまで「変数としての受け皿」であることを常に意識しましょう。コードレビューの際は、関数定義の引数リストに具体的なリテラル値(数値や文字列)が含まれていないかを確認する習慣をつけるのがおすすめです。

コメント

タイトルとURLをコピーしました