tagCANDY CGI VBレスキュー(花ちゃん)の雑談用掲示板
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の雑談用掲示板
Re: IS演算子の必要性 ( No.1 )
日時: 2007/06/20 10:40
名前: 魔界の仮面弁士

> ・オブジェクト変数へのオブジェクト代入は、VB6ではSet文で行った。VB2005ではSetは不要(すなわちLet)
どちらかというと、(Letではなく)Set の動作ですね、VB2005では。
値型に付いては、ボックス化(boxing)とその解除(unboxing)が行われます。

ただし COM 相互運用時においては、やはり Let と Set とを別に扱う必要があります。
# だからこそ CallByName では、両者を区別して呼び出せるようになっています。

また Let / Set の使い分けは、呼び出し側ではなく、それを受け取る側の実装に依存しています。
COM クラス側の実装如何では、「オブジェクトを Let で渡す」こともできますし、
実際、そのような仕様になっている COM クラスも少なからず存在しています。

例をあげてみると、ADODB.Command オブジェクトの "Output Stream" 動的プロパティが、
Stream オブジェクトを Let で渡す仕様になっていましたし、より身近なところでは、
VB6 PictureBox オブジェクトの Picture プロパティは、Picture オブジェクトを
Let でも Set でも渡せる仕様になっています。


> ・それなのに変数比較だけはVB6同様、ISと=を使い分けている。
すべてがオブジェクトである、とは言っても、だからといって
「参照」と「値」の概念まで無くなったわけではないですよね。
VB6 でいうところの IsObject(x) 、.NET でいうところの IsReference(x) の違いです。


そもそも Is 演算子の意味は、VB6 の頃から変化していないと思います。
すなわち、「オブジェクト参照の一致性を見るための演算子」です。
.NET では参照型にしか使えず、VB6 においてはオブジェクトにしか使えません。

= 演算子についても、(VBS / VB6 / .NET でそれぞれ微妙に意味が異なるとはいえ)
基本的には「値の一致性を見るための物」である点は変化していないと思います。
(ちなみに、VB.NET の = 比較演算子と、C# の == 比較演算子は別物です)

両者に求められる機能が異なっている以上、一方を廃止する事も出来ないのではないでしょうか。


> いやちゃんとIS演算子と=比較演算子は分ける必然性があるというなら、宜しくお聞かせ下さい。
逆に質問しますが、Is 演算子があると困る場合というのはありますでしょうか?
あるいは、「Is 比較では False だが、= 比較では True となる場合」において、
ダンボさんであれば、どのような言語実装がなされれば、違和感を感じなくなりますか?



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