Re: IS演算子の必要性 ( No.5 ) |
- 日時: 2007/06/20 19:43
- 名前: 魔界の仮面弁士
- # 雑談として、よねKENさんの記事に繋げてみる。
> 個人的にはVBでのその辺のバランスはMod以外はよいかなと思っています。 微妙なのが、/ 演算子と \ 演算子。
英語圏では「/と\」なので、対の演算子に見えるのだろうけど、 日本語圏では「/と¥」のように見えてしまうのが気持ち悪いと感じています……。
> 比較の「=」と確実に区別ができます。(できるように言語が設計されています) でも、個人的には分けてほしかったです。(^^:
Pascal や Oracle みたいに、「a := 値」なんてのも良いかもしれない。 残念ながら、VBではすでに「:=」が別の意味を持っているのだけれども。
> VB6以前でも言語設計の観点からは「Set」は絶対に必要というものではなかったように思います。 無いと困る場面もあります。たとえば、 Dim rs As DAO.Recordset Dim v1 As Variant, v2 As Variant '(中略) Let v1 = rs!ID Set v2 = rs!ID だと、明らかに別の意味になりますしね。
# 上記に関しては、「v1 = rs.Fields("ID").Value」にすれば曖昧さ回避になりますが、 # オブジェクトによっては、そういった回避方法ができないものもあったりするわけで。
で。Set/Let については、VB の歴史をたどっていくと微妙なところもあって…。
VB2 では、「Object 型」は存在していませんでした。 クラスモジュールの作成機能さえありません。
しかし当時から、オブジェクトという概念は存在していました。
この時代のオブジェクト型として存在したのは、ジェネリック(総称)な オブジェクトである Form 型と Control 型、スペシフィック(固有)な オブジェクトである MDIForm、ユーザー定義フォーム型(Form1, Form2等)、 カスタムコントロール型(今でいう ActiveX コントロール)、そして 標準コントロール型(TextBox, PictureBox等)です。
この中に、Picture というオブジェクトは存在していません。 LoadPicture で返される画像は、まだオブジェクトでは無かったのです。
それゆえに、VB2 当時では Let Picture1.Picture = LoadPicture(…) Picture1.Picture = LoadPicture(…) などは動作しましたが、 Set Picture1.Picture = LoadPicture(…) はコンパイルエラーとなりました。
しかし VB4 になると、オブジェクト指向の取り入れが強くなります。 (OLE も、1.0 から 2.0 へと進化しました) DLL を作成できるようになり、画像も Picture オブジェクトとなったため、 Set Picture1.Picture = LoadPicture(…) が推奨されるようになりました。しかし、過去との互換性から、Let も残されました。
今現在、「Let Picture1.Picture = LoadPicture(…)」が行えるのにもかかわらず、 「Let MSHFlexGrid1.CellPicture = LoadPicture(…)」が使えないのは、このような理由によります。
|
|