- PR -

VBでのNULL判定の書き方

投票結果総投票数:105
Not o Is Nothing 69 65.71%
o Is Nothing = False 13 12.38%
Not IsNothing(o) 12 11.43%
IsNothing(o) = False 11 10.48%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-19 09:35
引用:

まどかさんの書き込み (2006-02-19 01:24) より:

私は「変数(名)は配列である」という意味から後者が第一印象としてはよい感じです。。。


む、やっぱり C 出身者とは意見が違いますね。
私は「配列の "型" である」ということで前者です。

「変数は配列である」については、変数名を複数形の命名をすることで解決しています。

新しいインスタンスを作る New 構文の場合は、
コンストラクタというメソッドを呼び出しているようなものなので、() をつけてます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
AREX
会議室デビュー日: 2006/02/20
投稿数: 1
投稿日時: 2006-02-20 18:37
引用:

まどかさんの書き込み (2006-02-16 16:54) より:
引用:

僕は、if 分の条件文は () で括る癖があるので、実際には
if (not (obj Is Nothing)) then
と書きます。


私の場合、当初はNot (〜)、今は括弧はつけてません。

昔こんなのがあったな。。。
Call ABC(1) - Integer渡しになる
Call ABC((1)) - Boolean渡しになる
これに気づいて以来、括弧をちょっぴり意識するようになりました。



初めて投稿させていただきます。
質問なのですが。
Call ABC(1) - Integer渡しになる
Call ABC((1)) - Boolean渡しになる
これってどういうことなのでしょうか?

Private Overloads Sub ABC(ByVal v As Integer)

End Sub

Private Overloads Sub ABC(ByRef v As Boolean)

End Sub

のようなOverloadsを呼び分けられるということでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-20 18:56
引用:

AREXさんの書き込み (2006-02-20 18:37) より:

のようなOverloadsを呼び分けられるということでしょうか?


そんなことあるわけが...
等式を書けば別かもしれませんが、ありえないです。

引用:

Call ABC(1) - Integer渡しになる
Call ABC((1)) - Boolean渡しになる
これってどういうことなのでしょうか?


とりあえず、VB6 ではなりませんね。
まどかさん、いつのバージョンのことを言ってるんでしょう?

コード:

    Private Sub Hoge()
        Call ABC(1)
        Call ABC((1))
    End Sub

    Private Sub ABC(ByVal var As Variant)
        Call MsgBox(TypeName(var))
    End Sub


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-02-20 19:09
引用:

Call ABC(1) - Integer渡しになる
Call ABC((1)) - Boolean渡しになる
これってどういうことなのでしょうか?



Call ABC(1) ByRef 渡し
Call ABC((1)) ByVal 渡し

がごっちゃになったのでは?
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-02-21 00:48
引用:

引用:

Call ABC(1) - Integer渡しになる
Call ABC((1)) - Boolean渡しになる
これってどういうことなのでしょうか?


とりあえず、VB6 ではなりませんね。
まどかさん、いつのバージョンのことを言ってるんでしょう?


いつだろう???
昔MLで見かけたんですが、結局括弧(内側の)で囲むと評価式となりBooleanになるぞって。
じゃんぬさんの例のようにVariantがらみだったような気もします。
ま、あんまり突っ込まんでください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-21 09:49
いえ、深く突っ込みます。(^^;)

括弧付きの引数を指定した場合、この括弧は引数の括弧ではなく式の括弧になるみたいですね。
Call キーワードの場合は、もともと引数リストを括弧で括らなければならないので、
もし「式の括弧」にしたいのであれば、二重になるということですね。

この場合の式の括弧というのは、評価された値という意味になります。

コード:

    Option Explicit

    Private Sub Command1_Click()
        Dim Var As Integer
    
        ' Call なし括弧なし
        Var = 1
        Method1 Var
        Call MsgBox(CStr(Var)) ' 5
    
        ' Call なし括弧あり
        Var = 1
        Method1 (Var)
        Call MsgBox(CStr(Var)) ' 1
    
        ' Call あり括弧あり
        Var = 1
        Call Method1(Var)
        Call MsgBox(CStr(Var)) ' 5
    
        ' Call あり二重で括弧
        Var = 1
        Call Method1((Var))
        Call MsgBox(CStr(Var)) ' 1
    End Sub

    ' テスト メソッド
    Private Sub Method1(ByRef Var As Integer)
        Var = 5
    End Sub


結果はコメントで書いたとおりです。

"余分に" 括弧で囲むと、式の評価が渡されるので、参照渡し (ByRef) したつもりでも、
元の Var の "値" が変わらないということですね。

引用:

まどかさんの書き込み (2006-02-21 00:48) より:

じゃんぬさんの例のようにVariantがらみだったような気もします。


というわけで、Variant でなくても起こります。
ただ、Variant の場合は、TypeName が変わったり変わらなかったりということはありますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-02-22 18:02
引用:

じゃんぬねっとさんの書き込み (2006-02-21 09:49) より:

いえ、深く突っ込みます。(^^



面白いですね。こんな結果になるなんて。
考えてみれば当然な気もするんですが、気が付かずにやってしまうと恐ろしいことに
なりますね。

#今考えてみると、思い当たる節が・・・orz
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-22 18:17
引用:

R・田中一郎さんの書き込み (2006-02-22 18:02) より:

考えてみれば当然な気もするんですが、


こう書けば判りやすいですね。

コード:

    Method (Var + 1)


渡されるのは「Var + 1」の評価結果であって、Var そのものではありません。
そのため、参照渡しであっても Var は影響しないということですね。
(まあ、参照渡しは普通使わないので、どうでも良いんですけど)

引用:

気が付かずにやってしまうと恐ろしいことになりますね。


それはないと思われます。
あるとすれば、Call キーワードなしの引数が 1 の時でしょうね。
引数が 2 つ以上の引数は構文エラーになりますので -> VB6 の関数呼び出し

つまり、

コード:

    Method1 (Var)


なのですが、括弧が離れてしまうので気付かれるハズです。(VS6 の場合ですが)

引用:

#今考えてみると、思い当たる節が・・・orz


「括弧が離れてるけど、まあいいか」で済ました覚えがあるならば、あるかもしれませんね。
でも、「参照渡し」という条件をクリアしなきゃいけませんからね。
式の結果をわかりやすくするために、括弧をつけたのであれば、それは値渡ししているハズでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)