HN 日本語サマリー

← 一覧へ戻る
プログラミング

プログラマーのためのモダンObject Pascal入門

Modern Object Pascal Introduction for Programmers (castle-engine.io)

204 pointsby birdculture90 コメント

要約

この記事は、クラス、ユニット、ジェネリクス、インターフェイスなどのモダンな機能を備えたObject Pascal言語を紹介する書籍の抜粋です。プログラミング経験者を対象に、基本的な構文からクラス、例外処理、ランタイムライブラリ、高度な機能までを網羅しています。Free Pascal Compiler (FPC) やLazarus、Delphiといった開発環境についても触れています。

全文翻訳

プログラマーのためのモダンObject Pascal入門 目次 1. なぜこの本なのか 2. 基本 2.1. "Hello world"プログラム 2.2. コンパイラとFPCの"構文モード" 2.3. 関数、プロシージャ、プリミティブ型 2.4. テスト(if) 2.5. 論理演算子、関係演算子、ビット演算子 2.6. 単一の式を複数の値でテストする(case) 2.7. 列挙型と順序型、セット、固定長配列 2.8. ループ(for, while, repeat, for .. in) 2.9. 出力、ロギング 2.10. 文字列への変換 3. ユニット 3.1. 概要 3.2. ユニットとプログラムに使用される拡張機能 3.3. 初期化と最終化 3.4. 相互にユニットを使用する 3.5. ユニット名による識別子の修飾 3.6. 他のユニットから1つのユニットの識別子を公開する 4. クラス 4.1. 基本 4.2. 継承、仮想メソッド、override、reintroduce 4.3. クラスとクラスインスタンス、コンストラクタ、デストラクタ 4.4. クラスのテスト(is)、型キャスト(as, TMyClass(X)) 4.5. プロパティ 4.5.1. プロパティのシリアライゼーション 4.6. 例外 - クイック例 4.7. 可視性指定子 4.8. デフォルトの祖先 4.9. Self 4.10. 継承されたメソッドの呼び出し 4.11. 仮想メソッド、override、reintroduce 5. クラスの解放 5.1. クラスインスタンスを解放することを忘れないでください 5.2. 解放方法 5.3. 手動解放と自動解放 5.4. Destroyと呼ばれる仮想デストラクタ 5.5. 解放通知 5.6. 解放通知オブザーバー(Castle Game Engine) 6. 例外 6.1. 概要 6.2. 例外の発生 6.3. 例外のキャッチ 6.4. Finally(例外が発生したかどうかに関わらず処理を実行) 6.5. 様々なライブラリによる例外の表示方法 7. ランタイムライブラリ 7.1. ストリームを使用した入出力 7.2. ジェネリクスを使用したコンテナ(リスト、辞書) 7.3. クローニング: TPersistent.Assign 8. 様々な言語機能 8.1. ローカル(ネストされた)ルーチン 8.2. コールバック(別名イベント、別名関数ポインタ、別名プロシージャ変数) 8.3. 無名関数 8.4. ジェネリクス 8.5. オーバーロード 8.6. プリプロセッサ 8.7. レコード 8.8. バリアントレコードと関連概念 8.8.1. バリアントレコード 8.8.2. バリアント型 8.8.3. 配列const内のTVarRec 8.9. 旧式オブジェクト 8.10. ポインタ 8.11. 演算子オーバーロード 9. 高度なクラス機能 9.1. Privateとstrict private 9.2. クラス内およびネストされたクラス内のその他の機能 9.3. クラスメソッド 9.4. クラス参照 9.5. 静的クラスメソッド 9.6. クラスプロパティと変数 9.7. クラスヘルパー 9.8. コンストラクタとデストラクタは仮想であるべきか? 9.8.1. デストラクタ 9.8.2. コンストラクタ 9.9. コンストラクタ内の例外 10. インターフェイス 10.1. インターフェイスGUID 10.2. インターフェイスの型キャスト 10.3. CORBAおよびCOMのインターフェイス型 10.4. 参照カウント(COM)インターフェイス 10.5. 参照カウントが無効なCOMインターフェイスの使用 11. このドキュメントについて 1. なぜこの本なのか 私はモダンなObject Pascalについて説明したかったのです。クラス、ユニット、ジェネリクス、インターフェイス、そしてあなたが期待する他のモダンな機能を持つプログラミング言語です。私は、基本的な機能と高度な機能の両方が、どのように一貫した全体として結びついているかを示したかったのです。また、この本が実用的で簡潔であることを仲間の開発者に示したかったのです。そのため、私はあなたが既にいくつかのプログラミング経験を持っていると仮定し、「変数を宣言する方法」のようなことについて話すことができ、「変数とは何か、その目的は何なのか」といった長い説明を避けることができます。基本をカバーする際には、簡単な説明をしてから先に進みます。例えば、変数は値を保持するコンテナです。コンテナには名前があります。それが保持する値は時間とともに変化する可能性があります。 私はモダンObject Pascalの「モダン」という言葉を強調します。それは、Pascalが大きく進化しており、多くの人が昔学校で学んだTurbo Pascalなどとはかなり異なるからです。機能的には、モダンPascalはC++、Java、C#に非常に似ています。あなたが期待するすべてのモダンな機能(クラス、ユニット、インターフェイス、ジェネリクスなど)を持っています。高速なネイティブコードにコンパイルされます。非常に型安全です。ハイレベルですが、必要であればローレベルにも対応できます。Pascalを使用する理由についてのさらなる考察は、ここをご覧ください。 また、ツールやライブラリの活発なエコシステムもあります。いくつか例を挙げると:Pascalには、Free Pascal Compiler (http://freepascal.org/) という、優れた、ポータブルでオープンソースのコンパイラがあります。そして、Lazarus (http://lazarus.freepascal.org/) という、それに付随するIDE(エディタ、デバッガ、ビジュアルコンポーネントライブラリ、フォームデザイナ)があります。また、Embarcaderoの商用コンパイラおよびIDEであるDelphi (https://www.embarcadero.com/products/Delphi) もあります。多くのライブラリ(FPCとDelphiの両方)が利用可能です。https://github.com/Fr0sT-Brutal/awesome-pascal を参照してください。VS Codeのような既存のエディタもサポートしています。https://castle-engine.io/vscode を参照してください。 私自身は、Castle Game Engine (https://castle-engine.io/) の作成者です。これは、Windows、Linux、FreeBSD、macOS、Android、iOS、Nintendo Switch、WebGLなど、多くのプラットフォームでゲームを作成するためにモダンPascalを使用するオープンソースの3Dおよび2Dゲームエンジンです。 2. 基本 2.1. "Hello world"プログラム // すべてのモダンFPCソースでこの行を使用してください。 {$ifdef FPC} {$mode objfpc} {$H+} {$J-} {$endif} // 以下はWindowsでコンソールプログラムを実行するために必要です。 // そうしないと(Delphiの場合)、デフォルトはコンソールなしのGUIプログラムになります。 {$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif} program MyProgram; begin WriteLn('Hello world!'); end. これはコンパイルして実行できる完全なプログラムです。コマンドラインFPCを使用している場合は、新しいファイルmyprogram.dprを作成し、fpc myprogram.dprを実行します。Lazarusを使用している場合は、新しいプロジェクト(メニュー "Project → New Project → Simple Program")を作成します。このプログラムソースコードを貼り付けます。メニュー項目 "Run → Compile"(またはショートカットCtrl + F9)を使用してコンパイルします。Delphiを使用している場合も、新しいプロジェクト(メニュー "File → New → Console Application - Delphi")を作成します。このプログラムソースコードを貼り付けます。メニュー項目 "Project → Compile"(またはショートカットCtrl + F9)を使用してコンパイルします。 これはコマンドラインプログラムなので、コンパイルされた実行可能ファイルをコマンドラインから実行するだけです。 注意 LazarusまたはDelphi IDEの "Run" メニュー項目(両方のIDEでショートカットF9)を使用して実行することもできます。その場合、コンソールが表示されてすぐに消えることに注意してください。それを回避する最も簡単な方法は、アプリケーションの最後にReadln(Enterキーを待つ)を追加することです。 この記事の残りの部分はObject Pascal言語について説明しているので、コマンドラインのものよりも派手なものは期待しないでください。クールなものを見たい場合は、Lazarus("Project → New Project → Application")またはDelphi("File → New → Multi-Device Application")で新しいGUIプロジェクトを作成してください。これで、快適なビジュアルコンポーネントライブラリを使用した、クロスプラットフォームでネイティブなルックアンドフィールのGUIアプリケーションが完成します。 Pascalコンパイラには、ネットワーキング、GUI、データベース、ファイルフォーマット(XML、JSON、画像など)、スレッディングなど、必要なものがすべて揃った多くの標準ユニットが付属しています。私はすでに私のクールなCastle Game Engineについて言及しました:) 2.2. コンパイラとFPCの"構文モード" この本、すべてのテキストとPascalの例は、2つのモダンなPascalコンパイラをサポートするように書かれています。 Free Pascal Compiler (FPC)、オープンソースのPascalコンパイラで、Lazarus IDEでも使用されています。 Delphi、Embarcaderoの商用Pascalコンパイラ。 この本では、両方のコンパイラを完全にサポートしています。 話を少し複雑にするために、FPCコンパイラには複数の"構文モード"があります。この本では、FPC開発者によって推奨されており、LazarusまたはCastle Game Engineを使用して作成された新しいPascalプロジェクトのデフォルトであるObjFpc構文モードを示すことにしました。これは、Delphiによって実装されたPascal言語と最も互換性のあるDelphi構文モードとは少し異なります。私たちはここで詳細な比較を書きました。しかし、Pascalを学び始めたばかりのあなたは、今これらの違いについて読みたくないでしょう! コンパイラ間、およびFPC ObjFpcモードとDelphiモード間の違いはわずかです。例の中に{$ifdef FPC} ... {$endif} の句があることに注意してください。これにより、コードはFPC ObjFpcモードとDelphiの両方で有効になります。これらのケースの一部では{$ifdef FPC_OBJFPC} ... {$endif} を使用する方が正確ですが、さらに複雑に見えます。もしあなたのpr