プログラミング言語

前回私はプログラミング言語について、「プロであれば、知っている言語の数を自慢するものではありません」と書きました。
勿論理由があります。

 

私たちの周りで実際沢山プログラミング言語が使われていますが、いくつかの言語を理解してみれば、言語の違いは、方言の違いだと言える程なのです。

プログラミング言語Pacsalの設計者Wirthは、次のようなタイトルの教科書を書いています。

Algorithms + Data Structures = Programs 

このタイトルは、プログラムの本質を言い当てています。
すなわち、プログラムはどんなデータをどんなアルゴリズムで操作するのか、
に尽きると言っています。

昔々、コンピュータが世の中で使われ始めたころ、すなわちIBMがこの世界の絶対王者であったころ、コンピュータは大変高価で、メモリーをふんだんに使うことができなかったので、プログラムはできるだけメモリーを使わないようにしました。

当時私たちが使うことができた言語は、FortranとCobol、少し後からC言語ですが、ここで取り入れられたのがデータ型の概念です。

データ保存倉庫に何(どんなデータ型のデータ)が入っているか、明確にする手法がとられました。

Xというアドレスには整数が、
Yというアドレスには実数(小数)が、
Zというアドレスには文字列が入っていると明示する必要があったのです。

というのは、整数や実数や文字列のコンピュータ内部での表現が異なり、多くの場合それぞれの倉庫の大きさも違うのです(倉庫の境界線はどこにも書いてありません)。Xというアドレスには実際には整数が入っているのに、
文字列だと解釈しては、何をやっているのか訳が分からなくなります。

例えていえば、全てを0と1のパターンとしてしか見えないロボットが、Xというアドレスには5㎡の面積に果物が入っているのに、10㎡の面積に建材があると思って取り出すと何をしているのか分かりません。

上でX、Y、Zを変数といいますが、以後長い間、様々な言語でこの変数のデータ型を明確に宣言することが重要であり、当然のことと考えられてきました(特にPascalはデータの型付けを厳格にしました)。

プログラムは求める結果を実現するために、このデータをどのように操作するかのロジック(Algorithm)が必要だし、それを実現する一連の命令が「手続」(Procedure)です。

この手続きも意外と少ないし、どの言語も結局同じようなことをしているのです。
例を挙げますと…

アドレス:Xに値:1を代入する。例 => X = 1
アドレス:Xの値を他のアドレス:Xに代入する。例 => Y = X
あるアドレス:XとYの値を計算しあるアドレス:Zに保存する。例 => Z = X – Y
(データの演算は、様々なものがあります。)

また一連の手続を制御するのは、アドレスの値を判定する条件文(if文、switch文)、同種の動作を繰り返す繰り返し文(While、Until文)です。

また、一連の処理を纏めておいて、必要な時に呼び出して使うサブルーチンや関数やライブラリーも昔から使われていました。

データを単独ではなく纏めて保存する仕組みとして当初から配列がありましたが、
その後リスト、ストラクチャー、ディクショナリー等の便利なデータ保存の仕組みが登場しました。

更に、近年プログラミング言語で大きく発展したのは、クラス概念です。

クラスは仕様書のようなものです。
例えば、自動車という仕様書には、車輪があり、駆動部があり、座席があります
(自動車は車輪を持っている。have)。乗用車や作業車は自動車の一種です(乗用車は自動車である。is)。

ここで乗用車は自動車クラスを継承します。すなわち乗用車といえば、自動車クラスの性質(駆動部や座席を持っている)を継承しています。

当然、プログラムは世界を定義するのではなく、そのプログラムに適したクラスを定義していきます。

実際のデータは仕様書から、「生産」(言語では通常=newを使います)することで、オブジェクトとして実体化します。
例 => 私の車 = new 乗用車

 

上の説明は、プログラミング言語をよく説明したとは言えませんが、プログラミング言語の骨組みはこのようなもので、これに色々便利な(場合によっては厄介な仕組み)が付加されています。

例えば、正規表現、デリゲイト、ラムダ式、ジェネリック、データベース、ファイル操作や様々なライブラリー(処理プログラムのパッケージ)です。

最初に書きましたが、データ型はプログラミング言語では必須の概念と考えられてきましたが、多分メモリーを気にしなくてよくなったことと関連すると思いますが、データ型を余り気にしなくてよい言語があります。

例えば、特にインタープリター型言語のPerlやJavascriptやPythonでは、必要になって初めて動的にデータ型を判断するし、Pythonでは数字を含むすべてのデータをオブジェクトにしていて、むき出しのデータではなく、データをオブラートで包んで処理することで、プログラマはデータ型を気にしなくてよいようになっています。

ともかく、手続き型言語は、それぞれ特徴を持ってはいるにしても、文法の本質は変わらないので、この部分を理解していれば、後は方言だと思う程度のものです。

勿論実務で使いこなすには、マニュアルでよく動作を確認しなければいけませんが、それも難しいものではありません。

 

 

error: コピーできません !!