1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クラスって何?(構造体の作成)

Last updated at Posted at 2025-07-02

今回から少しレベルアップして、paizaのクラス・構造体メニューの問題に挑戦していく!

ちょうど、前回オブジェクトについて学んだことが役立つのか?


問題概要

  • 生徒一人につき「名前 年齢 誕生日 出身地」が渡される。

  • それを User クラスの形にまとめる。

  • 出力はキレイに

User{
nickname : 名前
old : 年齢
birth : 誕生日
state : 出身地
}

の形にする。


入力例:

3
mako 13 08/08 nara
megumi 14 11/02 saitama
taisei 16 12/04 nagano

出力例:

User{
nickname : mako
old : 13
birth : 08/08
state : nara
}
User{
nickname : megumi
old : 14
birth : 11/02
state : saitama
}
User{
nickname : taisei
old : 16
birth : 12/04
state : nagano
}





✅OK例:

const rl = require('readline').createInterface({ input: process.stdin });
const lines = [];

rl.on('line', (input) => {
  lines.push(input);
});

rl.on('close', () => {
  const N = Number(lines[0]);

  class User {
    constructor(nickname, old, birth, state) {
      this.nickname = nickname;
      this.old = old;
      this.birth = birth;
      this.state = state;
    }

    format() {
      return `User{
nickname : ${this.nickname}
old : ${this.old}
birth : ${this.birth}
state : ${this.state}
}`;
    }
  }

  for (let i = 1; i <= N; i++) {
    const [nickname, old, birth, state] = lines[i].split(' ');
    const user = new User(nickname, old, birth, state);
    console.log(user.format());
  }
});

まず、ざっくり説明すると…

  • User という「設計図(ひな形)」を作っている

  • その設計図をもとに、たとえば「まこさん」や「めぐみさん」といった実際のユーザー(インスタンス)を作る。

  • それぞれのユーザーは、名前(nickname)や年齢(old)、誕生日(birth)、住んでいる場所(state)という情報を持っている。

  • そして、そのユーザーの情報を決まった形で表示できるようにしている。



コードの詳しい説明

class User {

ここで「User(ユーザー)」というクラス(設計図)を作っている。

「クラス」は複数のデータをひとまとめにして管理しやすくするもの。




