読み込み中...

JavaScriptにおけるデフォルト引数の使い方10選

JavaScriptデフォルト引数の使い方を学ぶコンセプト画像 JS
この記事は約10分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、JavaScriptのデフォルト引数の使い方がわかり、コードの効率化や可読性向上に役立てることができます。

JavaScript初心者の方でも理解できるように、デフォルト引数の基本から応用までを10のサンプルコードとともに詳しく解説していきます。

ぜひ最後までお読みいただき、JavaScriptのデフォルト引数を活用して効率的なコーディングを身につけましょう。

●JavaScriptデフォルト引数とは

JavaScriptのデフォルト引数とは、関数の引数に値が渡されなかった場合に、デフォルト値を自動的に設定する機能のことです。

これにより、引数が省略された場合でも関数が正常に動作するようになります。

○デフォルト引数の基本

デフォルト引数は、関数定義の際に引数の後に「=」とデフォルト値を記述することで設定できます。

下記の例では、関数「add」の引数「a」と「b」にそれぞれデフォルト値「0」が設定されています。

function add(a = 0, b = 0) {
  return a + b;
}

この例の「add」関数は、引数が省略された場合にデフォルト値「0」が適用されます。

これにより、関数の呼び出し時に引数を省略しても、正常に動作するようになります。

●JavaScriptデフォルト引数の使い方

ここでは、JavaScriptのデフォルト引数を活用した具体的な使い方を、サンプルコードとともに紹介していきます。

○サンプルコード1:簡単な足し算関数

このコードでは、デフォルト引数を使って簡単な足し算関数を作成しています。

この例では、引数「a」と「b」にデフォルト値「0」が設定されており、引数が省略された場合にも正常に動作します。

function add(a = 0, b = 0) {
  return a + b;
}

console.log(add()); // 0
console.log(add(3)); // 3
console.log(add(3, 5)); // 8

○サンプルコード2:文字列の結合

このコードでは、デフォルト引数を活用して、文字列を結合する関数を実装しています。

この例では、引数「separator」にデフォルト値「,」が設定されており、引数が省略された場合にデフォルトの区切り文字として「,」が使用されます。

function joinStrings(str1, str2, separator = ',') {
  return str1 + separator + str2;
}

console.log(joinStrings('りんご', 'みかん')); // りんご,みかん
console.log(joinStrings('りんご', 'みかん', ' / ')); // りんご / みかん

○サンプルコード3:オブジェクトのマージ

このコードでは、デフォルト引数を使用して、二つのオブジェクトをマージする関数を作成しています。

この例では、引数「obj2」にデフォルト値「{}」が設定されており、引数が省略された場合でも正常にオブジェクトがマージされます。

function mergeObjects(obj1, obj2 = {}) {
  return { ...obj1, ...obj2 };
}

const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };

console.log(mergeObjects(obj1)); // { a: 1, b: 2 }
console.log(mergeObjects(obj1, obj2)); // { a: 1, b: 3, c: 4 }

○サンプルコード4:配列の結合

このコードでは、デフォルト引数を利用して、二つの配列を結合する関数を作成しています。

この例では、引数「arr2」にデフォルト値「[]」が設定されており、引数が省略された場合でも正常に配列が結合されます。

function concatArrays(arr1, arr2 = []) {
  return arr1.concat(arr2);
}

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

console.log(concatArrays(arr1)); // [1, 2, 3]
console.log(concatArrays(arr1, arr2)); // [1, 2, 3, 4, 5, 6]

●JavaScriptデフォルト引数の応用例

ここでは、デフォルト引数をより高度な方法で活用したサンプルコードを紹介します。

○サンプルコード5:可変長引数の処理

このコードでは、デフォルト引数と可変長引数を組み合わせて、与えられた数値の合計を計算する関数を実装しています。

この例では、引数「numbers」にデフォルト値「[]」が設定されており、引数が省略された場合でも関数が正常に動作します。

function sum(...numbers) {
  return numbers.reduce((acc, num) => acc + num, 0);
}

console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4, 5)); // 15
console.log(sum()); // 0

○サンプルコード6:条件に応じたデフォルト値の設定

このコードでは、条件に応じてデフォルト値を設定する関数を紹介しています。

この例では、引数「n」が偶数の場合はデフォルト値「2」、奇数の場合はデフォルト値「1」が設定されます。

function conditionalDefault(n, m = (n % 2 === 0 ? 2 : 1)) {
  return n * m;
}

console.log(conditionalDefault(3)); // 3
console.log(conditionalDefault(4)); // 8

○サンプルコード7:引数の型チェックとデフォルト値

このコードでは、引数の型チェックを行い、型が一致しない場合にデフォルト値を適用する関数を紹介しています。

この例では、「multiply」関数が数値以外の引数を受け取った場合、デフォルト値「1」が適用されます。

