Menu
Coddy logo textTech

プライベートメソッド

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(); // エラー: プライベートメソッドはクラスの外からはアクセスできません

プライベートメソッドは、内部の実装の詳細を外部から隠蔽することで、カプセル化の維持に役立ちます。

challenge icon

チャレンジ

メッセージを保存する 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 を使用)
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン