日々常々

ふつうのプログラマがあたりまえにしたいこと。

コード、区分、フラグ、IDと名前。

システム開発ではよくコードや区分、フラグと呼ばれるものを扱います。

これらが混同していたり、曖昧になっていたりすることは多いので、その辺りを整理しておきます。 IDや名前なんかもこの文脈に登場するので、ついでに。

コード

コードはエンコード/デコードできるものです。 桁数ごとに意味があったり。 一定のルールで読み書きできるのがコードかなと思います。

区分

種類が固定されたコードを、特別に区分と呼ぶことにします。 値ごとに意味が決まるので、コードの一種としています。

どんな値が入りうるかわからないものは区分とは呼べません。 それは多分コードと呼んだ方がいいです。

フラグ

種類が2つ(on/offやtrue/false)に固定された区分、特別にフラグと呼ぶことにします。 3つ目が出てきたらフラグとは呼べません。 それは区分って呼んだ方がいいんだろうなと思います。

フラグと区分の関係を示したいのは、フラグはしばしば増えるからです。 削除フラグに入ってる9とか2とかのことです。君はもうフラグじゃない。

ID

IDはidentifier、識別子です。 大事なのは一意であることだけです。 値の体系は関係ありません。文字として読めなくてもIDはIDです。

体系の決まっているIDはコードの側面も持ちますが、だからと言ってIDはコードではありません。 こう言うのは「IDのコード体系」と捉えるのがいいかなと。

コードをそのままIDとして使うこともあります。 こう言う文脈ではコードとIDは混同されがちですし、その文脈に閉じれば、同じと看做しても問題ありません。 でも広い文脈ではコードとIDは異なります。

IDは識別する範囲内で一意であればいいので、区分はフラグもその範囲内では一意だとかなんとか言えます。それに意味はない気はしますが。

名前、番号

これらは機械ではなく人が主に使用します。 名前や番号自体に一意性はありません。読み書きのルールもあるようなないような感じです。

名前や番号として固有の値を付けられることもありますが、しばしばコードやIDがそのまま使われます。 「名前で一意になる」は名前がIDの側面を持っている状態です。 「シリアル番号から型番がわかる」は番号がコードの側面を持ち、そのコードの一部に区分が使用されている状態です。 こう言う時、名前や番号とそれらが混同されがちです。

番号は主に数値で構成され、順序性があったりします。 番号を名前として使用することはあるかもしれませんが、名前を番号としては使用しないでしょう。 番号は名前よりは一意性を持つ傾向にありますが、一意性はたいして重要じゃないこともあります。 番号に一意性が必要であれば、IDを番号に使用するのがいいかと。

大雑把な関係

こんな感じ。

f:id:irof:20211026180017p:plain

破線は「コードを名前として使ったりする」みたいな読み方で。

混同していて問題のないことも多いので、常に厳密に区別する必要はありません。迷った時の参考程度に。