TypeScript - シンボル:入門ガイド

こんにちは、未来のプログラミングスーパースター!今日は、TypeScriptのシンボルの世界への興奮人心的な旅に出発します。プログラミングの経験がなくても心配しないでください - 私があなたの親切なガイドになり、このトピックをステップバイステップで探求します。お気に入りの飲み物を一杯取り、一緒に飛び込みましょう!

TypeScript - Symbols

シンボルとは?

本題に入る前に、シンボルとは何かを理解しましょう。宝箱を持っていて、それに UNIQUEな鍵が必要なるところを想像してください。TypeScriptでは、シンボルはそのようなUNIQUEな鍵のように、コード内で使用できる特別な、一種の識別子です。

文法:シンボルの作成方法

シンボルを作成するのはサンドイッチを作るのと同じくらい簡単(もしかするとさらに簡単!)です。以下のようにします:

let mySymbol = Symbol();

それで終わり!あなたは初めてのシンボルを作成しました。でも、まだあります!シンボルに説明を付けることもできます:

let namedSymbol = Symbol("これは私の特別なシンボルです");

この説明は、シンボルのUNIQUE性に影響を与えることはありませんが、後で識別するのを助けることができます。

小さな練習

二つのシンボルを作成して比較してみましょう:

let symbol1 = Symbol();
let symbol2 = Symbol();

console.log(symbol1 === symbol2); // 出力: false

説明なしで作成された二つのシンボルでも、UNIQUEです。双子のように見えるかもしれませんが、異なる個体です!

シンボルはUNIQUEで不変です

次に、二つの大きな言葉について話しましょう:UNIQUEと不変。

UNIQUE

作成するそれぞれのシンボルはUNIQUEです。雪の结晶のように、同じ説明を持つ二つのシンボルを作成しても、それらは異なります:

let sym1 = Symbol("mySymbol");
let sym2 = Symbol("mySymbol");

console.log(sym1 === sym2); // 出力: false

不変

シンボルを作成した後は変更できません。石に刻むようなものです - それが永久にあります。

let immutableSymbol = Symbol("私は変更できない");
// immutableSymbolを変更する方法はありません!

シンボルをオブジェクトのプロパティのキーとして使用する

シンボルの最も素晴らしい機能の一つは、オブジェクトのプロパティのキーとして使用できることです。宝箱の中に隠された秘密の区画を持つようなものです!

let specialKey = Symbol("secretCompartment");

let treasureChest = {
[specialKey]: "隠された宝物!",
gold: 100,
silver: 200
};

console.log(treasureChest[specialKey]); // 出力: "隠された宝物!"
console.log(treasureChest.gold); // 出力: 100

この例では、specialKeyはシンボルで、私たちがtreasureChestオブジェクトの秘密のプロパティにアクセスするために使用します。通常のキーのようにgoldは普通に動作しますが、シンボルキーはさらにUNIQUEな層を追加します。

シンボルをスイッチ文で使用する

シンボルはスイッチ文でも使用できます。特定のキーOnly開く特別なロックを持つようなものです:

let actionSymbol = Symbol("action");

switch (actionSymbol) {
case Symbol("action"):
console.log("これは表示されません");
break;
case actionSymbol:
console.log("これは表示されます");
break;
default:
console.log("デフォルトケース");
}

Symbol("action")が最初のケースにあるにも関わらず、それは私たちのactionSymbolと同じではありません。それぞれのシンボルはUNIQUEです!

UNIQUEシンボル

TypeScriptには「UNIQUEシンボル」という概念もあります。これらはさらに特別で、TypeScriptはそれらを完全にUNIQUEな型を持つシンボルとして扱います:

const uniqueSymbol: unique symbol = Symbol("私はUNIQUEだ!");

// これは動作します:
let symVar1: typeof uniqueSymbol = uniqueSymbol;

// これは動作しません:
// let symVar2: unique symbol = Symbol("我也是UNIQUEだ!");
// エラー: 'unique symbol'型の変数は'const'で宣言しなければならない。

UNIQUEシンボルはconstで宣言され、再作成することはできません。限定版のコレクターアイテムのように、一旦消えたら戻ってきません!

シンボルを扱うためのメソッド

シンボルを扱うためのいくつかの便利なメソッドを見てみましょう:

メソッド 説明
Symbol.for() グローバルシンボルレジストリにシンボルを作成 let globalSym = Symbol.for("myGlobalSymbol");
Symbol.keyFor() グローバルシンボルレジストリのシンボルのキーを取得 let key = Symbol.keyFor(globalSym);
Object.getOwnPropertySymbols() 与えられたオブジェクトに見つかったすべてのシンボルプロパティの配列を返す let symbols = Object.getOwnPropertySymbols(myObject);

以下は、これらのメソッドを使用する簡単な例です:

let globalSym = Symbol.for("myGlobalSymbol");
console.log(Symbol.keyFor(globalSym)); // 出力: "myGlobalSymbol"

let obj = {
[Symbol("key1")]: "value1",
[Symbol("key2")]: "value2"
};

console.log(Object.getOwnPropertySymbols(obj).length); // 出力: 2

そして、ここまででTypeScriptのシンボルに関するクイックコースが終了しました。実践が完璧を生むことを忘れないでくださいので、これらの概念を自分のコードで実験してみてください。誰 knows? コーディングのスーパーパワーを手に入れるかもしれません!

未来のTypeScriptウィザード、ハッピーコーディング!?‍♂️✨

Credits: Image by storyset