“Güzel görünme” kodunu takma saplantısının bir faydası var mı?


34

Bazen kodun "güzel görünmesini" sağlamak için acı çekerek çok fazla zaman harcıyorum. Demek istediğim şeyleri simetrik gösteriyor. Aslında bir şeyin "güzel" ya da "temiz" görünmediği gibi atlayıp atılmadığını görmek için hızlıca bütün bir sınıf içinde ilerleyeceğim.

Vaktimi boşa mı harcıyorum? Bu tür davranışlarda herhangi bir değer var mı? Bazen kodun işlevselliği veya tasarımı değişmeyebilir, sadece daha iyi görünmesi için yeniden yapılandıracağım.

Tamamen OKB muyum yoksa bu konuda saklı bir fayda var mı?


8
Sadece Ctrl-E, D;)
Town

1
Bu, şirketin biçimlendirme kurallarına uygun bir koşuda hayatta kalmayacaksa, fayda oldukça küçüktür.

2
Neden kodunuzu otomatik olarak biçimlendirmek için bir program yapmıyorsunuz, bu yüzden mutlu olacaksınız ve zaman kaybetmeyeceksiniz?
Jetti,

1
Biçimlendirme onu okunaklı kılar, böylece önemlidir, ancak kesinlikle "akıllı" olun - otomatik biçimlendiricileri kullanın. Bu biçimlendirme yeterince iyi değilse - o zaman bu noktada OKB olabilirsiniz.
Catchops,

1
Peki, Laravel'inizin altyapısı inanılmaz derecede güzel
Mr.Web

Yanıtlar:


32

Bir otomatik formatlayıcı kullanın. Kodu gerçekten el ile düzenlemek için bu kadar zaman harcıyorsanız, kesinlikle zorlanmadığınız / sıkılmadığınızı tahmin etmeye hazırım, çünkü bunun için kesinlikle hiçbir neden yok. Ctrl + K, VS'deki Cntrl + D tüm belgeyi biçimlendirir. Biraz daha ağır bir şey istiyorsanız, Style Cop gibi bir şey kullanabilirsiniz.

Kodunuzla gurur duymak iyidir, ancak akıllı olma pahasına geldiğinde (en verimli çözümü arayın. Bu durumda, sıkıcı bir işlemi otomatikleştirmek için bir araç kullanarak) ve işlerin yapılması (başka ne yapabilirdi?) Bu saatler boyunca üzerinde çalıştınız?).


1
Neden tüm kalın ikinci paragraf?
Steven Jeuris

5
@FrustratedWithFormsDesigner: Yazının yarısı vurgulanırsa vurgu yok. : P
Jon Purdy

2
@Steven, @Jon - kaydetti ve düzenlendi.
Morgan Herlocker,

3
Hafifçe ironik bir yorum zinciri. ;)
TaylorOtwell

2
@StuperUser, daha fazla tembel ve işleri otomatikleştirmek gibi :)

10

Daha iyi anlaşılmasını sağlayacak bir şeyi değiştirmiyorsanız, o zaman evet, zamanınızı boşa harcıyorsunuz.


3
+1: Toplam atık. Diğer insanlar farklı fikirlere sahip ve güzeldir ve kodunuzu yeniden biçimlendirir ve ayrıca ideal biçimlendirmelerini neden izlemediğiniz hakkında şikayetçi sorular yazarlar.
S.Lott,

Tüm kodu bir satıra koymak işlevselliğini değiştirmez, ancak yeni satırları kullanmak daha anlaşılır hale getirir.
Steven Jeuris,

@Steven Jeuris: Şaşkınlıktan mı bahsediyorsunuz? Öyleyse neden? Soru öyle gelmedi. Zaman kaybı gibi geldi. Kodun o kadar kötü biçimlendirildiği ve okunamıyor olduğu fikrine nereden ulaştınız?
S.Lott,

