Olumsuzluğu vurgulayın


13

Sadece oldukça uzun özellik adlarına sahip bir if ifadesi yazıyordum ve bu sorunla karşılaştım.

Diyelim ki böyle bir if ifademiz var:

if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue &&
   !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant)
{
    //Do something
}

İkinci özellik boolean tipindedir ve stetementin böyle olması mantıklı değildir

if(boleanValue == true)

Olumsuzluğu vurgulamak ve sonra öne koymak için daha iyi bir yol var mı !? Bana göre bu, kodu okurken kolayca denetlenebilir ve hata ayıklama ile ilgili sorunlara neden olabilir gibi görünüyor


7
Koşulu anlamlı bir ada sahip bir yönteme çıkarın.
Joachim Sauer

2
... veya negatif değeri anlamlı bir isme sahip bir değişkene atayın ve bunun yerine if koşulunda kullanın.
scrwtp

+1 @JoachimSauer ne dedi, mümkünse bu yöntemi sorgulanan nesneye koymak .. Bu durumda, tüm koşul bir yöntemle kapsüllenmiş olabilir_someViewModelNameThatIsLong
MattDavey

2
Genellikle yaptığım genel bir şey, olumsuzluğu daha görünür hale getirmek için her iki tarafta bir boşlukla kuşatmaktır. if( ! something)vsif(!something)
Svish

Eğer olumsuzlamayı vurgularsanız, neden kullanmıyorsunuz ... && model.Prop == false)? Şahsen çok nadiren kullanıyorum !, gözden kaçırmak çok kolay.

Yanıtlar:


22
if(_someViewModelNameThatIsLong.NeedsMeToDoSomething(someValue))
{
    //Do something
}

Ve sonra, görünüm modeli nesnesinde

public bool NeedsMeToDoSomething(string someValue)
{
    return AnotherPropertyINeedToCheck == someValue &&
        !ThisIsABooleanPropertyThatIsImportant;
}

(someValue öğesinin bir dize olduğunu ve model nesnesi tarafından bilinmediğini varsayarsak)

Bu sadece vurgulamakla kalmaz! ancak genel olarak daha okunabilir olmasını sağlar. Şimdi, çağıran yöntemde, koşulu çağrılan nesnenin bağlamında koşulu tanımlamak için iyi adlandırılması gereken bir koşulu görebilirim. Ve model nesnesinde, bunun model nesnesi bağlamında ne anlama geldiğini görebiliyorum.


1
+1, bu bilgi uzmanı ilkesinin iyi bir uygulamasıdır .
MattDavey

1
Worth, noting someValuebir parametre olması gerekebilir NeedsMeToDoSomethingdurumunuza bağlı olarak, yöntemin.
MattDavey

@MattDavey: Oh, güzel nokta.
pdr

@pdr Belki de aynı boole ile o görünüm modeline bir özellik yapmalı ve o bayrağı daha fazla yerde yeniden kullanmalısınız. Eminim kullanışlı bulacaksınız.
radu florescu

5

Daha az önemli koşulları değerlendirmeden önce blok halinde kendi başına koyun. Diğer koşulların dağınıklığı olmadan okumak sadece daha kolay olmakla kalmaz, aynı zamanda bir programcının okuyacağı ilk koşuldur. Anlamlı bir ada sahip bir değişkene atamak için bunu @scrwtp tarafından daha önce bahsedilen fikirle birleştirin ve şunları elde edin:

var isValid = !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant;
if( isValid ) 
{
    if( _someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue ) 
    {
        //Do something
    }
}

Bir derleyici dilinde programlıyorsanız, çoğu zaman bu bloklar yine de sonunda birleştirilirse, iç içe if ve iç if arasına kod girmediğiniz sürece, bu iç içe geçmiş, vakalar.


2

C / C ++ kullanıyorsanız, önişlemci okunabilirlik sağlayabilir.

#define NOT !

if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue &&
    NOT _someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant)
{
    //Do something
}

ya da belki ... fonksiyon (x) {dönüş! x; } // javascript
Alex

2
C ve C ++ 'da işleçler Zaten çeşitli işleçlerin standart eş anlamlıları vardır.
Joel

0

Sadece çıkarırım

`!_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant`

Bunu döndüren bir yöntemde. Bu yöntemi NotThisIsABooleanPropertyThatIsImportant olarak adlandırırsanız iyi olmalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.