function multiply(a, b) {
  a = typeof a === 'number' ? a : 1;
  b = typeof b === 'number' ? b : 1;
  return a * b;
}

console.log(multiply(2, 3)); // 6
console.log(multiply('a', 3)); // 3

○サンプルコード8:オプションオブジェクトの利用

このコードでは、デフォルト引数を使ってオプションオブジェクトを設定する関数を作成しています。

この例では、「formatDate」関数にデフォルト値を持つオプションオブジェクトが渡され、引数が省略された場合でも適切なフォーマットで日付が表示されます。

function formatDate(date, options = { year: 'numeric', month: 'long', day: 'numeric' }) {
  return new Intl.DateTimeFormat('ja-JP', options).format(date);
}

const date = new Date();
console.log(formatDate(date)); // 2023年4月28日
console.log(formatDate(date, { year: '2-digit', month: 'short' })); // 23年4月

○サンプルコード9:コールバック関数のデフォルト引数

このコードでは、コールバック関数にデフォルト引数を設定する方法を紹介しています。

この例では、「execute」関数がデフォルトのコールバック関数を持っており、引数が省略された場合でも正常に動作します。

function defaultCallback() {
  console.log('デフォルトのコールバック関数が実行されました。');
}

function execute(callback = defaultCallback) {
  callback();
}

execute(); // デフォルトのコールバック関数が実行されました。
execute(() => console.log('カスタムのコールバック関数が実行されました。')); // カスタムのコールバック関数が実行されました。

○サンプルコード10:非同期処理のデフォルト引数

このコードでは、非同期処理においてデフォルト引数を使用する方法を紹介しています。

この例では、「fetchData」関数にデフォルト引数「timeout」が設定されており、タイムアウト時間が省略された場合でも正常に動作します。

async function fetchData(url, timeout = 3000) {
  const controller = new AbortController();
  const signal = controller.signal;
  setTimeout(() => controller.abort(), timeout);

  try {
    const response = await fetch(url, { signal });
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('エラーが発生しました:', error);
  }
}

fetchData('https://api.example.com/data'); // タイムアウト時間が省略された場合、デフォルトの3000msが適用されます。

●注意点と対処法

○引数の型チェック

デフォルト引数を使用する際に、関数に渡された引数の型が期待される型と異なる場合に問題が発生することがあります。

これを回避するために、引数の型チェックを行い、期待される型でない場合には適切なデフォルト値を適用することが重要です。

○nullやundefinedの扱い

引数がnullやundefinedの場合、デフォルト値が適用されません。

そのため、nullやundefinedを許容しない場合は、デフォルト引数の適用前にチェックを行い、適切なデフォルト値を適用することが求められます。

○デフォルト値の適用タイミング

関数が呼び出されるたびにデフォルト値が適用されるため、デフォルト引数にオブジェクトや配列を使用する場合は注意が必要です。

オブジェクトや配列は参照型であるため、関数の呼び出し毎に新しいインスタンスを生成する必要があります。

これを達成するためには、デフォルト引数にundefinedを設定し、関数内でデフォルト値を適用することができます。

●カスタマイズ方法

デフォルト引数を活用することで、関数の柔軟性や拡張性を向上させることができます。

次のようなカスタマイズ方法があります。

○条件に応じたデフォルト値の設定

引数に応じてデフォルト値を動的に設定することができます。

これにより、関数の挙動を柔軟に変更することができます。

○オプションオブジェクトの利用

オプションオブジェクトをデフォルト引数として使用することで、関数の引数を簡潔にまとめることができます。

また、引数の追加や削除が容易になり、関数の拡張性が向上します。

○関数のオーバーロード

デフォルト引数を利用して、関数のオーバーロードを実現することができます。

引数の数や型に応じて、適切なデフォルト値を適用することで、関数の挙動を制御できます。

まとめ

デフォルト引数は、JavaScriptにおいて関数の柔軟性や拡張性を向上させる強力な機能です。

適切なデフォルト値を設定することで、関数の引数を簡潔にまとめることができ、コードの可読性や保守性を向上させることができます。

ただし、デフォルト引数を使用する際には、引数の型チェックやnull・undefinedの扱いなど、いくつかの注意点が存在します。

これらの注意点を遵守し、適切な対処法を取り入れることで、デフォルト引数を安全かつ効果的に活用することができます。

さらに、デフォルト引数をカスタマイズすることで、関数の挙動をより柔軟に制御できるようになります。

条件に応じたデフォルト値の設定やオプションオブジェクトの利用、関数のオーバーロードなど、様々なカスタマイズ方法を活用しましょう。

本記事では、デフォルト引数の基本的な使い方から応用例、注意点と対処法、カスタマイズ方法までを解説しました。

これらの知識を活用して、JavaScriptのコーディングスキルを向上させてください。