計算機科学のブログ

クラス コンストラクタ関数とプロトタイプをクラスに変換、定義、宣言、インスタンス化、メソッド、インスタンスプロパティ

入門JavaScriptプログラミング (JD Isaacks(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT6(クラス)、LESSON 27(クラス)、27.8(練習問題)、Q27-1の解答を求めてみる。

コード

class Fish {
    constructor(name) {
        this.name = name;
        this.hunger = 1;
        this.dead = false;
        this.born = new Date();
    }
    eat(amount = 1) {
        if (this.dead) {
            console.log(`${this.name} is dead and can no longer eat.`);
            return;
        }
        this.hunger -= amount;
        if (this.hunger < 0) {
            this.dead = true;
            console.log(`${this.name} has died from over eating.`);
            return;
        }
    }
    sleep() {
        this.hunger++;
        if (this.hunger >= 5) {
            this.dead = true;
            console.log(`${this.name} has starved.`);
        }
    }
    isHungry() {
        return this.hunger > 0;
    }
}

const oscar = new Fish('oscar');

console.assert(oscar instanceof Fish);
console.assert(oscar.isHungry());
while (oscar.isHungry()) {
    oscar.eat();
}
console.log(!oscar.isHungry());
console.log(!oscar.dead);
oscar.eat();
console.assert(oscar.dead);

入出力結果(Terminal、Zsh)

% node sample.js 
true
true
oscar has died from over eating.
%