「型」の版間の差分

提供: AB開発Wiki
ナビゲーションに移動検索に移動
158行目: 158行目:
  
 
== 値型と参照型 ==
 
== 値型と参照型 ==
ABでは、基本型及びクラス・構造体・列挙体・デリゲートから定義された変数はデフォルトで値型になります。Newやmallocなどで明示的にヒープ領域にデータを生成しない限り、すべての変数データはローカル領域またはグローバル領域に配置されます。値型はポインタを一切利用しないため、最も安全な型として利用できます。
+
ABでは、基本型及び構造体は値型として扱います。値型はローカル領域またはグローバル領域に配置され、インスタンスの生存期間はスコープレベルで決まります。
 
+
クラス型・Enum型・デリゲート型は参照型です。これらの実態はヒープ領域に確保されます。インスタンスの生存期間はGCが管理します。
値型の生存期間はスコープ単位で決まります。例えば、下記のようなコードはエラーです。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にも影響がある。
 

2007年3月7日 (水) 02:23時点における版

型の種類

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


基本型一覧

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


整数型

SByte

  • 概要
符号あり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 桁)


文字型

Char

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


ブーリアン

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では、基本型及び構造体は値型として扱います。値型はローカル領域またはグローバル領域に配置され、インスタンスの生存期間はスコープレベルで決まります。 クラス型・Enum型・デリゲート型は参照型です。これらの実態はヒープ領域に確保されます。インスタンスの生存期間はGCが管理します。