@ S.Lott: Hayır şaşırtmacadan bahsetmiyorum. Tüm kodu tek bir satıra koymak korkunç bir şaşırtmaca olacaktır. :) Ben ise bu noktayı yapmaya çalışıyordu 'değişen' bir şey, bu olabilir daha iyi kod anlamak için izin verir. Daha ayrıntılı bir açıklama için Neville'in cevabına bakınız. Ps: Ayrıca bunun gerçekten boş bir cevap olduğuna inanıyorum. Tabii ki, bir şeyi değiştirdiğinizde, işe yaramaz olan kodu daha iyi anlamanıza izin vermeyen, ancak bu oldukça özneldir ve aslında soru budur.
Steven Jeuris

6

Hiçbir şey gizli, hoş kodun okunması ve bakımı kolaydır.

Büyük bir kod temeli olmadıkça "Saat" biraz fazla görünüyor. Her şey mükemmel olmak zorunda değil, sadece iyi olmak zorunda


5

Bu bir yargı meselesi; Eğer saatlerini harcıyorsan, en tepeye gideceğini söyleyebilirim. Ancak, bir otomatik biçimlendiricinin yapamayacağı bir insanın yapabileceği şeyler var ve kodunuzu kurumsal kodlama standartlarında yakalaması zor olan daha okunaklı hale getirmek için yapabileceğiniz şeyler var.

Örneğin, bir sınıfta değişkenleri bildirirken, mantıksal gruplara sahip olmayı severim - mantığı takip etmeyi kolaylaştırır.

Kod genellikle "bir kez yaz, çok oku" olarak kabul edilir, bu nedenle okuma deneyimini keyifli hale getirmek iyi bir alışkanlıktır - ama bence düzen açık bir adlandırma kuralları, temiz soyutlamalar ve iyi yapılandırılmış yöntem imzalarından çok daha az sorun.

Altta yatan düşünce süreci hatalı olduğu için WTF anlarına neden olan güzel formatlı kod gördüm. Harcayacak saatiniz varsa, yerleşim yerine tasarım ve yeniden düzenleme üzerine harcardım.


Kendi cevabımı yazmamı engelledin. ; p Çok iyi koydu!
Steven Jeuris

Bu yapıya ve adlandırma kurallarına dikkat etmek için +1, önemine göre biçim koz.
Morgan Herlocker,

4

Hayır, tamamen OKB olmuyorsunuz. Bir programcı olarak şimdiye kadar duyduğum en büyük iltifat şuydu: "Kodunuz o kadar temiz ki küçük kardeşim çözebilir."

Bir gün birinin kodunu desteklemesi gerekecek. Temiz kod desteği çok daha kolaydır. Ve bir gün sen olabilirsin. 6 ay veya bir yılda ne yaptığınızı hatırlamayacaksınız. Ancak temiz ve okunması kolaysa, hızlıca geri gelecektir.

Bu kod çöp ise, güzel çöp olmak için yardımcı olmuyor dedi. Ancak iyi yapılandırılmışsa ve sadece işlevsellik sorunları varsa, işlevselliği geliştirmek çok daha kolay olacaktır.


3

Hayır - kodun güzel görünmesini sağlamak için takıntılı olmak noktayı kaçırıyor .

İşte faydalı bulduğum bazı bilgelik parçaları:

Sor Neden Kod Düzenli olmak gerekiyor.

Güzel tanımınıza bağlı olarak zamanınızı boşa harcıyor olabilir ya da harcıyor olabilirsiniz.

Biçimlendirmenin Temel Teoremi, iyi görsel düzenin programın mantıksal yapısını gösterdiğini söyler. Kodun güzel görünmesi bir şeye değer, ancak kodun yapısını göstermekten daha az değer. [pg 732, Kod Tamamlandı 2. Baskı, Steve McConnell]

Koddaki Değişiklikleri İzlemek İçin Eşzamanlı Sürümler Sistemi Kullanıyorsanız - Kod Biçimlendirme Değişikliklerini Mantıksal / Özellik Ekleyen Değişikliklerle Aynı Taahhütte Karıştırmayın.

Değişiklikleri tespit etmeyi zorlaştıracak ve diğer ekip üyeleri dosyayı düzenliyorsa gereksiz birleştirme çatışmalarına neden olacaktır. Biçimlendirme değişiklikleri yapmanız gerekiyorsa, diğer ekip üyelerinin bu dosya üzerinde çalışmadığından emin olun. [Paraphrased, Pg 93, Subversion Kullanarak Pragmatik Sürüm Kontrolü, 2. Baskı]