 constructor(nickname, old, birth, state) {

constructor(コンストラクタ)」は特別な関数で、Userを作るときに呼ばれる。

作るときに「nickname」や「old」などの情報を渡して、それをUserの中にしまう役割をする。




    this.nickname = nickname;
    this.old = old;
    this.birth = birth;
    this.state = state;

this は「これから作るUserオブジェクト自身」を指している。

his.nickname は「このUserのニックネーム」みたいに、そのUserが持つ情報を設定している。

つまり、「渡されたニックネームを、このUsernickname に保存する」という意味。




  format() {

format は「このUserの情報を文字列として返す関数」

この関数を呼ぶと、Userの中の情報を見やすい形で表示できる文字列が返ってくる。




    return `User{
nickname : ${this.nickname}
old : ${this.old}
birth : ${this.birth}
state : ${this.state}
}`;

ここはテンプレートリテラルと呼ばれる書き方で、

this.nickname などUserの情報を一つずつ取り出して、決まったフォーマットの文字列を作っている。

こうすると問題で指定された表示になる。







✅ クラスとは?構造体と何が似てるの?

構造体(C言語などにある struct) は
→ 「複数の種類のデータをひとまとめにする入れ物」。

: struct Person { name, age, height }

クラス も
→ 「複数のデータをまとめる型」で、
さらに「データを操作する関数(メソッド)」も一緒に持てる。

つまり、「クラス = 拡張された構造体」 と思えばOK!


  • データ(プロパティ)
  • 動作(メソッド)
    をまとめて管理できるのがポイント!




✅ クラスの基本構文

class クラス名 {
  constructor(引数1, 引数2, ...) {
    // this.プロパティ名 = 引数
  }

  メソッド名() {
    // 何かの動作
  }
}
  • class キーワードでクラスを作る。

  • constructor は作るときに呼ばれる特別な関数。

  • this は「このクラスで作られた1つのオブジェクト自身」を指す。




✅ 情報のセットの仕方(constructor の役割)

例えばこの部分👇

constructor(nickname, old, birth, state) {
  this.nickname = nickname;
  this.old = old;
  this.birth = birth;
  this.state = state;
}

new クラス名(…) で作ると、constructor が動く!
引数として渡した値を this.プロパティ名 に代入する。
こうして、新しいオブジェクトにそれぞれのデータがセットされる。


例:

const user = new User("mako", 13, "08/08", "nara");

この1行で「mako」というデータが中に入った User を作れる。






✅ 構造体(struct)は 値型

値型 とは:

  • 変数に入れたら「実体そのもの」がコピーされる。
  • 代入すると新しいコピーができる。
  • コピー後に片方を変えても、もう片方には影響なし。

例(C言語で struct):

    struct Person p1 = { "Alice", 20 };
    struct Person p2 = p1; // p1の値を丸ごとコピー
    p2.age = 25;

    // p1.age は 20 のまま

このように、値が直接メモリに保持されるので「独立したデータ」として扱われる。




✅ クラス(class)は 参照型

参照型 とは:

  • 変数に入れるのは「実体への参照(アドレス)」。
  • 代入すると「同じものを指す参照」が増えるだけ。
  • だから片方を変えると、もう片方も変わる。

例(JavaScriptの class):

    class User {
      constructor(name) {
        this.name = name;
      }
    }

    const u1 = new User("Alice");
    const u2 = u1; // 参照をコピーしているだけ
    u2.name = "Bob";

    console.log(u1.name); // "Bob" になる!

u1u2 は 同じ実体(オブジェクト) を見ている。






🔍「オブジェクト」と「クラス」の区別

1️⃣ クラスとは?

クラスは「設計図」
「こういうデータを持っていて、こういう動きをするよ!」という 型 の定義。

例えば User クラスなら、

  • nickname、old、birth、state というデータ(プロパティ)

  • toString() という振る舞い(メソッド)

をまとめて「こういう構造を持つよ」と決めたもの。


    class User {
      constructor(nickname, old, birth, state) {
        this.nickname = nickname;
        this.old = old;
        this.birth = birth;
        this.state = state;
      }

      format {
        return `User{ nickname: ${this.nickname} }`;
      }
    }

→ これはまだ「設計図」にすぎない。




2️⃣ オブジェクトとは?

オブジェクトは「実体(製品)」
クラス(設計図)を使って「new」で作られたモノがオブジェクト。


例えば:

const user1 = new User("mako", 13, "08/08", "nara");
const user2 = new User("megumi", 14, "11/02", "saitama");

user1user2User クラス という型をもつ オブジェクト。


  • user1.nickname は “mako
  • user2.nickname は “megumi

同じ設計図から作っても、中身は違う!
→ だから「実体」と言う。






💡まとめ

✅ 【1】構造体(struct)とは?

  • 複数のデータをひとまとめにする型(データの集まり)
  • 例: struct Person { name, age, height }
  • C言語などに多い
  • メソッド(動作)を持たない → データだけ
  • 値型 → 代入するとコピーが作られる
    → コピー後はお互い独立して動く



✅ 【2】クラス(class)とは?

  • データ+動作 をひとまとめにできる型
    • データ = プロパティ
    • 動作 = メソッド
  • 例: class User { constructor(...) {...} format() {...} }
  • constructor は 初期化専用の関数 → new で呼ばれる
  • this は 作られたオブジェクト自身 を指す
  • 参照型 → 代入すると「実体のアドレス」を共有する
    → コピーではなく同じものを見る



✅ 【3】オブジェクトとは?

  • クラス(設計図)から作った「実体」
  • 例:
const user1 = new User("mako", 13, "08/08", "nara");

user1User クラス型のオブジェクト

  • user1.nickname で中のデータにアクセス
  • 同じクラスでも、値はバラバラにできる



✅ 【4】構造体とクラスの比較

項目 構造体 (struct) クラス (class)
型の性質 値型 参照型
定義 struct class
メソッド 持たない(C言語の場合) 持てる
コピー時 新しい実体が作られる アドレス(参照)を共有する
用途 軽量で独立したデータ 大きな機能をまとめたい時に便利



✅ 【5】クラスとオブジェクトの関係

  • クラス = 設計図
    • どんなデータや機能を持つかを決める
  • オブジェクト = 実体
    • クラスを new で作って初めてできる
  • 例: 家の設計図(クラス) → 建てた家(オブジェクト)



✅ 【6】JavaScript でのポイント

  • class は ES6 以降の機能
  • constructor は 1 クラスに 1 つ
  • this.プロパティ でオブジェクトに値をセットする
  • toString() は文字列として表示する方法を定義できる



✅ 【7】構造体 ≒ クラス?

  • どちらも「複数のデータをまとめる」点は同じ
  • クラスはそれに「動作を加えられる拡張版」
  • だから 構造体の延長 と思えばOK!



✨ まとめ一言

  • struct: データをまとめるだけ
  • class: データ+動作をまとめる
  • オブジェクト: クラスから作る具体的なモノ




僕の失敗談(´;ω;`)と解決法🐈

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?