【TypeScript】列挙型(enum):基本と応用

TypeScript

TypeScriptの強力な機能のひとつに「列挙型(enum)」があります。
enumは一見すると単純な機能に思えますが、適切に使いこなせば、コードの可読性を向上させ、バグを減らすことができます。

本記事では、enumの基本と応用的な活用方法を紹介します。

enum とは

列挙型(enum)は、enumerationの略で、一連の定義済みの値(定数)に名前を付けた型です。enumを使うことで、意味のある名前をつけた定数を扱いやすくなり、コードの意図を明確にすることができます。

基本的な書き方

以下の例は、日曜日から土曜日までの曜日を列挙型 Week として定義しています。

TypeScript
enum Week {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

// 使用例
const today: Week = Week.Wednesday;
console.log(today); // 出力: 3

上記の出力結果から推察されるとおり、enumの値はデフォルトで0から始まり、1ずつ増加する連続した数値が割り当てられます。

数値ベースのenumと文字列ベースのenum

TypeScriptでは、数値ベースと文字列ベースのenumを利用できます。

数値ベースのenum

数値ベースのEnumはデフォルトの動作であり、値に何も設定しなければ0から始まり、1ずつ増加します。
また、以下の例のようにカスタム値を設定することも可能です。

TypeScript
enum Role {
    Admin = 1,
    User,
    Guest
}

console.log(Role.Admin); // 出力: 1
console.log(Role.User);  // 出力: 2
console.log(Role.Guest); // 出力: 3

文字列ベースのenum

文字列ベースのenumでは、各値にカスタム文字列を割り当てることができます。

TypeScript
enum Direction {
    Up = "上",
    Down = "下",
    Left = "左",
    Right = "右"
}

console.log(Direction.Up); // 出力: "上"

文字列enumは可読性が高く、デバッグ時にも便利です。

enumの応用例

フラグとしての利用

ビット演算を活用して、enumをフラグとして扱うこともできます。

TypeScript
enum Permission {
    Read = 1,   // 2進数で0001
    Write = 2,  // 2進数で0010
    Execute = 4 // 2進数で0100
}

const userPermission = Permission.Read | Permission.Write; // 0001と0010のORで0011
console.log(userPermission & Permission.Read); // 出力: 1 (Read権限を持つ)
console.log(userPermission & Permission.Execute); // 出力: 0 (Execute権限はない)

ビット演算の補足解説

Permission.Read | Permission.Write
ReadとWriteのいずれかのビットが1ならば1が立つ
0001
0010
——
0011
userPermission & Permission.Read
上記の結果(0011)とReadの両方が1のビットのみ1が立つ
0011
0001
——
0001
userPermission & Permission.Execute
上記の結果(0011)とExecuteの両方が1のビットのみ1が立つ
0011
0100
——
0000

キーと値の双方向性

数値ベースのenumは、キーと値の両方向で利用可能です。

キーから値を取得するにはドット(.)を使用し、値からキーを取得するには角カッコ([]) を使用します。

TypeScript
enum Color {
    Red = 1,
    Green,
    Blue
}

console.log(Color.Red); // 出力: 1
console.log(Color[1]);  // 出力: "Red"
console.log(Color[3]);  // 出力: "Blue"

Key:Value形式のデータでは、キー(Key)から値(Value)を取得できるのはごく一般的かと思いますが、値の方からキーを取れるのは少々珍しい性質ですね。

まとめ

列挙型(enum)は、TypeScriptで定数値を効率的に扱うための大変便利なツールです。
特にコードの意図を明確にし、バグを防ぐ助けとなります。

本記事では基本的な使い方から応用的な利用法までを紹介しましたが、enumを適切に使いこなすことで、より強力で保守性の高いコードを書くことができます。

ぜひ、日常の開発にも積極的に取り入れてみていただければと思います。


本記事についての質問、誤りの指摘、ご意見ご感想などありましたら、ぜひコメント頂ければ幸いです。

それでは最後までお読みいただき、ありがとうございました。

コメント

タイトルとURLをコピーしました