0
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?

class

0
Last updated at Posted at 2025-10-18

本棚管理のシステムを再現 classの概念を学ぶ

1.Bookshelfclassを作ってみる

  • constructor()内で以下のインスタンス変数を定義

  • 本を格納する為の空の配列books

  • 本の数を管理するbookCount(初期値0)

  • 以下のメソッドを定義

  • addBook(title)→本を追加し、本の数をカウントアップする

  • getBookCount()→本の数を返す

  • ListBooks()→登録されている本のタイトルをカンマ区切りの文字列で返す

      class Bookshelf {
        constructor () {
          this.books = [];
          this.bookCount = 0;
      }
      
       addBook(title)  {
         this.books.push(title);
         this.bookCount += 1;
        };
      getBookCount()  {
        return this.books.length;
      };
      listBooks()  {
        return this.books.join(",");
      };
    
  • constructor内のthisはインスタンス自身を指す

  • インスタンスを生成した時、インスタンス自身のプロパティが
    books,bookCountになるので、そこに対して値を設定する

  • メソッド内では、自身のプロパティに対してはthisを付ける必要がある

  • クラス内でメソッドを定義する時は、objectのメソッドの様に
    関数名:()=>{}では無く、関数名()=>{}で良い

2.Bookshelfクラスを拡張、本を削除できる機能を持つクラスを作成する

  • Bookshelfクラスを拡張しRemovableBookshelfクラスを作成する

  • constructor()内で親クラスのコンストラクタを呼び出す
    - [ ] 以下のメソッドを持たせる
    - removeBook(title)
    本棚(books)の中から最初に見つかったtitleの本を削除する

  • 本を削除したらbookCountを1減らす

  • 本が見つからない場合は何もしない

  • listBooks()

  • 親クラスのメソッドをオーバーライドする

  • 本棚(books)に本が1冊もない場合"本棚は空です"の文字列を返す

  • 本がある場合、親クラスのlistBooks()と同じ動作をする

      class RemovableBookshelf extends Bookshelf {
        constructor () {
          super();
          }
        removeBook(title)  {
          if(this.books.indexOf(title) !== -1) {
            this.books.splice(this.books.indexOf(title),1);
            this.bookCount --;
            }
        listBook()  {
          if(this.books.length === 0) {
            return "本棚は空です"
            }else {
            return super.listBooks();
            }
          }
    
  • クラスを継承する時は子クラス extends 親クラスでクラスを定義する

  • クラスを継承した時、実はコンストラクターを呼ばなくても、裏側で親クラスのコンストラクターを実行してくれる
    もし新たにプロパティを定義するときは、コンストラクターと、super()を呼ぶ必要がある

  • splice()は要素を取り除く、置き換える、追加ができる
    array.splice(1,1)は配列のindex=1から1つ要素を削除する

  • 親クラスのメソッドを使いたい場合は、super.親クラスのメソッド名で使用できる

3.RemovableBookshelfクラスを拡張し、お気に入り機能を持つクラスを作成する

  • RemovableBookshelfクラスを拡張したFavoriteBookshelfクラスを作成する

  • constructor()内で親クラスのコンストラクタを呼び出し、お気に入り管理用のオブジェクトfavoritesを初期化する
    *favoriteオブジェクトは、初期化段階では空のオブジェクトを定義して良い
    お気に入り登録の操作に応じてキーが追加されていく

  • 以下のメソッドを持たせる

  • removeBook(title)

  • 親クラスのメソッドをオーバーライドする

  • 本を削除する際に、お気に入り管理用オブジェクトfavoritesからも該当する本の情報を削除する

  • それ以外は、親クラスのremoveBook(title)と同じ動作をする

  • markFavorite(title)

  • 本棚に存在する本なら、お気に入りとしてfavorites[title] = trueに設定、存在しない場合は何もしない

  • unmarkFavorite(title)

  • 本棚に存在する本なら、お気に入りを解除し、favorites[title] = falseに設定、存在しない場合は何もしない

  • listFavorites()

  • favoritesに登録されていてtrueになっている本だけをカンマ区切りの文字列で返す

  • お気に入りが1冊も無い場合"お気に入りはありません"の文字列を返す

      class FavoriteBookshelf extends RemovableBookshelf {
        constructor () {
          super();
          this.favorites = {};
          }
        removeBook(title) {
          if(this.books.indexOf(title) !== -1){
            this.books.splice(this.books.indexOf(title),1);
            this.bookCount --;
            delete this.favorites[title];
          }
        markFavorite(title) => {
          if(this.books.indexOf(title) !== -1) {
            faborites[title] = true;
          }
      
        unmarkFavorite(title) {
          if(this.books.indexOf(title) !== -1){
            this.favorites[title] = false;
          }
      
        listFavorites()  {
          const resultArray = [];
          for(const key in this.favorites) {
            if(this.favorites[key] === true) {
              resultArray.push(key);
            }
            }
            if(resultArray.length === 0) {
            return "お気に入りはありません"
            }
            return resultArray.join(",");
            };
    
0
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
0
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?