Delphi 2009にバージョンアップする意味はあるか?
Delphi 2009で追加された3つの便利な機能をコードで検証
Delphi 2007と比べて、Delphi 2009では大きく3つの注目すべき要素が追加された。開発するに当たって何が便利になったのか。どこが使いやすくなったのか、見ていこう。
2008年8月28日に「Delphi 2009」の出荷が開始された。これは、WindowsアプリケーションのRAD(Rapid Application Development)として定評のある「Delphi」の最新バージョンとなる。Delphiは、1995年に発売された「Delphi 1.0」から数えて13年目という長い歴史を持つ開発環境である。近年では、Windowsアプリケーションの開発はもとよりWebサービスの構築まで可能になるなど、さまざまな拡張を経て発展してきた。
Delphi 2009は提供元がエンバカデロ・テクノロジーズとなってから初めての製品となる。早速、生まれ変わったDelphi 2009を見ていこう。
大きなポイントはUnicode対応
Delphi 2009を起動した際の画面は「Delphi 2007」とほとんど変わらない(画面1)。
実際にコードを編集する画面やフォームデザイナも変わっていないように見える(画面2、画面3)。今まで通りコードエディタがあり、オブジェクトインスペクタ、プロジェクトマネージャなどが表示されている。一見すると大したバージョンアップとは思えないDelphi 2009 だが、Delphi 2007と比べさまざまな変更が加えられている。
Delphi 2009では、以前からアナウンスされていた通り、全面的にUnicodeに対応した。今回のUnicode化は今までのように「文字列処理などの上にUnicodeが乗る」のではなく、「文字列型自体が文字コードを認識する」という大きな変更の上に成り立っている。文字列は自分がUnicode型なのかシフトJIS型なのか認識しているのが前提となる。
では、このUnicode化に代表される文字列型の変更でどのような変化があったのか。まずは、リスト1を見ていただきたい。日本語などの非ANSI文字列を変数や関数名に使用できるようになった(ただし、このような日本語変数を使う機会はめったにないと思うが)。一目瞭然だが、見た目上最もインパクトがある変化だ。
リスト1
では、Unicode化でDelphi言語(Delphi 6までは「Object Pascal」と呼んでいた)の文字列型の動作はどのように変わったのか?
文字列型はどのように変更されたのか
まず、デフォルトの文字列型「String」は、新たに導入された文字列型「UnicodeString」となった。つまり、リスト1の「テスト」は「UnicodeString」型となる。
では、UnicodeStringとはどのような型かというと「文字コードを16ビットで表す型」(※注1)である。表1にDelphi 2009の文字列型をまとめたので、まず、そちらをご覧いただきたい。
※注1.基本多言語面(BMP:Basic Multilingual Plane)以外の文字列はサロゲートペアとして表現する。
| 文字列型名 | 特徴 | 用途 |
|---|---|---|
| ShortString | 8ビットANSI文字列 | 下位互換用 |
| AnsiString | 8ビットANSI文字列 | ASCIIやシフトJISなど |
| WideString | Unicode文字列 | COM用 |
| UnicodeString | Unicode文字列 | Unicode用文字列(デフォルト) |
| RawByteString | コードページの変換がない | 各文字列のままの引数が欲しいときなど |
慣れ親しんできた「AnsiString」は今まで通り使える。しかし、このAnsiStringには大きな拡張が加えられた。これについては後述する。
そして、「WideString」はCOM用とされた。Delphi 2007までは、WideStringがUnicodeを扱う唯一の型であった。しかし、Delphi 2009ではWideStringよりもUnicodeStringが推奨されている。これは、WideStringは互換性のため残されてはいるものの、より効率の良い(※注2)UnicodeStringに移行していくためだと考えられる。
※注2.WideStringは参照カウントで管理されておらず、扱えるVCL(Visual Component Library)関数も少ない。これに対してUnicodeStringは参照カウントで管理され、扱える関数も多い(デフォルトの文字列となったため)。
最後に「RawByteString」だが、これは文字列の代入互換性とかかわってくる。先ほど後述するとしたAnsiStringの拡張とともに紹介したい。
AnsiStringではコードページを指定可能に
AnsiStringでは、コードページを指定できるようになった。まずは、リスト2をご覧いただきたい。(2)のtype節で新たな文字列型を定義している。それぞれシフトJISのコードページである「932」と、EUC-JPのコードページである「20932」を指定している。さまざまなコードページをAnsiString上から利用できるようになったことがお分かりいただけるだろう。
リスト2
リスト2を実行した結果が画面4である。これを見ると、表示された文字コードがシフトJISとEUCで異なっていることが分かる。
しかも、これらAnsiStringの派生型は相互に代入互換性がある。試しに以下のリスト3を実行してみると、画面5のようになる。
リスト3
このように、コードページが違う文字列は自動的に変換されるようになった。これは非常に便利である。筆者は個人的に文字コード変換ライブラリを作っていたが、今後はDelphi標準の文字コード変換システムを利用できるようになった。
ちなみに、リスト2の「ShowCode」では、引数の型にRawByteStringを使用した。なぜRawByteStringを使ったか説明しよう。先ほど「コードページの違う文字列は自動的に変換される」と述べた。しかし、RawByteStringではそのような変換は行われない。実行結果が示している通りだ。つまり、RawByteStringはコードページの変換を伴わない文字列型なのだ。この特徴は、今回例に挙げたようなコードページが重要なプログラムで役に立つだろう。
例えば、以下のリスト4のように引数の型をUnicodeStringに変えると、画面6のようになる。自動的にUnicodeString型に変換され、まったく同じコードが出力されているのが分かるだろう。
リスト4
これらのコードページなどの処理が加わったことで、新たなクラスも追加された。その1つが「TEncodingクラス」である。
新たに追加されたTEncodingクラスを試す
TEncodingクラスでは、エンコードを表すプロパティや文字コードを変換するメソッドが定義されている。TEncodingのヘルプには「TStringListクラスはオーバーロードコンストラクタを含むようになり、開発者はTStringListのインスタンスに追加する文字列のエンコードを定義できるようになりました」と書かれている。
早速、これを試すために以下のリスト5を記述した。
リスト5
実行すると「テスト」という文字列がEUC-JPで保存される。ちなみに、第2引数に何も指定しない場合はTEncoding.Defaultを指定したことになり、シフトJISで保存される。
このように、既存クラスにも文字コードに応じた新たなメソッドが追加されている。今回のUnicodeサポートは、Delphiの文字に関する扱いを一挙に変えた。Delphi 2009は、今後のDelphiのベースとなる重要なバージョンとなるだろう。
Delphi言語に新しい構造を持ち込んだ「ジェネリクス」
Delphi 2009のもう1つのフィーチャーとして、「ジェネリクスのサポート」が挙げられる。個人的にはUnicode対応よりも、使いでがあると感じている機能だ。これは、Delphi言語を拡張する形で導入された(※注3)。
注3.言語的観点からいえば、Unicode対応は新たな文字列型の導入にすぎない。しかし、ジェネリクスは言語に新しい構造を持ち込んだという点ではUnicode対応よりも重要な変更だ。
「ジェネリクス」とはJavaなどの言語ではおなじみの機能だ。簡単に説明すると「さまざまな型に対応するクラスを作成できる」機能である。C++を触ったことがある人なら、「テンプレートクラスとほぼ同じ」と言えば分かるだろうか。
百聞は一見にしかず。リスト6をご覧いただききたい。(1)を見ると、見慣れない「<T>」という記述がある。これがジェネリクスだ。この<T>というのは仮定的な型である。このように記述すると、まるでTという型があるかのように働く。ここでは、(2)~(4)の各宣言でTという型を使っている。
リスト6
ジェネリクスを使うと、さまざまな型への対応など、今まで苦労していたことが簡単に実装できる。例えば、筆者はクイックソートやPerlのハッシュのような機能を持ったクラスを作っていた。ハッシュクラスの場合、ほぼ同じ処理を行っているのにもかかわらず、THashInteger、THashStringと2つのクラスを用意しなければならなかった。だがDelphi 2009から導入されたジェネリクスを用いれば、これらのクラスを1つのコードで処理できる。筆者は、非常に強力で使いでがある機能だと感じた。
匿名関数のサポート
さらにもう1つ、関数についても大きな変化があった。匿名関数(AnonymousMethod)のサポートである。匿名関数とは、その名の通り名前のない関数だ。これは無名関数ともいい、スクリプト言語ではおなじみの機能だろう。
まずはリスト7をご覧いただききたい。
リスト7
(1)を見ると、今までの関数型の宣言に似た形で匿名関数型が定義されている。関数型の宣言との違いは「reference to」の存在だ。匿名関数型の変数には、必要なところで関数を定義できる。それが(2)から始まるブロックである。すぐに関数を定義できるので、プロトタイプの作成に使えそうだ。ただ、Delphi言語は関数内で再帰的に関数を定義できるため、使いどころが難しいかもしれない(※注4)。
注4.関数内関数を匿名関数型の変数に代入することもできる。
ほかにもさまざまな追加点がある
今まで見てきた3つの要素がDelphi 2009で導入された新しい機能である。ほかにも、VCLにリボン型コントロールが追加されたり、新たなクラスコンポーネントが定義されたり、といった点が新しくなっている。一方、IDE(統合開発環境)では、トランスレーションツールスイートが付属したり、プロジェクトマネージャが高機能化するなど、使い勝手の点でもさまざま改善が行われている。これは筆者の体感(※注5)だが、Delphi 2007よりもさらに起動が速くなったように感じた。
※注5.筆者の環境はWindows Vista。Windows VistaではReadyBoostなどがあるため正確な計測とはいえない。あくまで肌感覚である。
では、今挙げたIDEの機能からトランスレーションツールとプロジェクトマネージャについて簡単に触れておこう。
トランスレーションエディタ
トランスレーションツールスイートは、今回のUnicode対応で最も恩恵を受けたツールといえる。画面7、画面8はリソースDLLを作成し、各国語用文字列リソースを作っているところである。ここで紹介したトランスレーションエディタなどのツールを使えば各国語用リソースをDelphi上で一元管理できるため、アプリケーションの国際化も今までより容易になると思われる。
プロジェクトマネージャ
プロジェクトマネージャにも幾つかの改良がなされた。最も大きい変更点はプロジェクトマネージャ上でビルド設定を変更できるようになったことだ。画面9を見れば分かる通り、プロジェクトの下に「ビルド設定」というツリーが表示されている。ここで簡単にデバッグやリリースを切り替えることができる。
ほかにも、モデルビューでモデルを作成すればモデルサポート用のツリーが現れる。多くのプロジェクトをプロジェクトグループとして管理できるのは今まで通りだが、さらにビルド設定やモデリングなどをサポートしたことでプロジェクト管理が一元化され、プロジェクトの全体像を把握しやすくなった。これによって以前よりも効率的にプロジェクトを管理できるようになると思われる。
バージョンアップで開発者に掛かる負担は軽くなった
Delphi 2009では、Unicodeやジェネリクスに対応するなど、現在のプログラミングのトレンドに応えるバージョンアップがなされた。これらに付随した新VCLコントロールやIDEの機能追加、改良も見逃せない。ジェネリクスを使えば、コード記述の負荷を減らすことも、よりエレガントなコードとすることもできる。IDEの新機能を使えばコード以外の負荷の軽減やサポートを期待できる。また、Unicodeへの対応により、今までよりも簡単に国際化アプリケーションを構築できるようになった。
このようにさまざまな機能が追加されたDelphi2009を実際に使ってみて欲しい。きっと新たな地平が見えてくるはずだ。いまだにDelphi 7を使っている方も多いかと思うが、より使いやすく、より効率を上げるためにDelphi 2009にバージョンアップするというのも1つの手ではないだろうか。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
「Excel至上主義」の終わらせ方 丸2日の手作業地獄から情シスと現場を救うには
-
2
取手市がVDIと決別した理由 更改費用「4倍超」を約1.7倍に圧縮
-
3
「Microsoft 365のセキュリティ運用」に関するアンケート
-
4
急増する「AIはこう言ってる」マン 判断を狂わせる「AI忖度」を防ぐには?
-
5
221人調査で分かった「情シス最大のストレス」は?
-
6
「Salesforceのテスト自動化ツール」に関するアンケート
-
7
IT製品の導入に関するアンケート「サーバ&ストレージ」編
-
8
「データストレージの活用方法」に関するアンケート
-
9
「AI時代の統合基盤・エンタープライズAI管理」に関するアンケート
-
10
自宅のWi-Fiが「遅い」「途切れる」本当の原因は? Dellが推奨する鉄則
ホワイトペーパーランキング PR
-
1
年収2000万「クラウドセキュリティのプロ」になれる資格とは
-
2
セキュリティソフトをすり抜ける標的型攻撃メール、不審メールの見破り方とは?
-
3
Windows Updateの通信集中で回線が逼迫、ネットワーク刷新事例に学ぶ解決策
-
4
財務を戦略的組織へ進化させるAI活用術、4つの主要な障壁と解消方法
-
5
「NAS」「SAN」「DAS」は何が違う? いまさら聞けないストレージの基礎
-
6
“あのファイル転送”で暗躍するノーウェアランサム
-
7
標的型攻撃メールを見破るには? サンプル文面を例に傾向を解説
-
8
商用利用の安全性を確保し大量のコンテンツを高速で生成する、AI活用の秘訣
-
9
マンガで解説、1日で生成AI環境を構築できるワークショップの中身とは?
-
10
Dark AIが台頭する時代の新発想、「より高度なAIで対抗する」具体的方法とは?
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー