tagCANDY CGI VBレスキュー(花ちゃん)の雑談用掲示板
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の雑談用掲示板
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(…)」が使えないのは、このような理由によります。



 [スレッド一覧へ] [親スレッドへ]