Development

ITpro  > Development
Development

Turbo Delphiで始めるWindowsプログラミング

日経ソフトウエア

フリーのTurbo Delphiで始めるWindowsプログラミング

Delphi言語はコンパイルが速くて覚えやすい

 それでは実際の開発に,と行きたいところだが,その前にTurbo Delphiの言語について,簡単に解説させてほしい。というのも,Delphi言語には,広く利用されているC言語やJavaと比べて,少し異なる点があるからだ。

 筆者は,皆さんがDelphiのコードに触れる前に,この違いを知っていてほしいと思う。Delphi言語の特徴と良さを理解してほしいからだ。

 筆者が考えるDelphi言語の特徴はずばり以下の三つである。

特徴(1) コンパイルがとても速い
特徴(2) 学習しやすい
特徴(3) 再利用しやすい

である。ほかにプロパティを使用した高度なカプセル化や多態性の確保なども特徴であるが,これらは(2)や(3)に含めることができるだろう。

 特徴(1)の「コンパイルがとてもに速い」であるが,本当に速い。「え?ホントにコンパイルしたの?」と思ってしまうほどである。筆者の環境(CPU:Pentium D 2.66GHz,メモリー:1Gバイト)で,総行数5万行程度のプロジェクトをすべてビルドしても,3秒程度だ。Javaなどで同規模のプロジェクトを扱った経験がある読者なら「異常に速い」と思えるだろう。

 この「コンパイルが速い」ということは「考えをコードに落としてすぐ試せる」ということを示している。これは,スクリプティング言語の便利さを例に出すまでもなく,快適な開発のために重要なことである。

 Delphi言語のコンパイルが高速なのには,明確な理由がある。コンパイラがソースコードを一度読み込むだけで(1パスで)コンパイルできるからだ。これはDelphi言語の文法の制約とも関係するため,少し詳しく書く。

 一般に,コンパイラがプログラムを実行可能な形式に変換していく過程には何段階かある。Delphi言語のコンパイラは,1回ファイルを最初から順に読むだけで,コンパイルに必要なすべての情報を得ることができる。一般的な処理系では,2パスだったりマルチパスだったりする(ただしC言語には1パスでコンパイルできるようにする方法がある)。

 勘のいい読者は,ここで先に書いた制約が何かを気づくかもしれない。コンパイラがソースコードを一度読み込むだけで,コンパイルできるということには,クラスや関数を定義するときに,ソースコード中で,その定義をする順番が関係してくる。

 例を示そう。まず悪い例である。Delphi以外の処理系では必ずしもエラーにならない。

procedure A; // 処理Aの定義(返り値はない)
begin
  B;  // Bを呼び出す。ここでエラーになる
end;

procedure B; // 処理Bの定義(返り値はない)
begin
  ShowMessage('B Called');  // 「B Called」と表示する処理
end;

 procedure Aをコンパイラが読み込んでいるときに,コンパイラは「B;」の行で「その処理は知らない」と思ってエラーになるのである。

 これは,以下のように書くことで解決できる。

procedure B;
begin
  ShowMessage('B Called');
end;

procedure A;
begin
  B;
end;

 また,「フォワード宣言」という方法を使って解決するこもできる。

procedure B; forward; // フォワード宣言

procedure A;
begin
  B;
end;

procedure B;
begin
  ShowMessage('B Called');
end;

 このように,Delphi言語では,ソースコードの1地点から見て,まだ定義が完了していない関数,クラス,構造体などを呼ぶことができない。2パス以上のコンパイラなら,1回目にファイルを読んだとき,定義済みのものすべての情報がわかるので,2回目にファイルを読んだときに未定義な関数は存在しないことになる。

 だが,forwardと書いたり,クラスの場合もクラスであることを示すコード(TFoo = class;)と書くだけで,ファイルを2回を読む必要がなくなる。これでコンパイルが速くなるならば“書いて速いほうがイイ”と思うのは筆者だけではないはずだ。

 さて,特徴(2)の「習得が容易」である。これはすでに述べたようにDelphi言語が,教育用言語として開発されたPascalをベースにしていることによる。なんといってもプログラミング教育のための言語である。勉強しにくいわけがない。筆者も(もうずいぶん前のことになるが)実際学びやすかった。

 また,Delphi言語に導入されているオブジェクト指向は,多重継承やテンプレートなどの便利だが複雑になりがちな機能を思い切って省いた結果,たいへんシンプルでわかりやすいものになった。筆者は“洗練されていて,シンプルだ”と感じている。

 特徴(3)の「コードの再利用性が高い」も,筆者が気に入っている点だ。実際,筆者はこの恩恵を受け続けていて,Delphi 2.0のころに書いたコードをいまだに現役で使用している。これはDelphiが備えるコンポーネントという仕組みによるところが大きい。

 コンポーネントは,一般的にはソフトウエアの一つの機能を実装した単位である。Delphiでも同じ意味でコンポーネントという言葉を使う。例えば,TButtonというコンポーネントは,Windowsのボタンの機能を実現できる。VBなどと同様にDelphiでも,アプリケーション開発のときにドラッグ&ドロップで画面に配置すると,それだけでボタンが機能する。

 Delphiでは,世界各国の人々が様々なコンポーネントを開発し,公開している。これらを利用することで,高機能なアプリケーションを素早く開発できる。

 だが,ここで残念なお知らせがある。実は,Turbo Delphi Explorerはカスタム・コンポーネントのインストールをサポートしていない。この最も重要な部分の一つが省かれてしまっているのである。無償版の戦略なのだろうが,これはたいへん残念である。とはいえ,ビジュアルな設計をあきらめ,コンポーネントをコードで生成してやれば,インストールしなくても使用可能である。

 以上がDelphi言語の特徴である。もう一度まとめておくと,

特徴(1) コンパイルがとても速い
特徴(2) 学習しやすい
特徴(3) 再利用しやすい

である。

 さて,いよいよ次章でサンプル・プログラムの作成に入る。本来なら文法を簡単に紹介してからサンプルの開発と行きたいと ころである。とはいえ,いかにDelphi言語がシンプルであると言っても,さすがにページが足りない。本格的な文法の解説はヘルプや入門書に任せ,サンプル制作に必要なコードについては,その都度,説明していくこととしたい。

 [2006/12/08]

この記事に対する読者コメント

コメントに関する諸注意 コメント投稿 コメント一覧