2次元座標を表す、おなじみのPoint構造体。
こいつがSystem.Drawing名前空間にあることは、ちょっとした不満である。
理由は簡単で、2次元座標とは、何も描画するときだけに使うものではないからだ。
たとえばControl.Locationプロパティに使われるが、Locationプロパティを設定することは、何かを描画しているという意識なく行われるだろう。
だが、Windowsはウィンドウの移動を裏で描画しているわけだし、また、ピクセル単位での座標指定に使うものであると拡大解釈して、なんとか自分を納得させてきた。
だが、つい先ほど、ひょんなことから、DataGridView.CurrentCellAddressというプロパティを知ってしまった。
この型はPointであるが、単位はピクセルではない。DataGridViewのアクティブセルの行および列のインデックスである。
また、DataGridViewは、この座標を用いて何かを描画することもない。
ここへきて完全に、PointがDrawing名前空間にあることを正当化する理由は消えた。
だが、いくら文句を言ったところで、Point構造体がDrawing名前空間を脱することはないだろう。
だから、ここから先は妄想の域を出ない話だ。
そもそも、Point構造体を、座標の単位を意識せずに、単なる2つの座標のペアとして扱うことは正しいのだろうか。
それとも、表すものの単位ごとに異なるデータ型を用意すべきだったのだろうか。
あるいはまた、2次元座標であるという意味さえ捨てて、Pair<int, int>のようなもので統一してしまうことは是なのだろうか。
なかなか難しい問題ではないかと思うが、どうだろう。