提供: AB開発Wiki
2011年1月15日 (土) 17:41時点におけるEgtra (トーク | 投稿記録)による版 (差し戻し)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索

ActiveBasicは、全てのオブジェクトが型を持ち、変数なども型を持ちますが、静的型付けを採用しています。なお、型を暗黙の内に侵犯可能なため安全でない型付けに留まっています。

型の種類

基本型
コンパイラが直接的に理解できる型のことを言います。詳細は基本型一覧をご覧ください。
クラス
Classステートメントで定義される型です。
構造体
Typeステートメントで定義される型です。
列挙体
Enumステートメントで定義される型です。
インタフェース
Interfaceステートメントで定義される型です。
デリゲート
Delegateステートメントで定義される型です。

値型と参照型

ABでは、基本型及び構造体は値型として扱います。値型はローカル領域またはグローバル領域に配置され、インスタンスの生存期間はスコープレベルで決まります。

クラス型・インタフェース型・列挙型・デリゲート型は参照型です。これらの実体はヒープ領域に確保されます。インスタンスの生存期間はガベージコレクタが管理します。

型の利用

変数

変数の型は、Dimステートメントで指定します。

Dim m As Long

初期化子がある場合、初期化子の式の型から変数の型が決定可能です(型推論)。

Dim x = 2.5 '2.5はDouble型なので、xはDouble型になる。

なお、次のような場合は、初期化子がAs型変換演算子を含んだ式であると解釈されます。

Dim y = x As Single

関数

関数にAddressOf関数を使用すると、その関数に適合する関数へのポインタ型の値が得られます。

Sub f1() : End Sub
Dim pfn = AddressOf (f1) 'f1は*Sub()

引数・戻り値

基本的に変数と同じです。

Function sq(x As Long) As Long
    sq = x * x
End Sub

上の例では、引数xとsqの戻り値がそれぞれLong型と宣言されています。

クラス・構造体・共用体

列挙体

基本型一覧

基本型とはコンパイラが直接的に認識できるデータの種類です。基本型は値を保持するためだけにある型ですので、オブジェクトとしての振る舞いはありません。

整数型

符号有型 範囲 大きさ 符号無型 範囲
SByte -128 〜 127 1バイト Byte 0 〜 256
Integer -32,768 〜 32,767 2バイト Word 0 〜 65,536
Long -2,147,483,648 〜 2,147,483,647 2バイト DWord 0 〜 4,294,967,295
Int64 -9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807 2バイト QWord 0 〜 18446744073709551615

なお、Long/DWordは、Win32及びWin64においてC/C++などのint/unsgiend intに相当する最も自然な大きさの整数型です。特段事情が無ければ普段はLongとDWordを主に使います。

浮動小数点型

x86/x64の仕様により、IEEE 754の単精度・倍精度の形式に対応しています。

Single

概要
単精度浮動小数点型
サイズ
4 byte
値の範囲
3.4E +/- 38 (7 桁)

Double

概要
倍精度浮動小数点型
サイズ
8 byte
値の範囲
1.7E +/- 308 (15 桁)

ブーリアン

Boolean

概要
真偽値を見分けるための型
サイズ
1 byte
値の種類
True or False
※内部表現は True = 1、False = 0 となります。比較演算の戻り値はBoolean型です。

ポインタ型

ABでは、他のBasic言語ではあまり見ることのないポインタ型の扱いに対応しています。メモリ内部を詳細に指定できるポインタ機能、ハードに近いレベルでの利用が可能ですが、使い方によってはバグを引き起こす原因にもなります。必要なときは細心の注意を払って利用していくのが望ましいでしょう。Win32 APIを直接的に利用する場合などに利用を留めておきましょう。

概要
オブジェクトを指し示す型、実態はアドレス値を保持する整数型となっている
サイズ
4 byte (in Win32) or 8 byte (in Win64)

VoidPtr

どのようなオブジェクトを指し示すこともできるポインタ型です。

その他オブジェクトへのポインタ型

型名に*を前置すると、その型を指し示すポインタ型を意味します。例: *Byte, *String

関数へのポインタ型

関数宣言に*を前置すると、その関数を指し示すポインタ型を意味します。例: *Sub(x As Double), *Function(ptr As VoidPtr)

As DWord。詳しくは関数#関数ポインタを参照してください。

Object

Objectは、全てのクラスの基底クラスです。そのため、全てのクラスのインスタンスはObjectへの型変換が可能です。

Class Aima
End Class

Dim a = New Aima
Dim o = a As Object

なお、Objectの実態はSystem.Objectとしてライブラリ内に存在します。メンバなどはObjectクラスを参照してください。

String

Stringは、文字列型です。実態はSystem.Stringとしてライブラリ内に存在します。メンバなどはStringクラスを参照してください。

ライブラリで定義される型

これらの型は全てインクルードファイルの中でTypeDefによって定義されています。

整数型

LONG_PTR

Win32 (x86)の環境ではLong型として認識されます。Win64 (x86-64)の環境ではInt64型として認識されます。ULONG_PTRと共に、ポインタ値を保持できる整数型として使用されます。

ULONG_PTR

Win32 (x86)の環境ではDWord型として認識されます。Win64 (x86-64)の環境ではQWord型として認識されます。

SIZE_T

SIZE_Tはメモリの大きさを表す符号無し整数型で、現在ULONG_PTRからTypeDefされています。

SSIZE_T

SIZE_Tの符号有り版で、現在LONG_PTRからTypeDefされています。

ポインタ型

次の型が互換性のためそれぞれ定義されています。

BytePtr

*ByteからのTypeDef

WordPtr

*WordからのTypeDef

DWordPtr

*DWordからのTypeDef

SinglePtr

*SingleからのTypeDef

DoublePtr

*DoubleからのTypeDef

文字型

Char

概要
1文字を表現するための型です。
サイズ
1 byte(マルチバイト環境)
2 byte(Unicode環境)

現在CharはTypeDefで定義されています。

WCHAR

WCHARは常にUnicode (UCS-2/UTF-16LE)文字を保持する2バイトの型です。