JavaScript関数の引数とは?基本から使い方まで初心者向け完全ガイド

JavaScript関数の引数について初心者向けに完全解説。基本的な使い方から応用技術まで、実例を交えて分かりやすく説明します。

Learning Next 運営
19 分で読めます

みなさん、JavaScriptで関数を作っていて困ったことはありませんか?

「関数に情報を渡すにはどうすればいいの?」「引数って何のためにあるの?」「毎回同じコードを書くのは面倒」

こんな悩みを抱いている初心者の方、きっと多いですよね。

実は、JavaScript関数の引数という仕組みを理解することで、これらの問題は一気に解決できるんです。 引数をマスターすれば、データを受け取って処理する、柔軟で再利用可能な関数を作れるようになります。

この記事では、JavaScript関数の引数について基本から応用まで、初心者にも分かりやすく解説します。 具体的なコード例を交えながら、実践で使える知識をお伝えしていきますよ!

関数の引数って何?基本を理解しよう

引数の役割を知ろう

**引数(ひきすう)**とは、関数に渡すデータのことです。

簡単に言うと、関数は「データを受け取って処理を行う箱」のようなものです。 その箱にデータを入れるための入り口が引数なんですね。

例えば、こんな身近な例で考えてみましょう。

function greet(name) {
console.log("こんにちは、" + name + "さん!");
}
greet("田中"); // 出力: こんにちは、田中さん!
greet("佐藤"); // 出力: こんにちは、佐藤さん!

この例では、nameが引数で、"田中""佐藤"が実際に渡される値です。 同じ関数を使って、異なる人への挨拶ができるのが引数の力ですね。

なぜ引数が必要なの?

引数がない関数と、引数がある関数を比べてみましょう。

// 引数なしの関数(柔軟性がない)
function greetTanaka() {
console.log("こんにちは、田中さん!");
}
// 引数ありの関数(柔軟性がある)
function greet(name) {
console.log("こんにちは、" + name + "さん!");
}

引数を使うことで、一つの関数で様々な処理ができるようになります。 これが関数の再利用性を高める秘訣なんです。

引数の基本的な使い方をマスターしよう

一つの引数から始めよう

最もシンプルな形は、一つの引数を受け取る関数です。

function double(number) {
return number * 2;
}
console.log(double(5)); // 出力: 10
console.log(double(8)); // 出力: 16
console.log(double(12)); // 出力: 24

double関数は数値を受け取って2倍にする関数です。 引数のnumberに異なる値を渡すことで、異なる結果が得られますね。

複数の引数を使ってみよう

関数は複数の引数を受け取ることもできます。

function add(a, b) {
return a + b;
}
console.log(add(3, 7)); // 出力: 10
console.log(add(15, 25)); // 出力: 40

複数の引数を使うときは、カンマで区切って定義します。 引数の順番がとても重要なので注意してくださいね。

引数の順番に気をつけよう

引数は定義した順番で渡されるので、順序を間違えると予期しない結果になります。

function introduce(name, age) {
console.log("私の名前は" + name + "で、" + age + "歳です。");
}
introduce("田中", 25); // 出力: 私の名前は田中で、25歳です。
introduce(30, "佐藤"); // 出力: 私の名前は30で、佐藤歳です。(間違い!)

このように、順番を間違えると意味不明な結果になってしまいます。

デフォルト引数で関数をもっと便利にしよう

デフォルト値を設定してみよう

引数にデフォルト値を設定すると、値が渡されなかった場合の動作を制御できます。

function greet(name = "ゲスト") {
console.log("こんにちは、" + name + "さん!");
}
greet("田中"); // 出力: こんにちは、田中さん!
greet(); // 出力: こんにちは、ゲストさん!

name = "ゲスト"の部分でデフォルト値を設定しています。 引数を渡さなくても、自動的に"ゲスト"が使われるんです。

複数のデフォルト引数を活用しよう

複数の引数にデフォルト値を設定することもできます。

function createMessage(name = "匿名", age = 20, hobby = "読書") {
return name + "さん(" + age + "歳)の趣味は" + hobby + "です。";
}
console.log(createMessage("田中", 25, "映画鑑賞"));
// 出力: 田中さん(25歳)の趣味は映画鑑賞です。
console.log(createMessage("佐藤"));
// 出力: 佐藤さん(20歳)の趣味は読書です。
console.log(createMessage());
// 出力: 匿名さん(20歳)の趣味は読書です。

