「型」の版間の差分

提供: AB開発Wiki
移動先:案内検索
(関数へのポインタ型: 関数ポインタへのリンク)
(差し戻し)
 
(5人の利用者による、間の14版が非表示)
1行目: 1行目:
基本型とはコンパイラが直接的に認識できるデータの種類です。基本型は値を保持するためだけにある型ですので、オブジェクトとしての振る舞いはありません。
+
ActiveBasicは、全てのオブジェクトが型を持ち、変数なども型を持ちますが、静的型付けを採用しています。なお、型を暗黙の内に侵犯可能なため安全でない型付けに留まっています。
  
== 基本型一覧 ==
+
== 型の種類 ==
 +
;基本型
 +
:コンパイラが直接的に理解できる型のことを言います。詳細は基本型一覧をご覧ください。
 +
;[[クラス]]
 +
:Classステートメントで定義される型です。
 +
;[[構造体]]
 +
:Typeステートメントで定義される型です。
 +
;[[列挙体]]
 +
:Enumステートメントで定義される型です。
 +
;[[インタフェース]]
 +
:Interfaceステートメントで定義される型です。
 +
;[[デリゲート]]
 +
:Delegateステートメントで定義される型です。
  
=== 整数型 ===
+
===値型と参照型===
 +
ABでは、基本型及び構造体は値型として扱います。値型はローカル領域またはグローバル領域に配置され、インスタンスの生存期間はスコープレベルで決まります。
  
==== Char ====
+
クラス型・インタフェース型・列挙型・デリゲート型は参照型です。これらの実体はヒープ領域に確保されます。インスタンスの生存期間は[[ガベージコレクション|ガベージコレクタ]]が管理します。
* 概要
 
:: 符号あり8ビット整数型
 
* サイズ
 
:: 1 byte
 
* 値の範囲
 
:: -128 ~ 127
 
  
 +
==型の利用==
 +
===変数===
 +
変数の型は、[[Dimステートメント]]で指定します。
 +
Dim m As Long
 +
初期化子がある場合、初期化子の式の型から変数の型が決定可能です(型推論)。
 +
Dim x = 2.5 '2.5はDouble型なので、xはDouble型になる。
 +
なお、次のような場合は、初期化子がAs型変換演算子を含んだ式であると解釈されます。
 +
Dim y = x As Single
  
==== Byte ====
+
===関数===
* 概要
+
関数に[[AddressOf関数]]を使用すると、その関数に適合する関数へのポインタ型の値が得られます。
:: 符号なし8ビット整数型
+
Sub f1() : End Sub
* サイズ
+
Dim pfn = AddressOf (f1) 'f1は*Sub()
:: 1 byte
 
* 値の範囲
 
:: 0 ~ 255
 
  
 +
====引数・戻り値====
 +
基本的に変数と同じです。
 +
Function sq(x As Long) As Long
 +
    sq = x * x
 +
End Sub
 +
上の例では、引数xとsqの戻り値がそれぞれLong型と宣言されています。
  
==== Integer ====
+
===クラス・構造体・共用体===
* 概要
+
===列挙体===
:: 符号あり16ビット整数型
 
* サイズ
 
:: 2 byte
 
* 値の範囲
 
:: -32768 ~ 32767
 
  
 +
== 基本型一覧 ==
 +
基本型とはコンパイラが直接的に認識できるデータの種類です。基本型は値を保持するためだけにある型ですので、オブジェクトとしての振る舞いはありません。
  
