プログラマーっぽい内容になります。
Javaにおいては変数の宣言下記のようにするのだと思います。
int number;
char str[5]; とか string str;
私はコボリストなので、COBOL85なら次のようにします。
000001 01 NUMBER PIC 9(5).
000002 01 STR PIC X(5).
COBOLの場合、数字項目は9タイプで、5桁というようにその数の桁数を指定します。そうするとメモリ上に5バイトメモリが確保されます。5桁なので、表現できる数は0 ~ 99999までとなります。
英字項目はXタイプと宣言し、5桁と指定すればメモリ上に5桁の場所が確保されます。ASCIIコードで表示すると16進表示で、00001なら「3030303031」、99999なら「3939393939」と表示されます。
Java等であれば、integerであれば、メモリ上には32bit(4バイト)確保され、表現できる数は-2147483648 ~ 2147483647となるのですよね。同じく16進で表示するなら、1は「00000001」と99999は「0001869F」となるわけです。
※ここまで良いですか。日頃皆さんメモリ上でどうなっているか想像してないでしょうね。
COBOLでは9タイプと宣言した変数は計算に使うことができます。必然的に9タイプで宣言した変数には、0(0x30)~9(0x39)のコードしかはいるはずはありません。しかしプログラムのミスで、そこに英字を代入してしまうことがあります。そうすると「不正十進」というエラーを起こして、プログラムは止まってしまいます。COBOLはerrorのcatchなどないのでおしまいです。
ここで皆さんにお伝えしたいのは、数字という項目でも計算で使うことのない変数であれば、英字(StringやXタイプ)で宣言すべきである、ということです。私が新人の時に先輩から教わりました。
なんなら、Stringで宣言しておいて、計算で使いたくなったら型変換して使えば良いと思います。COBOLならXタイプを9タイプにREDEIFINEして使う、という感じ。
その場合のメリデメは下記の通りです。
メリット
・社員番号の体系変更を行い、頭にAをつけることにした、といった場合の影響なし。
・最後の一桁はチェックディジットだと言われた時に、取り出しやすい。
デメリット
・扱う数字や文字列の桁数を意識しておく必要がある
※Stringのような参照型なら意識してないでしょ。
・大きな数字を取り扱う時、メモリの消費が多くなる(intの最大値2147483647はintでは4バイトのところを文字で扱うならcharで10バイト必要)
※メモリ使用量なんて皆さん気にしてコーディングしてないでしょ。。。
結局デメリットとかもないので、『計算で使わないなら文字列』は黄金の法則なのかも知れません。
#細かいところ間違ってても気にしないでね。
#COBOL使いの人達、懐かしいでしょ。