Ayrıca Martin Fowler, 'iki şapka takma' ve gün boyunca aralarında geçiş yapma hakkında konuşuyor. Özellikler eklemek için bir şapka, yeniden düzenleme için bir şapka.

  1. Yeni bir özellik eklemeyi düşünüyorsunuz (Feature Hat)
  2. Anlamak, var olanları toparlamak için mevcut kodu inceliyorsunuz. (Refaktör Şapkası)
  3. Değişiklikleri Taahhüt Edin.
  4. Özelliği ekleyin. (Özellik Şapka) vb.

[Paraphrased pg 57ish, Refactoring, Martin Fowler]

Bu yüzden, tüm kod temelini güzelleştirmek için saatlerce harcamayın. Bir sonraki özelliği eklemek için gereken kodu yeterli şekilde düzeltmeniz yeterlidir.

Kısacası ... her kod parçasını ilk geldiğinizden daha iyi durumda bırakın.


2

Tamamen biçimlendirme yapıyorsanız, kodunuzun nasıl biçimlendirilmesini istediğinizi güzel bir yazıcıya öğretmek için biraz zaman harcamaktan muhtemelen daha iyidir. Bu biraz pahalı. Ancak, bu zamanlayıcıyı 2-3 kullanımda telafi edeceğinizi hayal ediyorum.

Gerçek refactoring ise, muhtemelen değil. Kavramsal olarak temiz kod, ileriye doğru değişiklik yapılması daha kolay olma eğilimindedir ve "her zaman temiz" değerine sahip olmak, etrafta başka kokulu kodlar olduğu için bir şeyleri atma eğilimini azaltır.


1

Biraz yardımcı olur, ancak üzerinde çok fazla zaman harcamaya değmez. Ayrıca, geliştirmelerinizin değişken kapsam belirleme, RAII, grup kopyala / yapıştırma kodu vb. Eklediğinden emin olun. Bunların hepsini yaparsanız, kodun bir yıl sonra ne yaptığını anlamanız gerektiğinde 1000 kat daha kolay hale gelir.


1

Temiz kod üretmelisiniz, ancak saat sürmemelidir.

C için, gnu-programı gnu-indent gnu-indent , eclipse'de Java için en azından bir kod formatlayıcı var ve sanırım diğer birçok dil için de araçlar var. Bir dosyayı doğru bir şekilde girmek için birkaç tık, kuralları belirli amaçlarla ihlal etmek istiyorsanız birkaç dakika, kısa anahtar-durum ifadeleri için yaptığım gibi:

 switch (foo) {
      case a:  foo (a);             break; 
      case b:  foob ();             break;
      case c:  /* intent. empty */
      case d:  foocd ();            break; 
      default: allPrettyAligned (); break; 
 }

belirtmek zor.


1

Bir şeyi kaymatarak temiz göründüğünü düşünüyorsanız, otomatikleştirilebilecek yüzeysel bir şeye odaklanıyorsunuz.

"Yanlış kodun yanlış görünmesi" konulu bu klasik makaleyi okuyun ve insanların neden çentiklenmenin (otomatik olarak yapılabildiğini) neden önemsiz olduğunu düşündüklerini göreceksiniz:

http://www.joelonsoftware.com/articles/Wrong.html

Özellikle bu liste:

Tamam, şu ana kadar bir programcı olarak üç başarı seviyesinden bahsettim:

1. Kirli olanları temiz bilmiyorsun.

2. Çoğunlukla kodlama sözleşmelerine uygunluk düzeyinde yüzeysel bir temizlik fikriniz var.

3. Yüzeyin altındaki belirsiz temizliğin ipuçlarını koklamaya başlıyorsunuz ve kodunuzu bulmanız ve düzeltmeniz için sizi rahatsız ediyorlar.

Daha da yüksek bir seviye var, bunun hakkında konuşmak istediğim şey de bu:

4. Kodunuzu kasten temiz bir şekilde temizlediğiniz için burnunuzun kodunuzun doğru olma olasılığını taşıdığı şekilde tasarlarsınız.