必要な引数だけを指定して、残りはデフォルト値を使用できます。 とても便利な機能ですね。

いろいろな形の引数を使ってみよう

配列を引数として渡そう

配列を引数として渡すことで、複数のデータを一度に処理できます。

function calculateAverage(scores) {
let total = 0;
for (let i = 0; i < scores.length; i++) {
total += scores[i];
}
return total / scores.length;
}
let testScores = [85, 92, 78, 96, 88];
console.log(calculateAverage(testScores)); // 出力: 87.8

この例では、scoresという配列を受け取って平均点を計算しています。 配列の長さに関係なく、同じ関数で処理できるのが利点です。

オブジェクトを引数として使おう

オブジェクトを引数として使うと、引数の順序を気にしなくて済みます。

function createUserProfile(userInfo) {
return {
displayName: userInfo.name,
contact: userInfo.email,
userAge: userInfo.age
};
}
let newUser = createUserProfile({
name: "田中太郎",
email: "tanaka@example.com",
age: 30
});
console.log(newUser);

オブジェクトを使うことで、名前付きの引数のような効果が得られます。 順序を間違える心配がないので、安全ですね。

可変長引数で柔軟な関数を作ろう

任意の数の引数を受け取ろう

...記法を使うと、任意の数の引数を配列として受け取れます。

function calculateSum(...numbers) {
let total = 0;
for (let number of numbers) {
total += number;
}
return total;
}
console.log(calculateSum(1, 2, 3)); // 出力: 6
console.log(calculateSum(1, 2, 3, 4, 5)); // 出力: 15
console.log(calculateSum(10, 20)); // 出力: 30

この...numbersを**Rest Parameters(残余引数)**と呼びます。 引数の個数に制限がない関数を作れるので、とても便利です。

固定引数と可変長引数を組み合わせよう

固定の引数と可変長引数を一緒に使うこともできます。

function sendGreeting(greeting, ...names) {
for (let name of names) {
console.log(greeting + "、" + name + "さん!");
}
}
sendGreeting("おはよう", "田中", "佐藤", "山田");
// 出力:
// おはよう、田中さん!
// おはよう、佐藤さん!
// おはよう、山田さん!

最初の引数で挨拶を指定して、残りの引数で名前のリストを受け取っています。 このように組み合わせることで、より実用的な関数が作れます。

引数の検証でエラーを防ごう

引数の型をチェックしよう

引数の型を確認することで、予期しないエラーを防げます。

function multiply(a, b) {
if (typeof a !== 'number' || typeof b !== 'number') {
return 'エラー: 引数は数値を指定してください';
}
return a * b;
}
console.log(multiply(5, 3)); // 出力: 15
console.log(multiply("5", 3)); // 出力: エラー: 引数は数値を指定してください

typeofを使って引数の型をチェックしています。 適切な型でない場合は、エラーメッセージを返しているんです。

必須引数の存在をチェックしよう

重要な引数が渡されているかを確認することも大切です。

function calculateArea(width, height) {
if (width === undefined || height === undefined) {
return 'エラー: 幅と高さの両方を指定してください';
}
if (width <= 0 || height <= 0) {
return 'エラー: 幅と高さは正の数値を指定してください';
}
return width * height;
}
console.log(calculateArea(5, 3)); // 出力: 15
console.log(calculateArea(5)); // 出力: エラー: 幅と高さの両方を指定してください
console.log(calculateArea(-2, 3)); // 出力: エラー: 幅と高さは正の数値を指定してください

このようなチェックをすることで、堅牢な関数を作ることができます。

実践的な使用例を見てみよう

計算機能を作ってみよう

引数を活用した実用的な計算機能を作ってみましょう。

function calculator(operation, a, b) {
switch (operation) {
case 'add':
return a + b;
case 'subtract':
return a - b;
case 'multiply':
return a * b;
case 'divide':
if (b === 0) {
return 'エラー: ゼロで割ることはできません';
}
return a / b;
default:
return 'エラー: 無効な操作です';
}
}
console.log(calculator('add', 10, 5)); // 出力: 15
console.log(calculator('multiply', 4, 3)); // 出力: 12
console.log(calculator('divide', 10, 0)); // 出力: エラー: ゼロで割ることはできません

この関数では、操作の種類と二つの数値を引数として受け取っています。 一つの関数で四則演算すべてを処理できるんです。

学生データを処理してみよう

もう少し複雑な例として、学生の成績データを処理する関数を作ってみましょう。

