Alçakgönüllü görüşüme göre, genel olarak üretim kodu için büyük ölçüde kaçınmak bir şeydir, çünkü farklı görevleri yerine getiren sporadik işlevler dışında, genellikle bunu yapmak için cazip olmuyorsunuz. Bir şeyleri test etmek için kullanılan bazı hurda kodlarında yapmaya meyilliyim, ancak üretim kodunda her işlevin ne yapması gerektiğine dair önceden düşündüğüm üretim kodunda bir cazibe bulmuyorum çünkü o zaman işlevin doğal olarak çok yerel durumuna göre sınırlı kapsam.
try
Kapsamı neden azaltamayacağı sorusunu yalın bir şekilde anlamlı bir şekilde azaltmak için bu şekilde kullanılmakta olan (koşulsuzlar, bir işlem için bir blok, vb.) Kullanılan adsız blok örnekleri hiç görmedim eğer gerçekten anonim bloklardan orijinal bir SE açısından gerçekten faydalanmışsa, daha az kapsamlı daha basit fonksiyonlara bölünebilir. Genelde eklektik kod, bunun için en çok istediğimiz yerde gevşek bir şekilde ilgili veya çok ilgisiz şeyler yapıyor.
Örnek olarak, bunu bir değişkeni yeniden kullanmak için yapmaya çalışıyorsanız count
, iki farklı şeyi saydığınızı gösterir. Eğer değişken ismi en kısa olacaksa count
, onu sadece fonksiyonun bağlamına bağlamak mantıklı olur, bu sadece potansiyel olarak bir şeyi sayıyor olabilir. Ardından, fonksiyonun adına ve / veya dokümantasyonuna anında bakabilir, count
tüm kodu analiz etmeden fonksiyonun ne yaptığı bağlamında ne anlama geldiğini anında görebilirsiniz . Bir fonksiyon için, aynı değişken adını yeniden kullanan iki farklı şeyi, adsız kapsamları / blokları alternatiflere göre daha çekici hale getiren şekillerde saymak için genellikle iyi bir argüman bulamıyorum. Bu, tüm işlevlerin yalnızca bir şeyi sayması gerektiğini göstermez. BEN'mühendislik, iki veya daha fazla şeyi saymak için aynı değişken adını yeniden kullanan ve her bir sayının kapsamını sınırlamak için adsız bloklar kullanan bir fonksiyona yarar sağlar. İşlev basit ve açıksa, birincisi ideal olarak gerekenden daha fazla birkaç kapsam alanı görünürlük çizgisine sahip olan iki farklı adlandırılmış sayı değişkenine sahip olmak dünyanın sonu değildir. Bu tür işlevler genellikle, yerel değişkenlerinin asgari kapsamını daha da azaltmak için bu tür adsız blokların bulunmadığı hataların kaynağı değildir.
Gereksiz Yöntemler İçin Bir Öneri Değil
Bu, sadece kapsamı azaltmak için zorla yöntemler oluşturmanızı önermez. Muhtemelen bu kadar kötü ya da daha kötü bir şey ve benim önerdiğim şey, isimsiz kapsamlara olan bir ihtiyaçtan daha garip, özel "yardımcı" yöntemlerine ihtiyaç duymaması gerektiği yönünde. Bu, şimdi olduğu gibi kod hakkında çok fazla düşünmek ve değişkenlerin kapsamını azaltmak için sorunu arabirim düzeyinde kavramsal olarak nasıl çözeceğinizi düşünmekten ziyade, yerel fonksiyon durumlarının doğal olarak blokların derin bir şekilde iç içe yerleştirilmeden temiz ve kısa görünürlüğünü sağlayacak şekillerde düşünmektir. ve 6+ girinti seviyeleri. Bruno'ya, kod satırlarını bir işleve zorla 3 satır ekleyerek engelleyebileceğinizi kabul ediyorum, ancak bu, mevcut uygulamanıza göre oluşturduğunuz işlevleri geliştirdiğiniz varsayımıyla başlar, uygulamalara karışmadan fonksiyonları tasarlamak yerine. İkinci yolu yaparsanız, bir değişkenin kapsamını sadece birkaç daha az zararsız kod satırına düşürmek için gayretli bir şekilde denemeyi denemeden belli bir yöntemde değişken kapsamı azaltmanın ötesinde bir amaca hizmet etmeyen anonim bloklara çok az ihtiyaç duydum bu anonim blokların egzotik tanıtımı tartışmasız çıkardıkları kadar entelektüel ek yüke katkıda bulunuyor.
Asgari Kapsamları Daha da Azaltmaya Çalışmak
Yerel değişken kapsamlarını mutlak minimuma indirgemek faydalı olsaydı, bunun gibi geniş bir kod kabulü olmalıdır:
ImageIO.write(new Robot("borg").createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())), "png", new File(Db.getUserId(User.handle()).toString()));
... bu durum, ilk etapta bunlara atıfta bulunmak için değişkenler yaratarak bile devletin asgari görünürlüğüne neden olmaktadır. Dogmatik olarak gelmek istemiyorum ama aslında pragmatik çözümün, yukarıdaki kodlu kod satırından kaçınmak için olduğu gibi mümkün olduğunda isimsiz blokları önlemek ve doğruluk ve değişmezleri bir işlev içinde sürdürme perspektifinden sonra, kodunuzu işlevler halinde nasıl düzenlediğinizi ve arabirimlerinizi tasarlamanın kesinlikle yeniden incelenmeye değer olduğunu düşünüyorum. Doğal olarak, yönteminiz 400 satır uzunluğundaysa ve bir değişkenin kapsamı gereğinden fazla 300 satır kod tarafından görülebilirse, bu gerçek bir mühendislik sorunu olabilir, ancak bu adsız bloklarla çözülmesi gereken bir sorun değildir.
Başka bir şey yoksa, her yerde anonim bloklar kullanmak, aptalca değil, aptalca değildir ve egzotik kod, kendiniz olmasa da, yıllar sonra başkaları tarafından nefret edilme riskini taşır.
Kapsam Azaltmanın Pratik Yararı
Değişkenlerin kapsamını azaltmanın nihai yararı, devlet yönetimini doğru almanıza ve doğru tutmanıza izin vermek ve bir kod tabanının herhangi bir kısmının - kavramsal değişmezleri koruyabilmeniz için ne olduğu hakkında kolayca akıl vermenize izin vermektir. Tek bir işlevin yerel durum yönetimi o kadar karmaşıksa, sonlandırılmış ve iyi olması amaçlanmayan koddaki anonim bir bloğu kullanarak kapsamı zorla azaltmak zorunda kalırsanız, o zaman yine, işlevin kendisinin yeniden incelenmesi gerektiğinin bir işareti . Yerel bir işlev kapsamındaki değişkenlerin durum yönetimi hakkında akıl yürütme zorluğunuz varsa, tüm sınıfın her yöntemine erişilebilen özel değişkenler hakkında akıl yürütmenin zorluğunu hayal edin. Görünürlüklerini azaltmak için adsız blok kullanamayız. Benim için değişmezlerin bakımını yapmakta zorluk çekeceğiniz bir noktaya gelmemek koşuluyla, değişkenlerin ideal olarak pek çok dilde olması gerekenden biraz daha geniş bir kapsama alanına sahip olma eğiliminin kabul edilmesi ile başlamaya yardımcı olur. Pragmatik bir bakış açısıyla kabul ettiğim gibi, isimsiz bloklarla çözülecek bir şey değil.