6. 構造化型の概要と配列型
構造化型 (Structured Types)
6.1. 配列型 (Arrays)
(6.1.1.) 静的配列 (Static Arrays)
(6.1.2.) 動的配列 (Dynamic Arrays)
・動的配列の添字型
Pascal での配列 (静的配列) の添字型は任意の順序型でしたが、動的配列の添字型は Integer で、添字は 0 から始まります。
(6.1.2.1.) 配列コンストラクタ (Array Constructor)
(6.1.2.2.) 配列定数式 (Array Constant Expression)
(6.1.3.) 静的配列と動的配列の異なる振る舞い
(6.1.4.) 配列定数とグローバル配列変数の初期化
・Default() 関数が実装されたのは...
さらに Delphi 2009 以降には任意の型の「空の値」または「ゼロ値」または「ヌル値」を返すジェネリック型関数 Default() があります。
Default() 関数は、正確には Delphi 2007 for .NET から存在します。つまりジェネリック型のサポートも Delphi 2007 for .NET からです (参考)。
・Default() 関数がドキュメントに書かれていないのは?
default プロパティや default 格納指定子があって、さらに Default()
関数まであったらややこしくてしょうがないからかもしれませんね。
(6.1.5.) 動的配列の割り当て解除
(6.2.1.) 文字列型の何が特殊なのか
(6.2.2.) Delphi の文字列型 (String Types)
Delphi 10.3 Rio 以前のモバイルコンパイラでは $ZEROBASEDSTRINGS
コンパイラ指令が ON になっており、配列のインデックスは 0 から始まります。
(6.2.3.) Pascal String (パスカル文字列)
Turbo Pascal や 初代 Delphi の String 型もこのパスカル文字列でした。
Turbo Pascal や Delphi 1 の String は Delphi 2 以降では ShortString として実装されています。
要素 [0] には文字列長が格納されています。文字列は要素 [1] 以降に格納されています。
逆に文字列長を設定する事もできます。
var
s: ShortString;
begin
s := 'hoge';
s[0] := Char(20);
Writeln(Length(s)); // 長さ 20
end;
・短い文字列型と ShortString
厳密には短い文字列と ShortString は異なります。
短い文字列型は Turbo Pascal 3.0 までの文字列型です。直接 String 型を使う事はできず、必ず型として定義する必要がありました。
type
Str80 = string[80];
var
s: str80;
v: string[32];
begin
s := 'Hello, world.';
Writeln(s);
end;
不便な制限ではありますが、string が定義なしで 255 文字まで使えたとすると、4 つの文字列変数を使うだけで 1KB 消費する事になります。Turbo Pascal 3.0 には CP/M-80 版 (Z80) がありましたから、メインメモリが 64KB 以下のシステムで使うにはこういった制限が必要だったのでしょう。
ShortString (に相当する文字列型) は Turbo Pascal 4.0 以降の文字列型です。直接 String 型を使う事ができます。
var
s: string;
begin
s := 'Hello, world.';
Writeln(s);
end;
内部構造はともかく、これは現在の Delphi と同じ使い方ですね。
・Pascal 文字列 (ShortString) の由来
一般的に Pascal String (パスカル文字列) と呼ばれる文字列型は標準 Pascal には存在しません。
この拡張は UCSD Pascal 由来のようです。デフォルトで 80 文字 (String)、最大長が 255 文字 (String[255]) でした。
クラシックな MacOS は Pascal / Object Pascal で書かれており、ここでも Str255 型という Pascal String が使われており、クラシック MacOS が C / C++ でリライト (?) されても 255 文字制限がずーっと残っていたのだとか。
See also:
- UCSD Pascal を触るためだけの UCSD p-System 操作ガイド (Qiita)
- 『Macintosh Programmer’s Workshop Object Pascal 日本語版』を読んでみる (Qiita)
- <3> Macintosh 用 Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) (Qiita)
(6.2.4.) alfa 型
(6.2.5.) NULL 終端文字列
NULL 終端文字列のサポートは Turbo Pascal for Windows 1.0 からのようです。
6.3. パックとアンパック
(6.4) 型の互換性 (Compatible Types) と代入の互換性 (Assignment Compatibility)
(6.4.1) 型の同一性 (Type Identity)
(6.4.2) 型の互換性 (Compatible Types)
(6.4.3) 代入の互換性 (Assignment Compatibility)
(6.4.4) 構造等価 (Structual Equivalence) と 名前等価 (Name Equivalence)
索引
[ ← 5. 列挙型と部分範囲型〔裏〕 ] [ ↑ 目次へ ] [ → 7. レコード型〔裏〕 ]