読み込み中...

JavaScriptの構造体をマスター!10のサンプルコードでわかりやすく解説

JavaScript構造体をマスターするための10のサンプルコード JS
この記事は約13分で読めます。

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

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

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

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

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

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

はじめに

JavaScript構造体は、プログラミングにおいて非常に重要な概念です。

この記事では、JavaScript構造体の基本から応用例、注意点、カスタマイズ方法まで、12のサンプルコードを交えて詳細に解説します。

初心者の方でも理解しやすいよう、段階的に説明を進めていきます。

●JavaScript構造体の基本

JavaScript構造体は、データの整理と管理を効率的に行うための強力なツールです。

複数の関連するデータを一つのまとまりとして扱うことで、コードの可読性と保守性を大幅に向上させることができます。

ここでは、構造体の基本的な概念と作成方法について説明します。

○構造体とは

JavaScript構造体は、複数の値をひとまとめにして扱うためのデータ構造です。

他のプログラミング言語における構造体と同様、異なる型のデータを一つのオブジェクトとしてグループ化することが可能です。

これにより、関連するデータを効率的に管理し、コードの可読性を向上させることができます。

○オブジェクトリテラルを使った構造体の作成

JavaScriptでは、オブジェクトリテラルを使用して構造体を作成します。

オブジェクトリテラルは、プロパティ名と値のペアを中括弧 {} で囲んで表現します。

各プロパティはカンマで区切られ、最後のプロパティの後にはカンマを付けないのが一般的です。

ここでは、オブジェクトリテラルを使用した構造体の基本的な例を紹介します。

const person = {
  name: "John",
  age: 30,
  city: "New York"
};

この例では、personという構造体を作成し、nameagecityという3つのプロパティを持たせています。

各プロパティには、それぞれ適切な値が割り当てられています。

●JavaScript構造体の使い方

構造体を効果的に使用することで、データの管理とアクセスが容易になります。

ここでは、構造体の基本的な使用方法から、より高度な活用法まで、段階的に説明していきます。

○サンプルコード1:基本的な構造体の作成と利用

構造体を作成したら、そのプロパティにアクセスして値を取得したり、変更したりすることができます。

次のサンプルコードでは、先ほど作成したperson構造体のプロパティにアクセスする方法を示しています。

const person = {
  name: "John",
  age: 30,
  city: "New York"
};

console.log(person.name); // John
console.log(person.age); // 30
console.log(person.city); // New York

このコードを実行すると、コンソールに各プロパティの値が表示されます。

ドット記法を使用してプロパティにアクセスしていることに注目してください。

○サンプルコード2:構造体のプロパティへのアクセス

構造体のプロパティにアクセスする方法は、ドット記法とブラケット記法の2種類があります。

ドット記法はより一般的ですが、ブラケット記法も特定の状況で便利に使用できます。

const person = {
  name: "John",
  age: 30,
  city: "New York"
};

console.log(person.name); // John (ドット記法)
console.log(person["age"]); // 30 (ブラケット記法)

ブラケット記法は、プロパティ名が変数に格納されている場合や、プロパティ名に空白や特殊文字が含まれる場合に特に有用です。

○サンプルコード3:構造体にメソッドを追加

構造体には、単なるデータだけでなく、関数(メソッド)も追加できます。

メソッドを追加することで、構造体に関連する動作を定義することができます。

次の例では、person構造体にgreetメソッドを追加しています。

const person = {
  name: "John",
  age: 30,
  city: "New York",
  greet: function () {
    console.log("Hello, my name is " + this.name);
  }
};

person.greet(); // Hello, my name is John

このコードでは、greetメソッドを呼び出すと、構造体内のnameプロパティを参照して挨拶メッセージを表示します。

thisキーワードは、メソッドが属するオブジェクト(この場合はperson)を参照します。

○サンプルコード4:構造体を引数として関数に渡す

構造体は、関数の引数として渡すこともできます。

これにより、関連するデータをまとめて関数に渡すことが可能になり、コードの整理と再利用性が向上します。

