0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

<6> 構造化型の概要と配列型 (標準 Pascal 範囲内での Delphi 入門)〔裏〕

Last updated at Posted at 2021-02-16

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:

(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)

索引

:ramen: [ ← 5. 列挙型と部分範囲型〔裏〕 ] [ ↑ 目次へ ] [ → 7. レコード型〔裏〕 ]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?