function analyzeStudents(students, passingScore = 60) {
let passed = [];
let failed = [];
for (let student of students) {
if (student.score >= passingScore) {
passed.push(student);
} else {
failed.push(student);
}
}
return {
passedStudents: passed,
failedStudents: failed,
passRate: ((passed.length / students.length) * 100).toFixed(1) + '%'
};
}
let classData = [
{ name: '田中', score: 85 },
{ name: '佐藤', score: 55 },
{ name: '山田', score: 72 },
{ name: '鈴木', score: 48 }
];
let result = analyzeStudents(classData, 60);
console.log('合格者:', result.passedStudents.length + '名');
console.log('不合格者:', result.failedStudents.length + '名');
console.log('合格率:', result.passRate);

この関数は、学生データの配列と合格点を引数として受け取ります。 合格者と不合格者を分類して、統計情報も計算してくれます。

よくある間違いを避けよう

引数の順序間違いを防ぐ方法

引数の順序を間違えやすい場合は、オブジェクトを使うのが効果的です。

// 順序を間違えやすい例
function createAccount(name, email, age, city) {
// 引数が多すぎて順序を覚えにくい
}
// 改善版:オブジェクトを使用
function createAccount(userInfo) {
return {
name: userInfo.name,
email: userInfo.email,
age: userInfo.age,
city: userInfo.city
};
}
let account = createAccount({
name: "田中太郎",
email: "tanaka@example.com",
age: 25,
city: "東京"
});

オブジェクトを使うことで、順序を気にせずに安全に関数を呼び出せます。

undefinedの扱いに注意しよう

引数が渡されなかった場合のundefinedの扱いには注意が必要です。

// 問題のあるコード
function greet(name) {
console.log("こんにちは、" + name + "さん!");
}
greet(); // 出力: こんにちは、undefinedさん!
// 改善版:デフォルト引数を使用
function greet(name = "ゲスト") {
console.log("こんにちは、" + name + "さん!");
}
greet(); // 出力: こんにちは、ゲストさん!

デフォルト引数を設定することで、予期しない結果を防げます。

関数設計のコツを知ろう

引数の数を適切に保とう

引数の数は3〜4個以下に抑えることがおすすめです。

// 引数が多すぎる例(避けるべき)
function processOrder(customerName, items, tax, discount, shipping, currency) {
// 複雑すぎる
}
// 改善版:オブジェクトでまとめる
function processOrder(orderInfo) {
// orderInfo.customerName, orderInfo.items などでアクセス
}

引数が多くなる場合は、関連する情報をオブジェクトでまとめましょう。

分かりやすい引数名を使おう

引数名はその役割が明確に分かるような名前にしましょう。

// 良い例:意味が分かりやすい
function calculateDistance(startPoint, endPoint) {
// 処理
}
// 悪い例:意味が分からない
function calculateDistance(a, b) {
// 処理
}

コードを読む人(未来の自分も含む)が理解しやすい名前を心がけてください。

一つの責任に集中しよう

関数は一つの責任だけを持つようにしましょう。

// 良い例:一つの責任(税金計算)
function calculateTax(price, taxRate) {
return price * taxRate;
}
// 悪い例:複数の責任を持つ
function processEverything(customer, products, payment, shipping) {
// 顧客情報の処理、商品計算、支払い処理、配送手配...
// 複雑すぎる!
}

一つの関数は一つのことに集中させることで、理解しやすく保守しやすいコードになります。

まとめ

JavaScript関数の引数について、基本から実践まで詳しく学習しました。

重要なポイントをおさらいしましょう。

  • 引数は関数に外部からデータを渡す仕組み
  • デフォルト引数で関数の使い勝手を向上
  • 可変長引数で柔軟な関数を作成
  • 引数の検証でエラーを防止

実践で役立つテクニックも身につきました。

  • オブジェクトを使った名前付き引数
  • 適切な引数の数の管理
  • 分かりやすい引数名の使用
  • 単一責任の原則

引数をマスターするメリットはこちらです。

  • 再利用可能な関数が作れる
  • コードの重複を減らせる
  • 柔軟で保守しやすいプログラムを書ける
  • より高度なプログラミング技術への基礎ができる

今回学んだ引数の知識を活用して、ぜひ実際に関数を作ってみてください。 最初は簡単な例から始めて、少しずつ複雑な処理にチャレンジしていくことをおすすめします。

引数を使いこなせるようになると、JavaScriptプログラミングの世界がぐっと広がりますよ!

関連記事