次の例では、person構造体をshowInfo関数の引数として渡しています。

const person = {
  name: "John",
  age: 30,
  city: "New York"
};

function showInfo(p) {
  console.log(p.name + " is " + p.age + " years old and lives in " + p.city);
}

showInfo(person); // John is 30 years old and lives in New York

この例では、showInfo関数がperson構造体を受け取り、その情報を整形して表示しています。

構造体を引数として渡すことで、関数は必要な全ての情報を一度に受け取ることができます。

●JavaScript構造体の応用例

構造体の基本的な使用方法を理解したところで、より実践的な応用例を見ていきましょう。

この例を通じて、構造体がどのように実際のプログラミングシナリオで活用できるかを学びます。

○サンプルコード5:構造体を使ったデータの管理

構造体は、複雑なデータの管理に非常に適しています。

例えば、商品情報を管理する場合、構造体を使用することで関連するデータをまとめて扱うことができます。

次の例では、商品の情報を格納するproduct構造体を作成し、その情報を表示する関数を定義しています。

const product = {
  id: 1,
  name: "Laptop",
  price: 1200,
  stock: 5
};

function printProductInfo(p) {
  console.log("Product: " + p.name + ", Price: $" + p.price + ", Stock: " + p.stock);
}

printProductInfo(product); // Product: Laptop, Price: $1200, Stock: 5

この例では、product構造体に商品のID、名前、価格、在庫数を格納しています。

printProductInfo関数は、この構造体を受け取って商品情報を整形して表示します。

○サンプルコード6:構造体を使った簡単なグラフ作成

構造体は、図形や座標などの幾何学的データの表現にも適しています。

次の例では、2次元平面上の点を表すpoint構造体を作成し、その座標を表示する関数を定義しています。

const pointA = {
  x: 2,
  y: 3
};

const pointB = {
  x: 5,
  y: 7
};

function printCoordinates(p) {
  console.log("X: " + p.x + ", Y: " + p.y);
}

printCoordinates(pointA); // X: 2, Y: 3
printCoordinates(pointB); // X: 5, Y: 7

この例では、pointApointBという2つの点を構造体として定義しています。

printCoordinates関数は、これらの点の座標を受け取って表示します。

このような構造体の使用法は、グラフィックスプログラミングや数学的計算において非常に有用です。

○サンプルコード7:構造体を使ったソート機能

構造体の配列を扱う際、特定のプロパティに基づいてソートを行うことがしばしば必要になります。

JavaScriptのsortメソッドを使用することで、構造体の配列を簡単にソートすることができます。

次の例では、学生の成績情報を格納した構造体の配列を、スコアの降順でソートしています。

const students = [
  { name: "Alice", score: 90 },
  { name: "Bob", score: 82 },
  { name: "Charlie", score: 95 }
];

students.sort(function (a, b) {
  return b.score - a.score;
});

console.log(students);
// Output:
// [
//   { name: "Charlie", score: 95 },
//   { name: "Alice", score: 90 },
//   { name: "Bob", score: 82 }
// ]

このコードでは、sortメソッドにカスタムの比較関数を渡しています。

この関数は2つの構造体(ab)を比較し、その差を返します。結果として、students配列は成績の高い順にソートされます。

○サンプルコード8:構造体を使ったスライダー

構造体は、ユーザーインターフェイス要素の状態管理にも活用できます。

例えば、スライダーの現在値と許容範囲を管理する構造体を作成し、その値が適切な範囲内にあるかをチェックする関数を定義することができます。

const slider = {
  value: 50,
  minValue: 0,
  maxValue: 100
};

function isValueInRange(s) {
  return s.value >= s.minValue && s.value <= s.maxValue;
}

console.log(isValueInRange(slider)); // true

この例では、slider構造体に現在値、最小値、最大値を格納しています。

isValueInRange関数は、スライダーの値が許容範囲内にあるかをチェックします。

このような構造体の使用法は、フォームのバリデーションなどに応用できます。

●JavaScript構造体の注意点と対処法

