インスタンス変数は何らかのクラスのインスタンスであることが原則です。その例外がBYTESです。BYTESはオブジェクトというよりも、むしろForthアレイに類するものです。
はじめに必要なバイト数の数値、次にBYTES、つぎにその名前を書きます。
:CLASS ....
4 BYTES CHUNK1
........
こうすれば、CHUNK1という名前の4バイトのインスタンス変数が得られます。ただしCHUNKはクラスのインスタンスではないので、メソッドは持ちません。ただ、上のように4バイト幅のものであれば、VARIABLEと同じように扱うことができます。つまり、CHUNK1とその名前を書けば、対応するデータ領域のアドレスがスタックにおかれますから、"!"や"@"で値を出し入れすることができます。原則としてプライベートになる点も、クラスのインスタンスを使った場合と同じです。
それでも、非常に限られた用途で用いる他は、これはインスタンス変数としてあまり便利ではありません。また、この"BYTES"はインスタンス変数としてしか利用することはできません。この"オブジェクト"の主な使い道は、システムに渡すための構造体を構成するとき、特に使い道のない部分に挟む"詰め物"にする、というものです。自分で使う必要が出てくる機会は、滅多にないと思います。
少し細かいことですが、ここで"詰め物"といったのは、構造体の配置(アラインメント)を実現するために使われる、いわゆる詰め物(Padding)のことではないので注意してください。実際にCarbon APIでの構造体の中には、reservedとされているだけで、格納されるべき値が規定されていない部分や、自分で取り扱う必要のないパラメターが並んでいる部分があります。そういう部分をいちいちオブジェクトで埋めずに、一気に"何バイトのスペース"を空けるわけです。
関連項目:
最終更新:2018年12月22日 12:31