Programming SHOT BARへようこそ。
本日は似ているけども違う代物のお話です。
JavaやC#といった強い型付けの言語を用いていると、非互換のデータ型にうっかり代入してしまったりすると
コンパイルエラーではじき出してくれるので非常に助かります。
動かす前に問題を検出してくれるわけですからね。
Webシステムの開発現場では、いまや常識となった感のあるHTMLのエスケープ処理ですが、
こういったデータはエスケープ前後のどちらもString型で扱われるために代入互換性があります。
ところが、エスケープ前の生の文字列と、エスケープ済みの文字列を混ぜると危険なのはわかりますよね?
そう、このようなケースこそ、プログラミング言語上の型としては同一なんだけども、
論理的な意味では違う型となるデータ型なのです。
似たようなデータ型としてはゼロサプレス対象の文字列とか、固定小数扱いの数値型とか、
SQLのエスケープとか、いろいろ存在します。
こういったデータを扱う際には、言語上の型は同じだけど別の型なのだ、と意識して取り扱ってください。
言語の型として扱えない
困ったことに、intなどのプリミティブ型は独自の継承型を作ることが出来ません。
JavaのString型もfinalで宣言されているため、継承して独自宣言を作ることが出来ません。
Stringを継承してエスケープ前の型とエスケープ後の型を別々にしてしまえば
代入ミスとか無くなるし、メリットも大きいのですけどね。
アノテーションを工夫して使えばこういった論理型の違いを取り扱えるかもしれませんね。
投稿日時 : 2007年8月30日 14:10