مشاريع VB.NET-IsNothing مقابل لا شيء




مشاريع الفيجوال بيسك جاهزة (8)

أجد أن Patrick Steele أجاب على هذا السؤال على أفضل وجه في مدونته: Avoiding IsNothing ()

لم أقم بنسخ أي من إجابته هنا ، لضمان الحصول على ائتمان باتريك ستيل عن منصبه. ولكنني أعتقد أنك إذا كنت تحاول أن تقرر ما إذا كنت ستستخدم Is Is Nothing أو IsNothing ، فعليك أن تقرأ هذا المنشور. أعتقد أنك ستوافق على أن لا شيء هو أفضل خيار.

هل يستخدم أي شخص هنا VB.NET IsNothing تفضيل قوي ضد أو ضد استخدام IsNothing بدلاً من Is Nothing (على سبيل المثال ، If IsNothing(anObject) أو If anObject Is Nothing... )؟ إذا كان الأمر كذلك لماذا؟

تحرير: إذا كنت تعتقد أن كلاهما مقبول على حد سواء ، هل تعتقد أنه من الأفضل اختيار واحد والتشبث به ، أم أنه من المقبول خلطهما؟


كما أنني أميل إلى استخدام إصدار Is Nothing جزئيًا من استخدامه بقدر ما أفعله في SQL.


أنا أتفق مع "لا شيء". كما ذكر أعلاه ، من السهل إبطال "IsNot Nothing".

أجد هذا أسهل في القراءة ...

If printDialog IsNot Nothing Then
    'blah
End If

من هذا...

If Not obj Is Nothing Then
    'blah
End If

أنا أميل نحو بديل "هل لا شيء" ، في المقام الأول لأنه يبدو أكثر OO.

بالتأكيد ain't لديك Visual Basic الكلمة Ain't.


لقد استخدمت في البداية IsNothing ولكن كنت أتجه نحو استخدام Is Nothing في مشاريع أحدث ، بشكل أساسي للقراءة. المرة الوحيدة التي ألتزم فيها بـ IsNothing هي إذا كنت أحتفظ بكود حيث يتم استخدامه في كل مكان وأريد البقاء ثابتًا.


إذا ألقيت نظرة على MSIL حيث يتم تنفيذها ، فسترى أنها لا تتحول إلى نفس الشفرة بالضبط. عند استخدامك IsNothing () فإنه في الواقع إجراء مكالمة إلى هذه الطريقة بدلاً من مجرد تقييم التعبير.

السبب الذي يجعلني أميل إلى استخدام "لا شيء" هو عندما أكون نفيها يصبح "IsNot Nothing" بدلاً من "ليس IsNothing (كائن)" الذي أشعر شخصياً أنه يبدو أكثر قابلية للقراءة.


هل لا شيء يتطلب كائن تم تعيينه للقيمة لا شيء. يمكن أن تأخذ IsNothing () أي متغير لم يتم تهيئته ، بما في ذلك النوع الرقمي. هذا مفيد على سبيل المثال عند اختبار ما إذا تم تمرير معلمة اختيارية.


يجب عليك تجنب استخدام 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" المعاملات من النوع "عدد صحيح".
    يجب أن تكون العمليات المرجعية أو أنواع nullable.

  2. IsNothing(object) هو في الواقع جزء من جزء من Microsoft.VisualBasic.dll .
    هذا غير مرغوب فيه كما لديك تبعية غير الضرورية على مكتبة VisualBasic.

  3. بطيئة - 33.76 ٪ أبطأ في الواقع (أكثر من 1000000000 التكرار)!

  4. ربما تفضيل شخصي ، ولكن IsNothing() يقرأ مثل حالة يودا . عندما تنظر إلى متغير ، فإنك تتحقق من حالته ، مع اعتباره موضوعًا للتحقيق.

    أي هل تفعل س؟ --- لا هل الملكية ج ذلك ؟

    لذا أعتقد أنه If a IsNot Nothing يقرأ If a IsNot Nothing أفضل من If Not IsNothing(a)





nothing