Gibi tek bir liner genişletmek zorunda kaldıysanız
a = F(G1(H1(b1), H2(b2)), G2(c1));
Seni suçlamam. Bu sadece okumak zor değil, hata ayıklamak zor.
Neden?
- Yoğun
- Bazı hata ayıklayıcılar her şeyi bir kerede yalnızca vurgulayacak
- Açıklayıcı isimlerden arınmış
Orta sonuçlarla genişletirseniz,
var result_h1 = H1(b1);
var result_h2 = H2(b2);
var result_g1 = G1(result_h1, result_h2);
var result_g2 = G2(c1);
var a = F(result_g1, result_g2);
ve hala okumak zor. Neden? İki problemi çözer ve dördüncüsü sunar:
Yoğun
Bazı hata ayıklayıcılar her şeyi bir kerede yalnızca vurgulayacak
- Açıklayıcı isimlerden arınmış
- Açıklayıcı olmayan isimlerle darmadağın
Yeni, iyi, anlamsal anlam katan, hatta daha iyi olan isimlerle genişletirseniz İyi bir isim anlamama yardımcı oluyor.
var temperature = H1(b1);
var humidity = H2(b2);
var precipitation = G1(temperature, humidity);
var dewPoint = G2(c1);
var forecast = F(precipitation, dewPoint);
Şimdi en azından bu bir hikaye anlatıyor. Sorunları çözer ve burada sunulan her şeyden açıkça daha iyidir, ancak isimleri bulmanızı gerektirir.
Bunu gibi anlamsız isimlerle yaparsanız result_this
ve result_that
sadece iyi isimleri düşünemediğiniz için, o zaman bize anlamsız isim dağınıklığından kurtulmanızı ve bazı eski güzel boşlukları kullanarak genişletmenizi tercih ederim:
int a =
F(
G1(
H1(b1),
H2(b2)
),
G2(c1)
)
;
Aynı şekilde, eğer öyle olmasa da, anlamsız sonuç isimlerine sahip olandan daha okunur (bu fonksiyon isimlerinin bu kadar iyi olması değil).
Yoğun
Bazı hata ayıklayıcılar her şeyi bir kerede yalnızca vurgulayacak
- Açıklayıcı isimlerden arınmış
Açıklayıcı olmayan isimlerle darmadağın
İyi isimleri düşünemediğinizde, elinden geldiğince iyi.
Bazı nedenlerden dolayı, hata ayıklayıcılar yeni satırları sever, bu nedenle bu hata ayıklamanın zor olmadığını bulmalısınız:
Bu yeterli değilse, G2()
bir yerde birden fazla yerde olduğunu hayal edin ve sonra bu oldu:
Exception in thread "main" java.lang.NullPointerException
at composition.Example.G2(Example.java:34)
at composition.Example.main(Example.java:18)
Her G2()
arama kendi hattında olacağı için bu tarzın sizi doğrudan ana saldırgan telefona götürmesi hoş bir şey.
Bu yüzden lütfen 1. ve 2. problemleri bize 4. problemle karşı koymak için bir mazeret olarak kullanmayınız. Yapamadığınızda anlamsız isimlerden kaçının.
Orbit'in yorumunda Hafiflik Yarışları, doğru bir şekilde bu fonksiyonların yapay olduğunu ve kendilerinin çok kötü isimlerinin olduğunu gösteriyor. İşte bu tarzı vahşi koddan bazı kodlara uygulamanın bir örneği:
var user = db.t_ST_User.Where(_user => string.Compare(domain,
_user.domainName.Trim(), StringComparison.OrdinalIgnoreCase) == 0)
.Where(_user => string.Compare(samAccountName, _user.samAccountName.Trim(),
StringComparison.OrdinalIgnoreCase) == 0).Where(_user => _user.deleted == false)
.FirstOrDefault();
Kelime sarma gerekmediğinde bile, bu ses akışına bakmaktan nefret ediyorum. İşte bu stilin altında nasıl göründüğü:
var user = db
.t_ST_User
.Where(
_user => string.Compare(
domain,
_user.domainName.Trim(),
StringComparison.OrdinalIgnoreCase
) == 0
)
.Where(
_user => string.Compare(
samAccountName,
_user.samAccountName.Trim(),
StringComparison.OrdinalIgnoreCase
) == 0
)
.Where(_user => _user.deleted == false)
.FirstOrDefault()
;
Gördüğünüz gibi, bu stilin nesne yönelimli alana hareket eden işlevsel kodla iyi çalıştığını gördüm. Eğer orta tarzda bunu yapmak için iyi isimler bulursanız, o zaman size daha fazla güç. O zamana kadar bunu kullanıyorum. Ancak, her durumda, anlamsız sonuç adlarından kaçınmanın bir yolunu bulun. Gözlerimi acıtıyorlar.