列挙型の作り方を再考する
公式ドキュメントのEffective Goで推奨されているように、iotaを使ったやり方で列挙型と列挙子を表現すると、 - 列挙型が一つ存在し - その列挙型を持つ定数が複数存在する というような構成になる。 列挙子の一覧を出すだけならこのやり方は確かに手軽だが、それぞれの列挙子に更に何らかの挙動を定義するとなると、 メソッドごとに「既知のこの列挙子についてはこういった処理を行う」という形の条件分岐が登場することになり、 これはすなわち、列挙子を追加することになったら、そのたびにすべてのメソッドが影響を受けてしまう、ということを意味する。 このような問題点を受け、 - 列挙型を表すインターフェイスを一つ定義し - 列挙子ごとに、列挙型のインターフェイスを実装した型を定義する というような構成にしてみると、 - 特定の列挙子が持つ挙動はその列挙子の周りに集まり(凝集度の向上) - ポリモーフィズムで条件分岐を消すことができ - 既存のコードに触らずに列挙子を新たに追加することができる(Open-Closed Principleの体現) といったメリットが得られるのである。 という内容を、コードを持って説明します。
Level: all /
LT(5min)
Takumi Ichimonji
株式会社Voicy
Goでツアー予約システムや物流情報システムの開発を経験し、2023年にVoicyに入社。コードの可読性や保守性を考えるのが好きです。