見出し画像

変数の型

太古のプログラミング言語であるFORTRANの時代から変数には整数と実数という種類がありました。最初のBASICであるダートマスBASICも、これに準じていて変数と言えば実数で、MATという行列を扱う構文まであるのに変数と言えば数をしまうもので文字を扱うことは出来なかったようです。

パソコンでBASICが使われるように移植された際に、パソコンのCPUには実数命令が無かったこともあり整数だけしか扱えなかったのですが、まだ文字を変数にしまうことは出来ずPRINTなどに書くことが出来るだけです。

ですから、ここまでの時代では変数の型なんて意識することはなかったのですが、パソコンで広くBASICが使われるようになり整数と実数を区別したり、文字列を扱えるようにするために変数名の後ろに記号をつけるようになりました。互換性のために何もつけなければ実数(単精度)を表し(!をつけても良い)、整数であれば%、文字列であれば$をつけるというルールになりました。整数型の方はパフォーマンスを考えなければ実数のままであっても構わないのですが、文字列は四則演算も出来ませんし、そもそも必要な処理が違います。他の言語が文字型を導入したのにBASICでは文字「列」型を導入したというのはなかなかの英断で、文字列処理が書きやすく初期のパソコン時代に愛用されたのも頷けるところです。面白いのは文字列を返す組み込み関数名にも末尾を$をつけてわかりやすくなっていましたよね。

初期のBASICでは文字列型変数の扱いがマチマチなところがあったのですが(文字配列で実装されているものもあった)、結局BASICといえばマイクロソフトというようになったので、徐々に仕様がデファクトスタンダードに揃っていきました。その中で倍精度実数が登場し、こちらは#をつける(倍々精度は&だったっけ)。かなり後になってですが通貨型(固定小数点型)は@です。こんな風にして型が増えていきました。

FORTRANの方も77あたりには型宣言が整備されて、実数で精度を指定したり、文字型とともに論理型や複素数型が使えるようになりました。C言語も最初の頃は宣言がなければ整数型で、他の型のときだけ宣言すれば良いというなんともヌルい環境でした。

型が重要になってきたのは構造化プログラミングが叫ばれてきてからで、Pascalを覚えるとまず型を明示することを教えられます。それに単純な変数の種類だけではなく集合であるとか列挙、それに構造体、レコードなどの概念が登場し、加えてポインタが導入されたことで変数に入れられるものの制約が増えてからです。それまでは与えられた型を使うだけで済んだのが、新たな型を作れるようになり一気に複雑になりました。

これがオブジェクト指向の登場で拍車がかかり、悪いことには型変換というのがなかなか複雑で、あまり人にやさしくないコンピュータの都合による実装がなされることが多い処理で、これが原因でコンパイルエラーになったり、エラーにならずバグが発生する事態が頻発しました。

使いこなすことができれば型システムは非常に強力で便利なものですが、どちらかというとコンパイラ向けの機能でスクリプトなどでは型の無い、もしくは型による制限が弱い言語が多いです。とはいえ数値と文字列の区別がないと、今度は想定外の事態が起こりがち(足すと数値で足すのか文字列を連結するのかなど)なのですが、そもそも人間の目には文字しか映らないので、あまり区別しても始まらないところもあります。

プログラミング言語を覚える時に、型を覚えることはなかなかハードルになっているような気もするのですが、CPU自身は相変わらず型を持たず与えられたビット列を処理するに過ぎないので、この人類の叡智である型システムを覚えることがプログラミング言語の習得のポイントなのかもしれません。同じビット列が型情報を使ってどのように処理が変わるのかを調べてみると興味深いですよ。

ヘッダ画像は、以下のものを組み合わせて作成しました
https://www.irasutoya.com/2013/03/blog-post_14.html
https://www.irasutoya.com/2017/01/blog-post_855.html
https://www.irasutoya.com/2020/05/blog-post_562.html

#プログラミング言語 #変数 #型 #BASIC #FORTRAN #PASCAL #構造化言語 #オブジェクト指向

いいなと思ったら応援しよう!