データ型について(Delphi)
データ型、変数、定数:インデックス への移動
このトピックでは、Delphi データ型の概要を説明します。
型とは、基本的にはデータの種類の名前です。変数を宣言するときは、その変数の型を指定する必要があります。この型によって、変数に格納できる値の集合と、変数に対して実行できる操作が決まります。あらゆる式は特定の型のデータを返します。関数も同様です。ほとんどの関数や手続きには、特定の型のパラメータが必要です。
Delphi 言語は '厳密に型指定される' 言語です。つまり、さまざまなデータ型が区別されるため、ある型を別の型で代用できるとは限りません。 これは、通常は利点になります。コンパイラがデータをインテリジェントに取り扱い、コードを徹底的に検証できるようになるため、診断が難しい実行時エラーを防止できるからです。 ただし、より柔軟な取り扱いが必要な場合のために、厳密な型指定を回避するメカニズムが存在します。 たとえば、型キャスト、ポインタ、バリアント、レコードの可変部分、変数の絶対アドレス指定などです。
Delphi データ型の分類方法は、次のように、いくつかあります。
- 一部の型は定義済み(組み込み)であり、宣言しなくても自動的にコンパイラに認識されます。この言語リファレンスで説明している型は、ほとんどすべて定義済みです。それ以外の型は宣言によって作成されます。これには、ユーザー定義型や、製品ライブラリで定義された型などが含まれます。
- 型は、基本型と汎用型に分類できます。基本型の範囲や形式は、基礎となる CPU やオペレーティング システムに関係なく、Delphi 言語のどの処理系でも同じです。汎用型の範囲や形式は、プラットフォーム固有であり、処理系によって異なる可能性があります。定義済みの型のほとんどは基本型ですが、整数型、文字型、文字列型、ポインタ型の中には、汎用型のものが少しあります。汎用型はパフォーマンスや移植性が最適化されているため、できるだけ汎用型を使用するとよいでしょう。ただし、処理系によって汎用型の格納形式が異なると、互換性の問題が生じるおそれがあります。たとえば、型やバージョンの情報を含めずに、生のバイナリ データとしてコンテンツをファイルにストリーミングする場合などです。
- 型は、単純型、文字列型、構造化型、ポインタ型、手続き型、バリアント型に分類できます。さらに、型識別子自体も、ある特殊な "型" に属していると見なすことができます。一部の関数(High、Low、SizeOf など)にパラメータとして渡すことができるからです。
- 型は、パラメータ化型(ジェネリック型)にすることもできます。型がジェネリック型になれるのは、後で決定されるさまざまな型に合わせて動作する構造や手続きの基礎となるからです。ジェネリック型(パラメータ化型)の詳細については、「ジェネリックス:インデックス」を参照してください。
Delphi データ型の分類を以下に示します。
- 単純型
- 順序
- 整数
- 文字
- ブーリアン
- 列挙
- 部分範囲
- 実数
- 順序
- 文字列
- 構造
- 集合
- 配列
- レコード
- ファイル
- クラス
- クラス参照
- インターフェイス
- ポインタ
- 手続き
- バリアント
- 型識別子
標準関数 SizeOf は、すべての変数や型識別子に対して実行することができます。この関数は、指定された型のデータを格納するために必要なメモリ量(バイト単位)を表す整数を返します。たとえば、次のようになります。
- 32 ビット プラットフォームと 64 ビット Windows では、LongInt 型の変数は 4 バイトのメモリを使用するので、
SizeOf(LongInt)
は 4 を返します。 - 64 ビット iOS では、LongInt 型の変数は 8 バイトのメモリを使用するので、
SizeOf(LongInt)
は 8 を返します。
型宣言については、以下のトピックで説明しています。 型宣言に一般的な情報については、「データ型、変数、定数:インデックス(Delphi)」を参照してください。