型
型の種類
- 基本型
- コンパイラが直接的に理解できる型のことを言います。詳細は基本型一覧をご覧ください。
- クラス
- Classステートメントで定義される型です。
- 構造体
- Typeステートメントで定義される型です。
- 列挙体
- Enumステートメントで定義される型です。
- デリゲート
- Delegateステートメントで定義される型です。
基本型一覧
基本型とはコンパイラが直接的に認識できるデータの種類です。基本型は値を保持するためだけにある型ですので、オブジェクトとしての振る舞いはありません。
整数型
Char
- 概要
- 符号あり8ビット整数型
- サイズ
- 1 byte
- 値の範囲
- -128 ~ 127
Byte
- 概要
- 符号なし8ビット整数型
- サイズ
- 1 byte
- 値の範囲
- 0 ~ 255
Integer
- 概要
- 符号あり16ビット整数型
- サイズ
- 2 byte
- 値の範囲
- -32768 ~ 32767
Word
- 概要
- 符号なし16ビット整数型
- サイズ
- 2 byte
- 値の範囲
- 0 ~ 65535
Long
- 概要
- 符号あり32ビット整数型
- サイズ
- 4 byte
- 値の範囲
- -2147483648 ~ 2147483647
DWord
- 概要
- 符号なし32ビット整数型
- サイズ
- 4 byte
- 値の範囲
- 0 ~ 4294967295
Int64
- 概要
- 符号あり64ビット整数型
- サイズ
- 8 byte
- 値の範囲
- -9223372036854775808 ~ 9223372036854775807
QWord
- 概要
- 符号なし64ビット整数型
- サイズ
- 8 byte
- 値の範囲
- 0 ~ 18446744073709551616
浮動小数点型
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型です。
プラットフォームによって異なるサイズを持つ型
LONG_PTR
Win32 (x86)の環境ではLong型として認識されます。Win64 (x64)の環境ではInt64型として認識されます。
ULONG_PTR
Win32 (x86)の環境ではDWord型として認識されます。Win64 (x64)の環境ではQWord型として認識されます。
ポインタ型
ABでは、他のBasic言語ではあまり見ることのないポインタ型の扱いに対応しています。メモリ内部を詳細に指定できるポインタ機能、ハードに近いレベルでの利用が可能ですが、使い方によってはバグを引き起こす原因にもなります。必要なときは最新の注意を払って利用していくのが望ましいでしょう。 Win32APIを直接的に利用する場合などに利用を留めておきましょう。
VoidPtr
どのようなオブジェクトを指し示すこともできるポインタ型です。Win32 (x86)の環境では4 byte、Win64 (x64)の環境では8 byteです。
その他オブジェクトへのポインタ型
型名に*を前置すると、その型を指し示すポインタ型を意味します。例: *Byte, *String /* とりあえずオブジェクトという言葉を用いましたがほかに適切なものはあるでしょうか。*/
関数へのポインタ型
関数宣言に*を前置すると、その関数を指し示すポインタ型を意味します。例: *Sub(x As Double), *Function(ptr As VoidPtr) As DWord。詳しくは関数#関数ポインタを参照してください。
値型と参照型
ABでは、基本型及びクラス・構造体・列挙体・デリゲートから定義された変数はデフォルトで値型になります。Newやmallocなどで明示的にヒープ領域にデータを生成しない限り、すべての変数データはローカル領域またはグローバル領域に配置されます。値型はポインタを一切利用しないため、最も安全な型として利用できます。
値型の生存期間はスコープ単位で決まります。例えば、下記のようなコードはエラーです。Dimステートメントで生成され、スコープを抜け出す際に破棄されます。
Do Dim message As String Loop message = "test"
また、変数やオブジェクトを指し示すための手段として、ポインタ以外に参照を活用できます。ByRef修飾子を活用することで値型として定義された変数の参照を作ることができます。
' 変数の参照をパラメータとして引き渡すケース Sub proc( ByRef a As Long ) ' 実引数に影響がある a = 200 End Sub Dim i = 100 As Long proc( i )
' 変数の参照を作るケース Dim message As String message = "This is a white pen." Dim ByRef refMessage = message refMessage = "This is a black pen." ' messageにも影響がある。
' 戻り値を参照で返すケース Dim message = "This is a white pen." As String Function proc() ByRef As String Return message End Function Dim refMessage = proc() refMessage = "This is a black pen." ' messageにも影響がある。