「型」の版間の差分

提供: AB開発Wiki
ナビゲーションに移動検索に移動
1行目: 1行目:
 +
== 型の種類 ==
 +
* 基本型
 +
:: コンパイラが直接的に理解できる型のことを言います。詳細は基本型一覧をご覧ください。
 +
* クラス
 +
:: Classステートメントで定義される型です。
 +
* 構造体
 +
:: Typeステートメントで定義される型です。
 +
* 列挙体
 +
:: Enumステートメントで定義される型です。
 +
* デリゲート
 +
:: Delegateステートメントで定義される型です。
 +
 +
 +
== 基本型一覧 ==
 
基本型とはコンパイラが直接的に認識できるデータの種類です。基本型は値を保持するためだけにある型ですので、オブジェクトとしての振る舞いはありません。
 
基本型とはコンパイラが直接的に認識できるデータの種類です。基本型は値を保持するためだけにある型ですので、オブジェクトとしての振る舞いはありません。
  
== 基本型一覧 ==
 
  
 
=== 整数型 ===
 
=== 整数型 ===
117行目: 130行目:
 
==== ULONG_PTR ====
 
==== ULONG_PTR ====
 
Win32 (x86)の環境ではDWord型として認識されます。Win64 (x64)の環境ではQWord型として認識されます。
 
Win32 (x86)の環境ではDWord型として認識されます。Win64 (x64)の環境ではQWord型として認識されます。
 +
  
 
=== ポインタ型 ===
 
=== ポインタ型 ===
 +
ABでは、他のBasic言語ではあまり見ることのないポインタ型の扱いに対応しています。メモリ内部を詳細に指定できるポインタ機能、ハードに近いレベルでの利用が可能ですが、使い方によってはバグを引き起こす原因にもなります。必要なときは最新の注意を払って利用していくのが望ましいでしょう。
 +
Win32APIを直接的に利用する場合などに利用を留めておきましょう。
 +
 
==== VoidPtr ====
 
==== VoidPtr ====
 
どのようなオブジェクトを指し示すこともできるポインタ型です。Win32 (x86)の環境では4 byte、Win64 (x64)の環境では8 byteです。
 
どのようなオブジェクトを指し示すこともできるポインタ型です。Win32 (x86)の環境では4 byte、Win64 (x64)の環境では8 byteです。
129行目: 146行目:
 
関数宣言に*を前置すると、その関数を指し示すポインタ型を意味します。例: *Sub(x As Double), *Function(ptr As VoidPtr) As DWord。詳しくは[[関数#関数ポインタ]]を参照してください。
 
関数宣言に*を前置すると、その関数を指し示すポインタ型を意味します。例: *Sub(x As Double), *Function(ptr As VoidPtr) As DWord。詳しくは[[関数#関数ポインタ]]を参照してください。
  
=== 備考 ===
+
 
ABにはこの他にも文字列型(String型)をはじめとする多くの方が標準ライブラリに搭載されています。それらの型に関する詳細は[[クラス一覧]]をご覧ください。
+
== 値型と参照型 ==
 +
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にも影響がある。

2007年1月27日 (土) 18:32時点における版

型の種類

  • 基本型
コンパイラが直接的に理解できる型のことを言います。詳細は基本型一覧をご覧ください。
  • クラス
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にも影響がある。