💡 クラスの隠し技「むンスタンス䞍芁」で䜿える静的メ゜ッドStaticで蚭蚈を極めろ

WEB制䜜

🀯 序文クラスなのに「実䜓」がいらない機胜

前回、継承を䜿っお効率的に新しいクラスを䜜る方法を孊びたした。これであなたのクラス蚭蚈スキルはプロ玚です。しかし、ここで䞀぀の疑問が浮かびたす。

「特定のむンスタンスに䟝存しない機胜は、どこに曞くべきか」

䟋えば、Userクラスがあったずしお、「ナヌザヌ党員の総数を数える機胜」や、「メヌルアドレスが正しい圢匏かチェックする機胜」は、aliceさんやbobさんずいった個々のむンスタンスが持぀べき機胜でしょうか違いたすね。これらはクラス党䜓が持぀べき機胜です。

JavaScriptでは、このような「むンスタンス実䜓を䜜る必芁がない、クラス盎属の機胜」を実装するために**静的Static**なメンバヌを䜿いたす。これが、コヌドの蚭蚈を極限たで掗緎させるための隠し技です


1. ⚙ 静的メ゜ッドStatic Methodsクラス盎属の「道具」

静的メ゜ッドは、その名前の通り、**static**キヌワヌドを付けお定矩されたす。

  • 特城: クラスをnewキヌワヌドでむンスタンス化するこずなく、クラス名に盎接ドット.を付けお呌び出すこずができたす。
  • 甹途: 共通のナヌティリティ関数や、むンスタンスを䜜成するためのヘルパヌ関数など、個々のむンスタンスの状態に䟝存しない凊理に䜿われたす。

📝 静的メ゜ッドの定矩ず䜿い方

JavaScript

class Validator {
    // staticキヌワヌドを付けお定矩
    static isValidEmail(email) {
        // メヌルアドレス圢匏のチェック凊理簡略化
        return email.includes('@') && email.includes('.');
    }

    static isValidPassword(password) {
        return password.length >= 8;
    }
}

// 呌び出し方むンスタンス化は䞍芁
const emailResult = Validator.isValidEmail("test@example.com"); 
console.log("Eメヌルは有効ですか:", emailResult); // 結果: Eメヌルは有効ですか: true

// ❌ 誀った䜿い方: むンスタンスからは呌び出せない
// const checker = new Validator();
// checker.isValidEmail("a"); // ← ゚ラヌになる

Validator.isValidEmail()のように、クラス名に盎接ドットを付けお呌び出すのが静的メ゜ッドの最倧の特城です。


2. 🔢 静的プロパティStatic Propertiesクラス共通の「デヌタ」

静的プロパティは、クラス党䜓で共有されるデヌタ定数やカりンタヌなどを栌玍するために䜿われたす。これもstaticキヌワヌドを付けお定矩したす。

📝 静的プロパティの定矩ず䜿い方

静的プロパティは、すべおのむンスタンスで共通の倀を保持したす。

JavaScript

class User {
    // 静的プロパティの定矩 (クラス共通のデヌタ)
    static userCount = 0;
    static MAX_USERS = 100;

    constructor(name) {
        this.name = name;
        // ナヌザヌが䜜成されるたびに、クラス共通のカりンタヌを増やす
        User.userCount++; 
    }
    
    static getCurrentUserCount() {
        return User.userCount;
    }
}

// ナヌザヌを䜜成する
const alice = new User("Alice");
const bob = new User("Bob");

// 呌び出し方クラス党䜓でデヌタが共有されおいる
console.log("珟圚のナヌザヌ総数:", User.getCurrentUserCount()); // 結果: 2
console.log("最倧ナヌザヌ数:", User.MAX_USERS); // 結果: 100

この䟋のように、User.userCountはaliceでもbobでもなく、Userクラス党䜓に玐づいおいるため、むンスタンスがいく぀䜜られおも共通のカりンタヌずしお機胜したす。


3. 🧠 静的メ゜ッドずむンスタンスメ゜ッドの䜿い分け

クラス蚭蚈においお、どのメ゜ッドをstaticにするか静的メ゜ッドず、そうでないかむンスタンスメ゜ッドの刀断は非垞に重芁です。

メ゜ッドの皮類特城呌び出し方䟋
むンスタンスメ゜ッド個々のデヌタthisを䜿う必芁がある。alice.login()alice個人のログむン凊理
静的メ゜ッド個々のデヌタを䜿わない。クラス共通の凊理。User.isValidEmail()どのナヌザヌにも共通のメヌルチェック凊理

Google スプレッドシヌトに゚クスポヌト

ルヌル: メ゜ッド内で**this**個々のむンスタンスのデヌタを䜿わないなら、それは静的メ゜ッドずしお定矩すべきです。


🌟 たずめstaticでクラス蚭蚈を芞術に

静的メンバヌは、あなたのクラス蚭蚈を次のレベルに匕き䞊げるための匷力なツヌルです。

  • staticキヌワヌドクラス盎属のメンバヌであるこずを瀺す。
  • 静的メ゜ッドむンスタンス化せずに、ClassName.method()で呌び出す共通関数。
  • 静的プロパティClassName.propertyでアクセスする、クラス党䜓で共有されるデヌタ。

このstaticの抂念を䜿いこなせば、あなたのコヌドは機胜ごずに矎しく分離され、誰が芋おも分かりやすい、**「究極に掗緎された蚭蚈」**を持぀ようになるでしょうこれで、オブゞェクト指向プログラミングの基瀎ず応甚は完璧です。

タむトルずURLをコピヌしたした