TypeScript - アクセス修飾子:コードのプライバシーを守るための親切なガイド

こんにちは、未来のプログラミングスーパースター!? TypeScriptのアクセス修飾子についての興奮する旅にあなたを案内するのが楽しみです。プログラミングを教えてきた年数を重ねてきた者として、これらの概念を理解することはコードの世界の秘密の握手を学ぶようなものだと言えます。それでは、一緒にこれらの謎を解き明かしましょう!

TypeScript - Access Modifiers

アクセス修飾子とは?

具体的な内容に進む前に、アクセス修飾子とは何か話しましょう。あなたがとってもクールなツリーハウス(それが私たちのコードです!)を建てているとします。アクセス修飾子は、誰が登ってくることができるか、誰が中を見れるか、誰が秘密の部分を使えるかを決める規則のようなものです。これにより、コードの一部がどのようにアクセスされ、使用されるかをコントロールすることができます。

TypeScriptには、主に3つのアクセス修飾子があります:

修飾子 説明
public どこからでもアクセス可能
private 同じクラス内でのみアクセス可能
protected クラス内およびそのサブクラスでアクセス可能

それでは、それぞれ詳しく見ていきましょう!

公開アクセス修飾子(public)

public修飾子は、ツリーハウスのドアを開放してしまうようなものです。誰でも中に入り、スイングを使い、コミックを借りることができます。コードの言葉では、プログラムのどこからでもこれらの要素にアクセスし、使用することができます。

以下に楽しい例を示します:

class Superhero {
public name: string;
public power: string;

constructor(name: string, power: string) {
this.name = name;
this.power = power;
}

public usePower() {
console.log(`${this.name} uses ${this.power}!`);
}
}

const spiderman = new Superhero("Spider-Man", "web-slinging");
console.log(spiderman.name); // 出力: Spider-Man
spiderman.usePower(); // 出力: Spider-Man uses web-slinging!

この例では、namepowerusePower()はすべて公開です。コードのどこからでもアクセスし、使用できます。まるでスパイダーマンが自由に街をスイングしているようなものです!

私的アクセス修飾子(private)

次にprivateについて話しましょう。これは、ツリーハウスの中に秘密のダイアリーを置いて、あなたしか読めないようなものです。TypeScriptでは、privateメンバーは同じクラス内でのみアクセスできます。

スーパーヒーロークラスを更新してみましょう:

class Superhero {
public name: string;
private secretIdentity: string;

constructor(name: string, secretIdentity: string) {
this.name = name;
this.secretIdentity = secretIdentity;
}

private changeClothes() {
console.log("Quick change in a phone booth!");
}

public goOnMission() {
this.changeClothes();
console.log(`${this.name} is ready for action!`);
}
}

const superman = new Superhero("Superman", "Clark Kent");
console.log(superman.name); // 出力: Superman
// console.log(superman.secretIdentity); // エラー!secretIdentityはprivate
// superman.changeClothes(); // エラー!changeClothes()はprivate
superman.goOnMission(); // これは動作します!出力: Quick change in a phone booth! Superman is ready for action!

secretIdentitychangeClothes()を直接アクセスできないことがわかりますか?それがprivateの力です!スーパーマンの秘密を安全に守ります。

保護アクセス修飾子(protected)

最後に、protectedについてです。これは、ツリーハウスの特別な規則で、あなたとあなたの兄弟姉妹に適用され、近所の子供たちには適用されないようなものです。TypeScriptでは、protectedメンバーはクラス内およびそのサブクラスでアクセスできます。

スーパーヒーローの家族を作成してみましょう:

class Superhero {
public name: string;
protected superpower: string;

constructor(name: string, superpower: string) {
this.name = name;
this.superpower = superpower;
}

protected useSuperpowerInternal() {
console.log(`Using ${this.superpower} internally`);
}
}

class Sidekick extends Superhero {
public useSuperheroPower() {
console.log(`${this.name} borrows power: ${this.superpower}`);
this.useSuperpowerInternal();
}
}

const batman = new Superhero("Batman", "gadgets");
const robin = new Sidekick("Robin", "acrobatics");

// console.log(batman.superpower); // エラー!superpowerはprotected
// batman.useSuperpowerInternal(); // エラー!useSuperpowerInternal()はprotected

robin.useSuperheroPower(); // これは動作します!出力: Robin borrows power: acrobatics Using acrobatics internally

ここでは、SidekickSuperheroprotectedメンバーにアクセスできますが、外部から直接アクセスすることはできません。

締め括り

そして、ここまででコードのプライバシーを守るためのTypeScriptのアクセス修飾子の秘密の世界を探求しました。覚えておいてください:

  1. publicはすべての人に対して公開(公園のように)
  2. privateはクラス自身だけにアクセス可能(個人的なダイアリーのように)
  3. protectedはクラスとその子クラスにアクセス可能(家族の秘密のように)

これらの修飾子を賢く使用することで、より安全で整理された、保守がしやすいコードを作成できます。まるでプログラミングのスーパーヒーローのように、誰に何を知らせるか、どのようにバランスを取るかを決める楽しさがあります!

これらの概念を練習する際には、自分のスーパーヒーローチームを設計していると考えましょう。誰が何を知ることができるのか?チームワークと秘密のバランスをどのように取るのか?それがプログラミングの楽しさです!

codingを続け、学び続け、思い出してください:力は大いにありますが、それに伴う責任も重大です...そして、とってもクールなTypeScriptクラスもあります!??‍♂️?‍♀️

Credits: Image by storyset