Gerçek sanat bu: Ekranda hataları ön plana çıkaran kuralları tam anlamıyla icat ederek sağlam bir kod oluşturmak.


0

"Saatler"? Pekala, cevabınızın "ve", "değil" olduğunu söyleyebilirim: evet, OKB oldunuz ama bunun bir faydası var.

Muhtemelen.

Kodunuzun hızlı okunmasını kolaylaştırıyor mu? Fonksiyonların, değişkenlerin vb. Kodunuzun daha net çalışmasını sağlıyor mu? Tazminat süreci sizi bazı tasarım kararlarını tekrar ziyaret etmeye ve sonuçta bıraktığınız ölü kodları çıkarmaya veya yarı pişmiş çözümleri çıkarmaya zorluyor mu? Eğer öyleyse, kesinlikle değere sahiptir.

Öte yandan, kodunuzu çalışmak için daha kolay hale getirmeden kendi estetik anlayışınıza çekici bir şekilde saptırmanın bir yolunu bulduysanız, o zaman evet, çok büyük bir zaman kaybı.

Bana gelince, bunun OKB'nin sonuna düşme eğilimindeyim - ama durmayacağım. Bir sınıf veya işlev için dokümantasyon sağlama, beni gerçekten işlerin nasıl yürüdüğü hakkında düşünmeye zorlar - Ben yazıyorum ki, ben olmayan biri onu anlayabilsin. Ve kendimi kodun neden olduğu gibi çalıştığı için bir sürü uyarı ve uyarıda bulunarak özür dilerim ve özür dilersem, bu bitmeden ilan etmeden önce bir kez daha ince ayar yapılması gerektiğini söyler.


0

Öncelikle kodunuzun güzel görünmesinde yanlış bir şey yoktur, çünkü sonunda kodun oluşturulması ve sunulması / biçimlendirilmesi ile gurur duymak istediğiniz bunun bir parçasıdır.

Bununla birlikte, iş arkadaşlarınız veya gelecekteki geliştiricileriniz için kodunuzu aşırı biçimlendirmemeye dikkat ederim. Senin için hoş, benim için hoş olmayabilir. :)


0

Sorunu (zorunlu davranış) ve belirtiyi (saplantılı biçimlendirme) tanırsınız.

Sebep ve tedavi ne olacak?

  • Çok fazla saat mi çalışıyorsun?
  • Sinirli, sıkılmış, endişeli misiniz?
  • Sıradaki göreviniz nedir? Yapmak istemediğin bir şey mi?
  • En son ne zaman tatil yaptın? Promosyon? Bir başarının tanınması?
  • Tükenmişlikle ilgili bir sorun mu var?
  • Ölüm Martında mısın?

Bazen bu semptomlar, cesurca değişiklik yapma veya ilerlemenin zamanının bir işaretidir.

Alt başlıklarına rağmen, Yourdon'un kitabında birçok yararlı öneri var ve birçok kuruluş için oldukça gerçek bir açıklama yapıyor.

http://dev.co.ua/docs/Edward%20Yourdon%20-%20Death%20March.pdf

Oldukça anlayışlı görünüyorsun ve bence cevabı biliyor olabilirsin.

Şimdi, kendinize hareket etmek için kendinize izin verin.


-4

Kutsal Sığır!
Siz insanlar hiç girintiyi duymadınız mı?

20 yıldan fazla süredir devam eden bir kod biçimlendirme aracı. Çok seçenekli bir seçeneği var, kodunuz istediğiniz şekilde, otomatik olarak formatlanabilir.

ermm - fakat yalnızca C ile çalışır ve bazıları C ++ ile çalışmaz .... (wtf? neden GNU yükseltmiyor?)


2
İlk cevabınıza katkıda bulunduğunuz için teşekkür ederiz. Kimin oy kullandığından emin değilsiniz, ancak lütfen Stack Exchange Programmers programcılar.stackexchange.com/ questions/how-to-answer hakkındaki soruları yanıtlamak için yönergelere hızlıca göz atın . Cevabınız muhtemelen bir ya da iki oy almak için bu kriterlere göre revize edilebilir.
GeliştiriciDon
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.