「構造体」の版間の差分

提供: AB開発Wiki
ナビゲーションに移動検索に移動
1行目: 1行目:
 +
構造体を利用すると、複数の様々なデータ型を一つにまとめて管理できます。ABではクラスは参照型なのに対し、構造体は値型です。構造体はC/C++の構造体とビット単位で互換性を持ち、低レベルAPIを操作する場合に有効な手段となります。内部がブラックボックス化されるクラスとは異なり、構造体はデータ配置の順序や型サイズ、アラインメントに気を配りながら扱う必要があります。
 +
 
== 構造体の定義 ==
 
== 構造体の定義 ==
 
  '''Type''' [Align(''n'')] ''TypeName''
 
  '''Type''' [Align(''n'')] ''TypeName''
14行目: 16行目:
 
''Members
 
''Members
 
: 構造体を構成するメンバ(複数可)を指定します。"Member As Type" などのように、メンバ名・データ型を指定します。
 
: 構造体を構成するメンバ(複数可)を指定します。"Member As Type" などのように、メンバ名・データ型を指定します。
 +
 +
=== 備考 ===
 +
小さなデータを扱う場合、値型である構造体は非常に軽い動作を提供してくれますが、大きなデータを扱うときには、データ量に注意しなければなりません。例えば、下記のようなコードは構造体のハードコピーが行われ、構造体サイズが実行速度に影響を及ぼします。
 +
 +
Type DATAINFO
 +
    a[MAX] As Long
 +
End Type
 +
 +
Sub Proc( data As DATA )
 +
    ...
 +
End Sub
 +
 +
Dim data As DATA
 +
Dim data2 As DATA
 +
...
 +
data = data2  'ハードコピーが行われる
 +
proc( data )  'ハードコピーが行われる

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

構造体を利用すると、複数の様々なデータ型を一つにまとめて管理できます。ABではクラスは参照型なのに対し、構造体は値型です。構造体はC/C++の構造体とビット単位で互換性を持ち、低レベルAPIを操作する場合に有効な手段となります。内部がブラックボックス化されるクラスとは異なり、構造体はデータ配置の順序や型サイズ、アラインメントに気を配りながら扱う必要があります。

構造体の定義

Type [Align(n)] TypeName
    Members
End Type

項目

n

アラインメントをバイト単位で指定できます。指定する値は1,2,4,8,16のいずれかでなければなりません。

TypeName

構造体の名前を指定します。

Members

構造体を構成するメンバ(複数可)を指定します。"Member As Type" などのように、メンバ名・データ型を指定します。

備考

小さなデータを扱う場合、値型である構造体は非常に軽い動作を提供してくれますが、大きなデータを扱うときには、データ量に注意しなければなりません。例えば、下記のようなコードは構造体のハードコピーが行われ、構造体サイズが実行速度に影響を及ぼします。

Type DATAINFO
    a[MAX] As Long
End Type

Sub Proc( data As DATA )
    ...
End Sub

Dim data As DATA
Dim data2 As DATA
...
data = data2   'ハードコピーが行われる
proc( data )   'ハードコピーが行われる