==== Word ====
+
=== 整数型 ===
* 概要
+
{| border="1"
:: 符号なし16ビット整数型
+
|-
* サイズ
+
|符号有型
:: 2 byte
+
|範囲
* 値の範囲
+
|大きさ
:: 0 ~ 65535
+
|符号無型
 +
|範囲
 +
|-
 +
|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を主に使います。
  
==== Long ====
+
=== 浮動小数点型 ===
* 概要
+
x86/x64の仕様により、IEEE 754の単精度・倍精度の形式に対応しています。
:: 符号あり32ビット整数型
 
* サイズ
 
:: 4 byte
 
* 値の範囲
 
:: -2147483648 ~ 2147483647
 
  
 +
==== Single ====
 +
;概要
 +
:単精度浮動小数点型
 +
;サイズ
 +
:4 byte
 +
;値の範囲
 +
:3.4E +/- 38 (7 桁)
  
==== DWord ====
+
==== Double ====
* 概要
+
;概要
:: 符号なし32ビット整数型
+
:倍精度浮動小数点型
* サイズ
+
;サイズ
:: 4 byte
+
;8 byte
* 値の範囲
+
;値の範囲
:: 0 ~ 4294967295
+
:1.7E +/- 308 (15 桁)
  
 +
=== ブーリアン ===
  
==== Int64 ====
+
==== Boolean ====
* 概要
+
;概要
:: 符号あり64ビット整数型
+
:真偽値を見分けるための型
* サイズ
+
;サイズ
:: 8 byte
+
:1 byte
* 値の範囲
+
;値の種類
:: -9223372036854775808 ~ 9223372036854775807
+
:True or False
 +
:※内部表現は True = 1、False = 0 となります。比較演算の戻り値はBoolean型です。
  
 +
=== ポインタ型 ===
 +
ABでは、他のBasic言語ではあまり見ることのないポインタ型の扱いに対応しています。メモリ内部を詳細に指定できるポインタ機能、ハードに近いレベルでの利用が可能ですが、使い方によってはバグを引き起こす原因にもなります。必要なときは細心の注意を払って利用していくのが望ましいでしょう。Win32 APIを直接的に利用する場合などに利用を留めておきましょう。
  
==== QWord ====
+
;概要
* 概要
+
:オブジェクトを指し示す型、実態はアドレス値を保持する整数型となっている
:: 符号なし64ビット整数型
+
;サイズ
* サイズ
+
:4 byte (in Win32) or 8 byte (in Win64)
:: 8 byte
 
* 値の範囲
 
:: 0 ~ 18446744073709551616
 
  
 +
==== VoidPtr ====
 +
どのようなオブジェクトを指し示すこともできるポインタ型です。
  
=== 浮動小数点型 ===
+
==== その他オブジェクトへのポインタ型 ====
 +
型名に*を前置すると、その型を指し示すポインタ型を意味します。例: *Byte, *String
 +
 
 +
==== 関数へのポインタ型 ====
 +
関数宣言に*を前置すると、その関数を指し示すポインタ型を意味します。例: *Sub(x As Double), *Function(ptr As VoidPtr)
 +
 
 +
As DWord。詳しくは[[関数#関数ポインタ]]を参照してください。
  
==== Single ====
+
===Object===
* 概要
+
Objectは、全てのクラスの基底クラスです。そのため、全てのクラスのインスタンスはObjectへの型変換が可能です。
:: 単精度浮動小数点型
+
Class Aima
* サイズ
+
End Class
:: 4 byte
+
* 値の範囲
+
Dim a = New Aima
:: 3.4E +/- 38 (7 桁)
+
Dim o = a As Object
  
 +
なお、Objectの実態はSystem.Objectとしてライブラリ内に存在します。メンバなどは[[Objectクラス]]を参照してください。
  
==== Double ====
+
===String===
* 概要
+
Stringは、文字列型です。実態はSystem.Stringとしてライブラリ内に存在します。メンバなどは[[Stringクラス]]を参照してください。
:: 倍精度浮動小数点型
 
* サイズ
 
:: 8 byte
 
* 値の範囲
 
:: 1.7E +/- 308 (15 桁)
 
  
 +
== ライブラリで定義される型 ==
 +
これらの型は全てインクルードファイルの中でTypeDefによって定義されています。
  
=== プラットフォームによって異なるサイズを持つ型 ===
+
=== 整数型 ===
  
 
==== LONG_PTR ====
 
==== LONG_PTR ====
Win32 (x86)の環境ではLong型として認識されます。Win64 (x64)の環境ではInt64型として認識されます。
+
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されています。
  
==== ULONG_PTR ====
+
==== SSIZE_T ====
Win32 (x86)の環境ではDWord型として認識されます。Win64 (x64)の環境ではQWord型として認識されます。
+
SIZE_Tの符号有り版で、現在LONG_PTRからTypeDefされています。
  
 
=== ポインタ型 ===
 
=== ポインタ型 ===
==== VoidPtr ====
+
次の型が互換性のためそれぞれ定義されています。
どのようなオブジェクトを指し示すこともできるポインタ型です。Win32 (x86)の環境では4 byte、Win64 (x64)の環境では8 byteです。
+
==== BytePtr ====
 +
<nowiki>*ByteからのTypeDef</nowiki>
 +
==== WordPtr ====
 +
<nowiki>*WordからのTypeDef</nowiki>
 +
==== DWordPtr ====
 +
<nowiki>*DWordからのTypeDef</nowiki>
 +
==== SinglePtr ====
 +
<nowiki>*SingleからのTypeDef</nowiki>
 +
==== DoublePtr ====
 +
<nowiki>*DoubleからのTypeDef</nowiki>
  
==== その他オブジェクトへのポインタ型 ====
+
=== 文字型 ===
型名に*を前置すると、その型を指し示すポインタ型を意味します。例: *Byte, *String
+
==== Char ====
/* とりあえずオブジェクトという言葉を用いましたがほかに適切なものはあるでしょうか。*/
+
;概要
 +
:1文字を表現するための型です。
 +
;サイズ
 +
:1 byte(マルチバイト環境)
 +
:2 byte(Unicode環境)
 +
現在CharはTypeDefで定義されています。
  
==== 関数へのポインタ型 ====
+
==== WCHAR ====
関数宣言に*を前置すると、その関数を指し示すポインタ型を意味します。例: *Sub(x As Double), *Function(ptr As VoidPtr) As DWord。詳しくは[[関数#関数ポインタ]]を参照してください。
+
WCHARは常にUnicode (UCS-2/UTF-16LE)文字を保持する2バイトの型です。
  
=== 備考 ===
+
[[Category:言語仕様|かた]]
ABにはこの他にも文字列型(String型)をはじめとする多くの方が標準ライブラリに搭載されています。それらの型に関する詳細は[[クラス一覧]]をご覧ください。
 

2011年1月15日 (土) 17:41時点における最新版

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バイトの型です。