プライベートメソッド
CoddyのJavaScriptジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 19/56。
JavaScriptのクラスにおけるプライベートメソッドを使用すると、実装の詳細を隠蔽し、内部機能への外部からのアクセスを防ぐことができます。
ES2022以降、プライベートメソッドは#プレフィックスを使用して定義できるようになりました:
class Counter {
#count = 0;
// プライベートメソッドを作成する
#increment() {
this.#count++;
}
// プライベートメソッドを使用するパブリックメソッド
addOne() {
this.#increment();
return this.#count;
}
}Counterインスタンスを作成してみましょう:
const myCounter = new Counter();パブリックメソッドを呼び出すことができます:
console.log(myCounter.addOne()); // 出力: 1しかし、プライベートメソッドに直接アクセスしようとすると、エラーが発生します:
myCounter.#increment(); // エラー: プライベートメソッドはクラスの外からはアクセスできませんプライベートメソッドは、内部の実装の詳細を外部から隠蔽することで、カプセル化の維持に役立ちます。
チャレンジ
メッセージを保存する MessageBox クラスが提供されています。あなたのタスクは、メッセージを検証するための #isValidMessage(text) というプライベートメソッドを追加することです。このメソッドは以下の条件を満たす必要があります:
- テキストが空ではなく、かつ100文字未満であれば
trueを返す - それ以外の場合は
falseを返す
チートシート
JavaScriptクラスのプライベートメソッドは、#プレフィックスを使用して定義され、クラス内からのみアクセスできます。
class Counter {
#count = 0;
// プライベートメソッド
#increment() {
this.#count++;
}
// プライベートメソッドを使用するパブリックメソッド
addOne() {
this.#increment();
return this.#count;
}
}プライベートメソッドはクラスの外からはアクセスできません。
const myCounter = new Counter();
myCounter.addOne(); // 動作する
myCounter.#increment(); // エラー: プライベートメソッドにはアクセスできませんプライベートメソッドは、内部の実装の詳細を隠すことで、カプセル化を維持するのに役立ちます。
自分で試してみよう
import { MessageBox } from './messageBox.js';
// メッセージボックスを使用する
const box = new MessageBox();
console.log(box.setMessage("Hello")); // "Message set!" (#isValidMessage を使用)
console.log(box.setMessage("")); // "Invalid message!" (#isValidMessage を使用)
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。