データの概要
Object Pascal(Delphiのプログラム言語)では、すべてのデータは宣言して使わなければなりません。
データ型はいくつかの基本型と基本型を特殊化したり、組み合わせて作った派生型に別れます。基本型にはつぎの型があります。
派生型の主なものには
整数型
整数型にはつぎの種類があります。
型 | 範囲 | 形式 |
Byte | 0~255 | 符号なし1バイト |
Shortint | -128~127 | 符号付き1バイト |
Word | 0~65535 | 符号なし2バイト |
Smallint | -32768~32767 | 符号付き2バイト |
Integer | -2147483648~2147483647 | 符号付き4バイト |
Longint | -2147483648~2147483647 | 符号付き4バイト |
Cardinal | 0~2147483647 | 符号なし4バイト |
16進数は先頭に$を付けて表します。
例
X := $FFFF;
宣言の例
X: Integer;
実数型
型 | 有効桁数 | バイト数 |
Single | 7-8 | 4 |
Double | 15-16 | 8 |
Extended | 19-20 | 10 |
Comp | 19-20 | 8 |
Currency | 19-20 | 8 |
Comp(計算)型は -9, 223, 372, 036, 854, 775, 808~9, 223, 372, 036, 854, 775, 807(-2~2- 1)の整数値だけを保持できます。
Currency 型は金額の計算に適した固定小数点データ型です。
この他、Real型というのもありますが、下位互換性のためのものなので普通使いません。
上の表で一番よく使われるのはDoubleです。
宣言の例
X: Double;
文字列型
文字と文字列型にはつぎの型があります。
型 | 長さ | 備考 |
Char | 1バイト | ふつうの文字 |
WideChar | 2バイト | UNICODE文字(OLEで使用される) |
String | メモリによる制限のみ | ふつうのPascal文字列。 |
PChar | ポインタと同じ | 実体は文字配列。 |
Stringはふつう十分長い文字列を扱えますが、コンパイラ指令の$H-が指定されていると最大255文字までとなります。PCharはC言語互換の文字列で0(NULL)で文字列の終わりを表します。PChar自身は(C言語と同じく)ポインタなので、文字列本体はどこか別のところに保持する必要があります。
例
var Msg: array[0..127] of Char; // C文字列の本体 pMsg: PChar; ... pMsg := Msg;
String型は長さを宣言で指定することができます。
例
str: Stinrg[10];
論理型
論理型はTrue(真)とFalse(偽)の値を取ります。
宣言の例
F: Boolean;
ポインタ型
ポインタ型には型付きと形無しがあります。型付きの場合はその型の前に^を付けて宣言します。ポインタのいった先の値はポインタ変数の後に^を付けて参照します。
例
var p: ^Integer; ..... i := p^;
形無しのポインタはC言語のvoid*に相当するものです。
例
var p: Pointer;
あるポインタがどこも指さないときの値はnil(C言語のNULLに相当)です。
配列
配列はつぎのように宣言します。[]の中には配列の添え字の最小値と最大値をドットドット(..)で区切って記述します。
例
A: array[0..255] of Byte;
レコード型
レコード型はC言語の構造体に相当します。(共用体については「構造体と共用体」参照)
レコード型はユーザ定義型なのでvar節でなく、type節で宣言します。
例
type TheRecord = record name: string; code: Smallint; end; var data: ThRecord;
集合型
集合型は集合を定義するとき使います。C言語のenumと似ています。「集合の使い方」を参照してください。
例
type TMySet = set of Char; var FSet: TMySet;
クラス
クラスはC++のclassに相当します。つまりレコード型をメソッド宣言が可能なようにし、メンバ保護(外から見える範囲)を定義できるようにしたものです。ただし、C++のclassにない特徴があります。それはC++ではこの保護規定がprivate,protected,publicしかないのに対して、Delphiではpublishedというのがあります。これは設計時にオブジェクトブラウザで編集できるかどうかを指定するものです。published属性を持つメンバはpublicでもあります。
例
type TMyClass = class public procedure Method1(); function Func1(x: Integer): Integer; private FData: Integer; end;
クラスはオブジェクト指向プログラミングの基礎となるものです。クラスをよく理解しないとDelphiのプログラムは作れません。
クラスの概要も参照してください。
定数
定数は値を変更できない基本型の値です。C言語では#define ...に相当します。定数はconst節で宣言します。
例
const PI = 3.14159; PATH: string = 'D:\Temp\Number.txt';
ラベル
ラベルはgoto文でジャンプする先を表す番号です。他の言語ではラベルは宣言しないで使えますが、Pascalでは宣言が必要です。(ただしgoto文はあまり使われません)
例
label 100;
(Delphiでは番号でなく名前もラベルに使えます)