凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 48909
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

Programming SHOT BARへようこそ。 本日は似ているけども違う代物のお話です。

JavaやC#といった強い型付けの言語を用いていると、非互換のデータ型にうっかり代入してしまったりすると コンパイルエラーではじき出してくれるので非常に助かります。 動かす前に問題を検出してくれるわけですからね。

Webシステムの開発現場では、いまや常識となった感のあるHTMLのエスケープ処理ですが、 こういったデータはエスケープ前後のどちらもString型で扱われるために代入互換性があります。
ところが、エスケープ前の生の文字列と、エスケープ済みの文字列を混ぜると危険なのはわかりますよね?

そう、このようなケースこそ、プログラミング言語上の型としては同一なんだけども、 論理的な意味では違う型となるデータ型なのです。

似たようなデータ型としてはゼロサプレス対象の文字列とか、固定小数扱いの数値型とか、 SQLのエスケープとか、いろいろ存在します。
こういったデータを扱う際には、言語上の型は同じだけど別の型なのだ、と意識して取り扱ってください。

言語の型として扱えない

困ったことに、intなどのプリミティブ型は独自の継承型を作ることが出来ません。 JavaのString型もfinalで宣言されているため、継承して独自宣言を作ることが出来ません。 Stringを継承してエスケープ前の型とエスケープ後の型を別々にしてしまえば 代入ミスとか無くなるし、メリットも大きいのですけどね。

アノテーションを工夫して使えばこういった論理型の違いを取り扱えるかもしれませんね。

投稿日時 : 2007年8月30日 14:10
コメント
  • # re: 型で表現されない型
    シャノン
    Posted @ 2007/08/31 12:07
    同じ int でも年齢と身長は非互換とか、string でも メールアドレスと人名は非互換とか、いくらでもありますね。
    その対策の一つがハンガリアン記法なのですけどね。
  • # re: 型で表現されない型
    凪瀬
    Posted @ 2007/08/31 18:28
    ハンガリアンか…。
    できれば機械的に検出できる方法論をとりたいところです。
タイトル
名前
Url
コメント