Pascalによるプログラミングに関する世界観です。
UNIXとC言語が一般的になるより以前、大学などの教育機関で学生にプログラミングを教える時の言語として一般的だったのはPascalでした。
今では、UNIXが普及した影響から、C言語を教えることが多く、また最近では教育ではJavaやPythonが教えられることも増えていますが、以前はPascalが標準的でした。
僕はDelphiでPascalのコードを少しだけ書いた経験があります。
実際のところ、Pascalは教育用としてとても良い言語で、特にDelphiで使うのがおすすめです。それは、Object Pascalを使いながらRADのフォームデザイナーを操作することで、「僕がやりたかった素敵なプログラミング」ができるからです。
Pascalは、代入に「=」ではなく「:=」を使い、また変数の宣言部と手続きの記述部と分けるなど、「きちんとしたプログラミング」を行うための入門的な要素が多いです。
旧ボーランド、現エンバカデロ社で開発・販売されているDelphiは、とても教育目的のために優れた環境です。
DelphiにおけるPascalは可読性が高く、コードを読んで何が書かれているのかを把握しやすいです。フォームデザイナーも一級品で、コンポーネントとオブジェクト・インスペクタを使うことで、簡単にプロパティやイベントを設定でき、コンパイル速度や実行速度も速いです。
Delphiについて詳しくはDelphiを参照のこと。
GNU PascalコンパイラはGCCのフロントエンドとして動くPascalコンパイラ。Linuxユーザーはこれを導入しましょう。
GNUツールチェインも参照のこと。
たとえば、変数の定義と代入は以下のようになる(整数型)。
var i : Integer; begin i := 10; end;
文字列は、string[50]のように[]を使えば短い文字列型となり、明確に指定したサイズ以上の文字列は代入できなくなる。単にstringとした時は長い文字列型となり、任意の大きさの文字列を代入できる。
var str : string; begin str := 'Hoge'; end;
配列の宣言は以下のようになる。
x : array[1..10] of Integer;
これで、以下のようなfor文による繰り返しが記述できる。
for i := 1 to 10 do begin x[i] := 0; end;
if文を書く際の注意点は、等しい場合を「=」で記述し、等しくない場合は「<>」で記述する点。代入は「:=」で記述する。1行の場合のみbegin~endを省略できる。
if x = 0 then y := 1; else y := 2;
レコード型は、複数の変数をまとめたもの。C言語でいう構造体。
type THoge = record Name : string; Age : Integer; end; var HogeA: THoge;
これで、以下のように使う。
HogeA : THoge; HogeA.Name := 'Hoge'; HogeA.Age := 20;
ソースコードは、interfaceにインターフェース部(定義と宣言のためで、コードは記述できない)、implementationに実装部(コードを記述する)、initializationに初期化部(起動時に実行される)、finalizationに終了処理部(終了時に実行される)を記述する。
インターフェース部では、usesは使うユニットを指定する。typeは型定義を記述する。varはユニットの中の変数の定義を行う。
また関数はfunction、手続きはprocedureに記述する。関数名に続いて引数がある時は()の中に引数名とデータ型を記述する。Resultは関数の場合のみ、返り値として使用する特別な変数。
function FuncAdd100(x : Integer) : Integer; begin Result := x + 100; end;
以下は関数を使用する例。IntToStr()は整数値を文字列型(string)に変換する関数。
function ReturnStr(x : Integer) : string; var str : string; begin str := IntToStr(x); Result := str; end;
手続きを使う場合、Resultは使用できないが、引数にvarを付ければ、ポインタや参照型と同じように引数をそのまま編集できる。なので、
procedure ProcAdd100(x : Integer; var y : Integer); begin y := x + 100; end;
のようにできる。
(「Borland Delphi 7 オフィシャルコースウェア 基礎編」を参考に執筆しました。)
2023.10.31
2024.08.25編集
さまざまなところで、「Pascalはハッカーにとって無用の賜物である」などと言われる通り、Pascalの構造化プログラミングは「本当のハッカー」から批判の的でした。
また、Pascalは旧来の言語であり、C言語のほうが主流になってきたため、「C言語は使う言語」「Pascalは大学で学ぶだけの言語」と言われました。
ですが、昔のソフトウェアなんかは、けっこうPascalで書かれていたソフトが多かったです。
たとえば、Apple社のOSである初期のLisaやクラシカルなMacintoshの開発環境は、Pascalが使われていたことで有名です。また、Xによれば初期のWindowsでもPascalは使われていたそうです。
ほかにも、Pascalで書かれていた巨大ソフトとしてTeXが有名です。また、初期のAdobe PhotoshopはMacintoshの上でObject Pascalで書かれていたそうです。
Pascalは今でこそ古い言語のひとつですが、昔は特に教育用途では大学の標準的言語であり、少し年配の方は大学で(たぶんC言語よりも先に)Pascalを学んだ経験がある人が多いと思います。
2024.08.25
Pascalのよいサイトとして以下のページがあります。
この記事を書いている@ht_dekoさん、はっきり言って、本当にスゴイ。こんなに詳しいPascalエンジニアになりたいものです。
2024.08.25