コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

定数を定義をする意味を考える

結構無意識に定数を利用しているが、どういう場面で使われるものなのかというのをちゃんと書き出してみる。

定数を用いるケース

1.マジックナンバーの置き換え

マジックナンバー(意味や意図が記述した本人以外には自明ではないもの)が発生した場合、それを回避するために何か変数に格納して変数名で用途を表現するという方法がある。

ただし、マジックナンバーの大体はプログラムのスコープ上で変化することが少ないので、定数値化するのがベストとなるケースが多いため、定数定義する。

2.重複利用する内容の設定

1の内容とDRYの文脈が合わさると、『使い回すような数値は意味を持たせて挙げればいい』という着想が生まれ、同じような定義を使い回すために代入する機会がない変数として定数を用いることがある。

3.メモリ空間を節約したい(実行環境や言語による)

プログラミング言語によっては、定数として定義することにより、動かない値として定義されるので作りによってはメモリの利用効率があがったりするケースがある。

GCの無いような言語や、組み込みなどのメモリリソース資源の管理がシビアな状態のときなどには響く

あとがき

なんでこんなことを書いたかというとレビューにおいて、定数を定義する意味に関して問われたときに正確に回答できないなと思い、定数のあらましをざっと調べてみたかったという感じです。

それこそプリプロセッサで置き換えてた時の話と考えると、ちょっと今どきは色合いが違っていたりはしますが、突き詰めていくと今のマジックナンバーの撲滅とその延長線上にある意味変数の使い回しという側面につながってくるのかなと思います。

なので、変数定義を勧めるときは「マジックナンバーの回避」というのを念頭において語るとよいのかもしれないなーと思ったのでした。

関連リンク