1.3 iotaを用いて列挙型を実現する

多くのプログラミング言語で大規模なアプリケーションを実装する場合、エラーコードやマジックナンバー(アプリケーションの挙動をコントロールするデータ)を定義するときには列挙型を使用することが多いでしょう。プログラムの中でエラーコードなどを直接数値で書いてしまうと、後からプログラムを見たときに数値の意味がわからなくなってコードの解読に時間がかかりますし、コードが変更された場合にすべての箇所を修正することになったりします。修正もれを起こして不具合を誘発するのを防ぐため、決まった値の集合を表す定数として列挙型 1 を使います。

Goにはenumキーワードなどはありませんが、次にあげるいくつかの要素を組み合わせることで、他言語の列挙型に近い機能2を実現できます。

  • 種別を表す型をtypeキーワードで作成

  • 定数のリストをconstで作成

  • 定数に割り当てる値としてiotaを利用

それでは具体的に1つずつ解説していきます。

1

列挙とはあるデータが表す属性や状態を表す値です。内部的には整数で省メモリですが、演算はできません。Goでは定数を用いて表現されることが多く、他にもenum型のような型を持つプログラミング言語もあります。データベースの分野では区分値とも呼びます。

2

列挙型に含まれるすべての値のリストアップの機能がなかったり、リテラル値をキャストすることで未定義の値を作り出せてしまうので、完全ではありません。

1.3.1 それぞれ、ユニークな値を持つ定数を定義

まずはもっともシンプルな列挙型相当の定数を作ってみます。

ベースとなる型はintが手軽でよく利用されています。

type CarType int

iota は参照されるたびにインクリメントした値に設定される不思議な定数です。 ...