Part 9.メモリレイアウト(2)


いま、文字列長を表現するfieldを追加したとしよう。


class UCS2String
{
typedef ushort UCS2;
ushort Length;
UCS2 moji[32];
}


この文字列をクリアするにはどうすれば良いだろうか?


moji[32]すべてをzero fillする必要はない。単にLength に 0 を代入するだけで良い。なぜか?このクラスを書いたプログラマは、「文字列の長さは必ずLengthに反映している」とそう自分でルールを作り、そしてそう信じて、それに従うからだ。


もちろん、Lengthの代わりにmoji[32]の先頭であるmoji[0]に文字列長を格納してしまう場合もあるだろう。Pascal風stringのできあがりだ。


プログラマがそうなっているのだと信じればその瞬間からそれは確かに真実なのだ。そして自分で作ったルールをどこにも記する必要もない。デカルトが「我思う故に 我あり」と言ったが、自分のなかで“思う”だけでその瞬間からそれは真実として実在することが可能となるのだ。(なんと果実のように甘い言葉の響きだろうか!)


(つづく)