| 
|  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 となる場合」において、
 ダンボさんであれば、どのような言語実装がなされれば、違和感を感じなくなりますか?
 
 |  |