「構造体」の版間の差分

提供:AB開発Wiki
ナビゲーションに移動検索に移動
編集の要約なし
 
(+Category:言語仕様)
 
(2人の利用者による、間の4版が非表示)
1行目: 1行目:
構造体を利用すると、複数の様々なデータ型を一つにまとめて管理できます。ABではクラスは参照型なのに対し、構造体は値型です。構造体はC/C++の構造体とビット単位で互換性を持ち、低レベルAPIを操作する場合に有効な手段となります。内部がブラックボックス化されるクラスとは異なり、構造体はデータ配置の順序や型サイズ、アラインメントに気を配りながら扱う必要があります。
== 構造体の定義 ==
== 構造体の定義 ==
  '''Type''' [Align(''n'')] ''TypeName''
  '''Type''' [Align(''n'')] ''TypeName''
5行目: 7行目:


=== 項目 ===
=== 項目 ===
;n
:アラインメントをバイト単位で指定できます。指定する値は1,2,4,8,16のいずれかでなければなりません。
;TypeName
:構造体の名前を指定します。
;Members
:構造体を構成するメンバ(複数可)を指定します。"Member As Type" などのように、メンバ名・データ型を指定します。


''n''
=== 備考 ===
: アラインメントをバイト単位で指定できます。指定する値は1,2,4,8,16のいずれかでなければなりません。
小さなデータを扱う場合、値型である構造体は非常に軽い動作を提供してくれますが、大きなデータを扱うときには、データ量に注意しなければなりません。例えば、下記のようなコードは構造体のハードコピーが行われ、構造体サイズが実行速度に影響を及ぼします。


''TypeName''
  Type DATAINFO
: 構造体の名前を指定します。
     a[MAX] As Long
 
''Members
: 構造体を構成するメンバ(複数可)を指定します。"Member As Type" などのように、メンバ名・データ型を指定します。
 
 
== 共用体メンバの利用(未実装) ==
共用体を利用すると、同一メモリ空間に2つ以上の異なるデータ型を有するメンバを配置できます。共用体はクラスメンバまたは構造体メンバとして定義します。定義の書式は下記のとおりです。
  Type TypeName
     '''Union''' ''u''
        ''Members''
    '''End Union'''
  End Type
  End Type
Sub Proc(data As DATAINFO)
    ...
End Sub
Dim data As DATAINFO
Dim data2 As DATAINFO
...
data = data2  'ハードコピーが行われる
Proc(data)  'ハードコピーが行われる


=== 項目 ===
[[Category:言語仕様|こうそうたい]]
''u''
: 共用体の名前を指定します。
''Members''
: 共用体を構成するメンバ(複数可)を指定します。

2007年8月6日 (月) 02:39時点における最新版

構造体を利用すると、複数の様々なデータ型を一つにまとめて管理できます。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 DATAINFO)
    ...
End Sub

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