SORU
7 EYLÜL 2011, ÇARŞAMBA


&& Neden ¬

Neden && & || | tercih tercih edilir?

Yıllardır programlama eden ve onun açıklaması: birine sordum

if (bool1 && bool2 && bool3) { /*DoSomething*/ }, bool1 örneğin, bool3, vb geçmeden önce doğru olarak hangi bool2 test etmek için gerçek olmak için vardır. Eğer varsa hepsini doğru bir sonraki satıra ilerleme olması durumunda bile test etmek amacıyla yok yerine & Bir tek harcamış olsaydım, neden önemi yok?

Not: isterdim işaret eden biriyim programlama eşdeğer bir bebek ve bu ciddi veya acil soru, daha önemli bir anlama neden şeyler yapılmalı belirli bir şekilde karşıt olarak, bir başka.

CEVAP
7 EYLÜL 2011, ÇARŞAMBA


Çoğu durumda, && || tercih & | çünkü eski kısa devre yapmış, yani değerlendirme iptal en kısa sürede sonuç belli.

Örnek:

if(CanExecute() && CanSave())
{
}

Eğer CanExecute döndürür false tam ifadesi false, CanSave ne olursa olsun dönüş değeri olacaktır. Bu, CanSave idam yüzünden.

Bu şu durumda çok kullanışlı

string value;
if(dict.TryGetValue(key, out value) && value.Contains("test"))
{
    // Do Something
}

TryGetValue eğer verilen anahtar sözlükte bulunursa false döndürür. TryGetValue döner *25,* ** 26 kısa devre nitelikte bir idam nedeniyle, true böylece value null değildir. Eğer kullanmak istiyorsanızbit VEoperatör & yerine, eğer anahtar ifadenin ikinci bölümü her durumda yürütülür çünkü sözlükte bulunursa, değil NullReferenceException olacaktı.

Buna benzer ama daha basit bir örnek, aşağıdaki kodu TJHeuvel tarafından belirtildiği gibi)

if(op != null && op.CanExecute())
{
    // Do Something
}

CanExecute op null ise yürütülür. op null, ifadenin ilk bölümü (op != null) 40* *olarak değerlendirir ve geri kalan (op.CanExecute()) değerlendirilmesi atlanır.

Bunun dışında, teknik olarak, farklı, onlar da:
&& || sadece kullanılan bool oysa & | kullanılabilir herhangi bir tamsayı türü (bool, int, long, sbyte, ...), çünkü onlar bit operatörleri. &bit VEoperatör ve |bit YAoperatör.

Çok kesin, C#, bu operatörlerin (&, | [^]) "Mantıksal operatörler" (C# spec bölüm 7.11). Bu operatörler çeşitli uygulamaları vardır:

  1. Tamsayılar (int, uint, long ve ulong bölüm 7.11.1) için:
    İşlenen bit sonuç ve operatör, yani & AND bit düzeyinde mantıksal vb hesaplamak için uygulamak olduğunu hesaplamak için uygulanır.
  2. Numaralandırma (bölüm 7.11.2) için:
    Numaralandırma temel türü mantıksal işlemi gerçekleştirmek için uygulanır.
  3. Bools ve null bools (bölüm ve 7.11.3 7.11.4): için
    Sonucu hesaplanan bit hesaplamalar kullanıyor. Sonuç temelde olasılık sayısı çok küçük olduğu için iki işlenen değerlerine dayalı başını kaldırıp baktı.
    Her iki değer arama için kullanılan çünkü, bu uygulama, kısa devre değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011
  • Tomas N

    Tomas N

    14 Kasım 2010