質問

ここにいる人は VB.NET を使用していて、使用することに対して強い好みを持っていますか? IsNothing とは対照的に Is Nothing (例えば、 If IsNothing(anObject) または If anObject Is Nothing...)?もしそうなら、なぜですか?

編集:どちらも同様に許容できると思う場合、どちらかを選択して使い続けるのが最善だと思いますか、それとも混合しても問題ないと思いますか?

役に立ちましたか?

解決

実行中の MSIL を見ると、まったく同じコードにコンパイルされていないことがわかります。IsNothing() を使用すると、単に式を評価するのではなく、実際にそのメソッドが呼び出されます。

私が "Is Nothing" を使用する傾向にある理由は、否定するときに "Not IsNothing(object)" ではなく "IsNot Nothing" になるためです。個人的には、その方が読みやすいと感じます。

他のヒント

それみつけたよ パトリック・スティール この質問に対する答えは彼のブログで最もよくわかりました。 IsNothing() の回避

パトリック・スティール氏の投稿の功績を確実にするために、ここでは彼の回答をコピーしませんでした。しかし、Is Nothing と IsNothing のどちらを使用するかを決めようとしている場合は、彼の投稿を読むべきだと思います。Is Nothing が最良の選択であることに同意していただけると思います。

編集 - VoteCoff のコメントはこちら

記事の内容の一部:さらにコードを見直した結果、これを避けるべき別の理由が見つかりました。値の型を受け入れます。明らかに、IsNothing() は「オブジェクト」を受け入れる関数なので、必要なものを何でも渡すことができます。それが値型の場合、.NET はそれをオブジェクトにボックス化して IsNothing に渡します。ボックス化された値に対しては常に false が返されます。VB.NET コンパイラは、「Is Nothing」スタイルの構文をチェックし、値型に対して「Is Nothing」を実行しようとするとコンパイルしません。しかし、IsNothing() 関数は問題なくコンパイルされます。-PSteele – VoteCoffee

使用は絶対に避けるべきです IsNothing()

ここにあります 4つの理由 記事から IsNothing() VS 何もない

  1. 最も重要なこと、 IsNothing(object) 値の型も含め、すべてがオブジェクトとして渡されます。値型は指定できないため、 Nothing, 、完全に無駄なチェックです。
    次の例を見てみましょう。

    Dim i As Integer
    If IsNothing(i) Then
       ' Do something 
    End If
    

    これはコンパイルして正常に実行されますが、次のようになります。

    Dim i As Integer
    If i Is Nothing Then
        '   Do something 
    End If
    

    コンパイルされず、代わりにコンパイラーによってエラーが発生します。

    「Is」演算子は、「Integer」型のオペランドを受け入れません。
    オペランドは参照型または null 許容型である必要があります。

  2. IsNothing(object) 実際には、の一部の一部です Microsoft.VisualBasic.dll.
    VisualBasic ライブラリに不必要な依存関係があるため、これは望ましくありません。

  3. 遅い - 実際には 33.76% 遅くなります (1000000000 回以上の反復)。

  4. 個人的な好みかもしれませんが、 IsNothing() のように読みます ヨーダ条件. 。変数を見るときは、それを調査の対象として、その状態をチェックしていることになります。

    つまりする それ ×をしますか?--- ないxのプロパティを持っています それ?

    それで私は思います If a IsNot Nothing よりも良く読めます If Not IsNothing(a)

「何もない」に同意します。上で述べたように、「IsNot Nothing」で否定するのは簡単です。

こちらの方が読みやすい気がするのですが…

If printDialog IsNot Nothing Then
    'blah
End If

これより...

If Not obj Is Nothing Then
    'blah
End If

VB には、() と {} を頻繁に使用する言語に慣れている人々にとって、「英語らしく」快適なものにするための機能が満載です。たとえば、「英語のような」面では...VB には「そうじゃない「キーワード...冗談ではありません。その一方で、おそらくすでにご存知のとおり、必要に応じて関数呼び出しで () を使用できますが、そうする必要はありません。

私は IsNothing() の方が好きですが、C と C# を使用しているので、それが快適です。そして、より読みやすいと思います。ただし、自分にとってより快適だと感じるものを選んでください。

私は「Is Nothing」の代替案に傾いていますが、それは主に、そのほうがよりOOに見えるからです。

確かにVisual Basic そうじゃない Ain'tキーワードを取得しました。

また、私は SQL と同じくらい Is Nothing バージョンを部分的に使用する傾向があります。

私は最初は IsNothing を使用していましたが、主に読みやすさを考慮して、新しいプロジェクトでは Is Nothing を使用するようになりました。私が IsNothing にこだわるのは、コードが全体で使用され、一貫性を保ちたい場合に限ります。

Is Nothing には、値 Nothing が割り当てられたオブジェクトが必要です。IsNothing() は、数値型を含む、初期化されていない任意の変数を受け取ることができます。これは、オプションのパラメータが渡されたかどうかをテストする場合などに便利です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top