構造体は非常に便利なツールですが、使用する際には注意すべき点がいくつかあります。

この潜在的な問題を理解し、適切に対処することで、より堅牢で信頼性の高いコードを書くことができます。

○プロパティ名の衝突

構造体のプロパティ名が重複していると、後から定義されたプロパティが先に定義されたプロパティを上書きしてしまいます。

これを防ぐためには、一意なプロパティ名を使用することが重要です。

また、既存のプロパティ名を確認してから新しいプロパティを追加するようにしましょう。

const obj = {
  prop: "original value"
};

obj.prop = "new value"; // 上書きされる
console.log(obj.prop); // "new value"

○構造体内でのthisの挙動

構造体内の関数(メソッド)でthisキーワードを使用する際には注意が必要です。

thisは、関数が呼び出された際の実行コンテキストに依存するため、意図しない値が参照されることがあります。

const person = {
  name: "John",
  greet: function() {
    console.log("Hello, my name is " + this.name);
  }
};

const greetFunction = person.greet;
greetFunction(); // Hello, my name is undefined

この例では、greetFunctionを通じてgreetメソッドを呼び出すと、thisがグローバルオブジェクトを参照してしまい、意図した結果が得られません。

この問題に対処するには、アロー関数を使用するか、bindメソッドを使ってthisを明示的に指定する方法があります。

const person = {
  name: "John",
  greet: () => {
    console.log("Hello, my name is " + person.name);
  }
};

person.greet(); // Hello, my name is John

アロー関数を使用すると、thisは関数が定義された時点での実行コンテキストを参照します。

ただし、この場合はperson.nameを直接参照する必要があります。

●JavaScript構造体のカスタマイズ

構造体は静的なデータ構造ではありません。JavaScriptの柔軟性を活かし、プログラムの実行中に構造体を動的に変更したり拡張したりすることができます。

ここでは、構造体をカスタマイズするための主要な方法を紹介します。

○サンプルコード9:構造体のプロパティを追加・削除

JavaScriptでは、構造体(オブジェクト)に対して動的にプロパティを追加したり、削除したりすることができます。

これにより、プログラムの実行中に構造体の内容を変更することが可能です。

const person = {
  name: "John",
  age: 30,
  city: "New York"
};

person.job = "Developer"; // jobプロパティを追加
delete person.city; // cityプロパティを削除

console.log(person); // { name: "John", age: 30, job: "Developer" }

この例では、person構造体に新しいプロパティjobを追加し、既存のプロパティcityを削除しています。

delete演算子を使用してプロパティを削除する際は、そのプロパティが存在しない場合でもエラーは発生しません。

○サンプルコード10:構造体を継承する

JavaScriptでは、既存の構造体のプロパティやメソッドを再利用して新しい構造体を作成することができます。

これは、オブジェクト指向プログラミングにおける継承の概念に相当します。

Object.assign()メソッドを使用することで、複数のオブジェクトのプロパティを新しいオブジェクトにコピーできます。

const person = {
  name: "John",
  age: 30,
  city: "New York",
  greet: function() {
    console.log("Hello, my name is " + this.name);
  }
};

const employee = Object.assign({}, person, {
  job: "Developer",
  company: "Awesome Inc."
});

employee.greet(); // Hello, my name is John
console.log(employee.job); // Developer

この例では、person構造体を基に新しいemployee構造体を作成しています。

Object.assign()メソッドを使用することで、personのプロパティを継承しつつ、新しいプロパティjobcompanyを追加しています。

まとめ

この記事では、JavaScriptにおける構造体の概念から実践的な応用例まで、幅広くカバーしました。

構造体は、関連するデータをまとめて管理する強力なツールであり、コードの可読性と保守性を大幅に向上させることができます。

JavaScript構造体は、データ管理の基本的なツールの一つですが、その応用範囲は非常に広いです。

この記事で紹介した例は、構造体の全ての活用のほんの一部に過ぎませんが、プログラミングの経験を積むにつれて、構造体のさらなる活用方法を発見し、より洗練されたコードを書けるようになることでしょう。