Yorumlanan kod değerli belgeler olabilir mi?


83

Aşağıdaki kodu yazdım:

if (boutique == null) {
    boutique = new Boutique();

    boutique.setSite(site);
    boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
    boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
    boutique.setNom(fluxBoutique.getNom());
    boutique.setSelected(false);
    boutique.setIdWebSC(fluxBoutique.getId());
    boutique.setDateModification(new Date());

    boutiqueDao.persist(boutique);
} else {
    boutique.setSite(site);
    boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
    boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
    boutique.setNom(fluxBoutique.getNom());
    //boutique.setSelected(false);
    boutique.setIdWebSC(fluxBoutique.getId());
    boutique.setDateModification(new Date());

    boutiqueDao.merge(boutique);
}

Burada bir yorum satırı var. Ama bence ifve arasındaki farkın ne olduğunu açıkça ortaya koyarak kodu daha açık hale getirdiğini düşünüyorum else. Renk vurgulamada fark daha da belirgindir.

Böyle bir kodu yorumlamak iyi bir fikir olabilir mi?

Yanıtlar:


109

Cevapların çoğu, bu özel olayı yeniden nasıl ele aldığına odaklanır, ancak kodun yorumlanmasının genellikle neden kötü olduğu konusunda genel bir cevap vereyim:

İlk önce, yorumlanan kod derlenmedi. Bu açık, ama bu demek oluyor ki:

  1. Kod çalışmayabilir bile.

  2. Yorumun bağımlılıkları değiştiğinde açıkça belli olmaz.

Yorumlanan kod çok "ölü kod". Orada ne kadar uzun süre oturursa, o kadar fazla çürür ve bir sonraki geliştiriciye daha az ve daha az değer sağlar.

İkincisi, amaç belirsizdir. Neden rastgele yorumlanmış satırlar bulunduğuna ilişkin bağlam sağlayan daha uzun bir yoruma ihtiyacınız var. Sadece yorumlanmış bir kod satırı gördüğümde, neden oraya girdiğini anlamak için oraya nasıl gittiğini araştırmalıyım. Kim yazdı? Ne taahhüdü? Taahhüt mesajı / içeriği neydi? Ve benzeri.

Alternatifleri düşünün:

  • Amaç, bir fonksiyon / api kullanmanın örneklerini sağlamaksa, bir birim testi sağlayın. Birim testleri gerçek koddur ve artık doğru olmadıklarında kırılırlar.
  • Amaç kodun önceki bir versiyonunu korumaksa, kaynak kontrolünü kullanın. Daha önceki bir sürümü kullanıma almayı tercih ederim, daha sonra bir değişikliği "geri almak" için kod tabanı boyunca yorumları değiştirdim.
  • Amaç aynı kodun alternatif bir versiyonunu korumaksa, kaynak kontrolünü kullanın (tekrar). Sonuçta dalları bunun için var.
  • Amaç yapıyı netleştirmekse, daha belirgin hale getirmek için kodu nasıl yeniden yapılandırabileceğinizi düşünün. Diğer cevapların çoğu, bunu nasıl yapabileceğinize güzel bir örnektir.

5
Bence önemli bir nedeniniz eksik: Belgeleme: Amaç, alternatif tasarım seçeneklerini belgelemekse, alternatifin bir açıklaması ve özellikle de niçin atıldığının nedeni, orijinal kod yerine verilmelidir.
Sarien

14
Tasarım seçenekleri bir insan dilinde bir programlama diline göre daha iyi açıklanmaktadır.
Mark E. Haase,

3
Projemi devralacak müteahhitlerin kaynak kontrolünde alternatif / önceki / başarısız bir uygulamanın var olduğunu bilmeleri nasıl mümkün olabilir? Yeni geliştiricilerin tüm sürüm geçmişlerini incelemeleri ve günlüklerini değiştirmeleri bekleniyor mu? Veya her faydalı alternatif uygulama için önceki bir taahhüdün karma bağlantısını bağlamak için yorumu kullanmak yaygın bir uygulamadır? Eğer öyleyse, hiç farketmedim.
Moobie

Buna rağmen bir uyarı var. Bazen, iki eşdeğer kod yaklaşımı, performans ve okunabilirlik açısından birinin performans gösterdiği ve diğerinin okunabileceği şekilde farklılık gösterebilir. Böyle bir durumda, performans değişkenini kullanmak kabul edilebilir , ancak okunabilir değişkeni yorumlara koymak böylece kodun amacını anlamak daha kolaydır. Bazen, bir (yorumlanmış) kod satırı ayrıntılı bir açıklamadan daha net olabilir.
Flater

263

Bu kodla ilgili en büyük sorun, bu 6 satırı kopyalamanız. Bu çoğaltmayı ortadan kaldırdığınızda, bu yorum işe yaramaz.

Bir boutiqueDao.mergeOrPersistyöntem oluşturursanız, bunu şu şekilde yeniden yazabilirsiniz:

if (boutique == null) {
    boutique = new Boutique();
    boutique.setSelected(false);
}

boutique.setSite(site);
boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
boutique.setNom(fluxBoutique.getNom());
boutique.setIdWebSC(fluxBoutique.getId());
boutique.setDateModification(new Date());

boutiqueDao.mergeOrPersist(boutique);

Belirli bir nesneyi yaratan ya da güncelleyen kodlar yaygındır, bu nedenle örneğin bir mergeOrPersistyöntem oluşturarak bir kez çözmelisiniz . Bu iki durum için tüm atama kodunu kesinlikle çoğaltmamalısınız.

Birçok ORM bunun için bir şekilde destek sağlamıştır. Örneğin id, sıfır ise yeni bir satır oluşturabilir ve sıfır değilse varolan bir satırı güncelleyebilir id. Kesin biçim, söz konusu ORM'ye bağlıdır ve kullandığınız teknolojiye aşina olmadığım için size bu konuda yardımcı olamam.


Bir mergeOrPersistyöntem oluşturmak istemiyorsanız , kopyalamayı başka bir şekilde, örneğin bir isNewBoutiquebayrak ekleyerek ortadan kaldırmalısınız . Bu hoş olmayabilir, ancak bütün atama mantığını çoğaltmaktan çok daha iyidir.

bool isNewBoutique = boutique == null;
if (isNewBoutique) {
    boutique = new Boutique();
    boutique.setSelected(false);
}

boutique.setSite(site);
boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE + fluxBoutique.getLogo());
boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE + fluxBoutique.getUrl());
boutique.setNom(fluxBoutique.getNom());
boutique.setIdWebSC(fluxBoutique.getId());
boutique.setDateModification(new Date());

if (isNewBoutique)
    boutiqueDao.persist(boutique);
else
    boutiqueDao.merge(boutique);

166

Bu kesinlikle korkunç bir fikir. Niyenin ne olduğu belli değil. Geliştirici yanlışlıkla hattı yorumladı mı? Bir şeyi test etmek için mi? Neler oluyor?!

Her iki durumda da kesinlikle eşit olan 6 çizgiyi görmem dışında. Aksine, bu kod çoğaltmasını önlemelisiniz. Daha sonra bir durumda setSelected'ı ayrıca çağırdığın daha açık olacaktır.


9
Kabul. Yorumlanan çizginin kaldırılmış eski davranış olduğunu görmeyi varsayardım. Bir yorum gerekirse, kod değil, doğal dilde olmalıdır.
Jules

4
Tamamen katılıyorum! Geçtiğimiz günlerde, bu uygulama nedeniyle neredeyse tamamen okunamayan bazı uygulamaları anlamaya ve temizlemeye çalışmak için saatler harcadım. Ayrıca, diğer tüm kodlarla bağlantısı kesilmiş ancak kaldırılmamış olan kodu da içerir! Bunun sürüm kontrol sistemlerinin arkasındaki asıl amaç olduğuna inanıyorum. Onlarla birlikte gelen değişikliklerin yanı sıra yorumları da var. Sonunda, bu uygulama nedeniyle büyük ölçüde tabağıma en az 2 hafta iş ekledim.
bsara

Bu yazıda benzer bir bakış açısı:
Yorumlanan

120

Hayır, bu korkunç bir fikir. Bu kod parçasına dayanarak aşağıdaki düşünceler aklıma geldi:

  • Bu satır, geliştiricinin hatalarını ayıkladığı ve satırı eski durumuna getirmeyi unuttuğu için yorumlandı.
  • Bu satır, bir zamanlar iş mantığının bir parçası olduğu için yorumlandı, ancak artık geçerli değil.
  • Bu satır, üretimde performans sorunlarına neden olduğu ve geliştiricinin üretim sistemi üzerindeki etkisinin ne olduğunu görmek istediği için yorumlanmıştır.

Binlerce satır yorum kodunu gördükten sonra, şimdi gördüğümde mantıklı olan tek şeyi yapıyorum: Hemen kaldırıyorum.

Yorumlanan kodu bir havuza teslim etmek için makul bir neden yoktur.

Ayrıca, kodunuz çok fazla çoğaltma kullanıyor. Bunu mümkün olan en kısa sürede insanın okunabilirliği için optimize etmenizi öneririm.


1
Ancak yinelenen koddan kurtulmam, bir optimizasyon olarak pek görülemez sanırım.
Alexis Dufrenoy

23
insan okunabilirliği için bir optimizasyondur
jk.

11
@Traroth, hız, bellek kullanımı, güç tüketimi veya başka bir metrik değer için optimize edebileceğiniz için, okunabilirlik için optimize edemeyeceğinizi göremiyorum (bir metrik olarak biraz daha yünlüdür)
jk.

3
Gerçekten, insan tarafından okunabilirliği kastediyordum. Buradaki küçük ipucu: programlamadaki en önemli sorumluluğunuz sizin kodunuzdur. Yani, daha az burada gerçekten daha fazla.
Dibbeke

4
Borç olarak Yazılım ayrıca tedavi edilir c2.com/cgi/wiki?SoftwareAsLiability Oradan: "Daha fazla kod üretmek her zaman bir kazanç değildir. Kodun test edilmesi ve bakımı pahalıdır, bu yüzden aynı iş daha az kodla yapılabilirse bir artı .. ölü kodu yorumlamayın, sadece silin. Yorumlanan kod eski ve işe yaramaz hale gelir, çok hızlı bir şekilde kullanılabilir, bu nedenle karışıklığı kaybetmek için er ya da geç erteleyebilirsiniz. ."
ninjalj

51

CodesInChaos'un cevabını eklemek isterim, bunu daha küçük yöntemlerle yeniden değerlendirebileceğinizi işaret ederek . Yaygın işlevselliği kompozisyonla paylaşmak, koşullardan kaçınır:

function fill(boutique) {    
  boutique.setSite(site);
  boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
  boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
  boutique.setNom(fluxBoutique.getNom());
  boutique.setIdWebSC(fluxBoutique.getId());
  boutique.setDateModification(new Date());
}    

function create() {
  boutique = new Boutique();      
  fill(boutique);
  boutique.setSelected(false);
  return boutiqueDao.persist(boutique);
}

function update(boutique) {
  fill(boutiquie);
  return boutiquieDao.merge(boutique); 
}

function createOrUpdate(boutique) {
  if (boutique == null) {
    return create();
  }
  return update(boutique);  
}

6
Bence buradaki en temiz öneri.
Alexis Dufrenoy

+1 ve ayrıca nullnesnelerin etrafından dolaşmaktan kaçındıkça, daha iyi olduğunu da ekleyeceğim (Bu çözümün iyi bir örnek olduğunu düşünüyorum).
Nadir Sampaoli

I geçecek boutiqueDaogirdi olarak createve update.
Mutlu Yeşil Çocuk Naps

Bu nasıl işe yarayabilir? Ne zaman ve ne zaman arayacağınızı ve güncellemeyi ne zaman arayacağınızı nasıl bilebilirim? Orijinal kod, butiğe bakar ve güncellenmesi veya yaratılması gerekip gerekmediğini bilir. Bu sadece siz yaratma veya güncelleme çağrısı yapana kadar hiçbir şey yapmaz ...
Lyrion

Lyrion: Önemsiz, bu kodu netlik için de ekleyeceğim.
Alexander Torstling,

27

Bu açıkça kod yorumladı için iyi bir durum olmasa da, garanti olduğunu düşündüğüm bir durum var:

// The following code is obvious but does not work because of <x>
// <offending code>
<uglier answer that actually does work>

Bu, daha sonra görenlerin bariz iyileşme olmadığına dair bir uyarıdır.

Düzenleme: Küçük bir şeyden bahsediyorum. Büyükse bunun yerine açıklarsınız.


5
Neyin var // the following part done like it is because of X? Açıklamak niçin senin bir işi o şekilde yaptım de bilmiyordun neden değil bazılarında buna özellikle yol. Özel örneğinizde, potansiyel olarak büyük bir yorum kodu bloğuna olan ihtiyacı tamamen ortadan kaldırır. (Aşağı oy vermedim, ancak bunun neden düşürüleceğini kesinlikle görebiliyorum.)
CVn

13
Buna açıkça diğer kodlayıcılar yapar (ve daha sonra kendinizi gün / hafta / ay) evet çünkü Michael, sen mi o temizleyici / daha zeki yaklaşım deneyin ama hayır, çünkü X işe yaramadı, bu yüzden olmamalı tekrar denemek için can atıyorum. Bunun tamamen meşru bir yaklaşım olduğunu düşünüyorum ve bu ne yazık ki gömülü cevabı iptal etti.
Garrett Albright

1
@GarrettAlbright: Teşekkürler, birinin aldığını görmekten memnun oldum.
Loren Pechtel

3
@LorenPechtel: Sadece bu değil, neredeyse aynı yazıyordum. Hangi "bariz" çözümlerin zaten başarılı olmadan denendiğini ve neden işe yaramadıklarını çabucak bilmenin çok, çok yararlı olduğu durumlar vardır.
JensG

3
Açıklamada başarısız olan kodun yanı sıra, farklı bir üretim ortamında daha verimli olabilecek kodun alternatif uygulamalarını da yorumlayacağım. Örneğin, bir algoritmanın hem basit bir üstel zaman versiyonunu hem de karmaşık bir polinom zaman versiyonunu kodladım. Ancak mevcut üretimde nküçük ve üstel algo çok daha hızlı. Daha nsonra bir şekilde değişecek olursa , projemi izleyen gelecekteki bir geliştirici, kaynak kontrolündeki yüzlerce komisyon içinde derinlere gömülen kodun farklı bir uygulamasını nasıl bilebilir?
Moobie

14

Bu özel örnekte, yorumlanan kodu büyük ölçüde Dibkke'nin cevabında belirtilen nedenlerden dolayı çok belirsiz buluyorum . Diğerleri, bir nedenden dolayı mümkün olmuyorsa (örneğin, satırlar benzer, ancak yeterince yakın değil), örneğin, bunu yapma eğiliminden kaçınmak için kodu yeniden düzenleyebileceğiniz yollar önerdi:

// Bu butik seçimini kaldırmaya gerek yok, çünkü [WHATEVER]

Bununla birlikte, kodun bırakılmasının (hatta yorum eklenmiş olsa bile) kodunun anlaşılmaz olmadığı bazı durumlar olduğunu düşünüyorum. MATLAB veya NumPY gibi bir şey kullanıldığında, çoğu zaman 1) bir dizi üzerinde yinelenen, bir anda bir öğe işleyen veya 2) tüm diziyi aynı anda çalıştıran eşdeğer bir kod yazılabilir. Bazı durumlarda, ikincisi daha hızlıdır, fakat okuması çok daha zordur. Bazı kodu vectorized eşdeğeriyle değiştirirsem, orijinal kodu yakındaki bir yoruma gömdüm, şöyle:

%% Aşağıdaki vectorized kodu bunu yapar:

% for ii in 1:N
%    for jj in 1:N
%      etc.

% ancak matris sürümü, tipik girdilerde ~ 15x daha hızlı çalışır (MK, 03/10/2013)

Açıkçası, iki versiyonun aslında aynı şeyi yapması ve yorumun ya gerçek kodla senkronize kalması ya da kod değişirse kaldırılması gerektiğine dikkat etmek gerekiyor. Açıkçası, erken optimizasyon hakkında her zamanki uyarılar da geçerlidir ...


“Açıkçası, iki versiyonun aslında aynı şeyi yapması ve yorumun ya ... ile eşit kalmasına dikkat etmek gerekiyor…” - işte bunun neden bunun iyi bir fikir olmadığını açıkladınız .
sleske

1
Bu, tüm yorumlarda bir sorun değil mi? Bazı vektörleştirilmiş kod, yorumların faydalı olmasına ve “kontrolsüz” bir sürüme sahip olmanın hata ayıklama için kullanışlı olabileceği konusunda yeterince açık değildir.
Matt Krause,

Doğru. Yine de, yorumu mümkün olduğunca kısa tutmaya çalışıyorum, kaynak kodun tamamını kullanmayın. Her neyse, bir örneğiniz varsa, onu en iyi nasıl okunur hale getireceğinizi sormak iyi bir soru olabilir (burada veya codereview.se'da).
sleske,

1
Son durumda, her iki kod türünü de derlenebilir kod olarak tutardım.
CodesInChaos

12

Yararlı yorum kodu gördüğüm tek zaman, her seçeneğin kodunun sağlandığı, ancak yorumların kaldırılmasını sağlayarak ayarların etkinleştirilmesini kolaylaştıran config dosyalarındaydı:

## Enable support for mouse input:
# enable_mouse = true

Bu durumda, yorum kodu, kullanılabilir tüm seçeneklerin ve bunların nasıl kullanılacağının belgelenmesine yardımcı olur. Aynı zamanda varsayılan değerleri kullanmak da gelenekseldir, bu nedenle kod ayrıca varsayılan ayarları belgelemektedir.


7

Genel olarak konuşursak, kod yalnızca kodu yazan kişiye kendini belgelendirir. Dokümantasyon gerekiyorsa, dokümantasyon yazın. Bir kaynak kodu tabanındaki yeni bir geliştiriciden, neler olduğunu yüksek düzeyde anlamaya çalışmak için binlerce kod satırını okuyacak şekilde beklemek kabul edilemez.

Bu durumda, yorum yapılan kod satırının amacı, iki yinelenen kod örneği arasındaki farkı göstermektir. Farkı bir yorum ile daha sonra belgelendirmeyi denemek yerine, kodu yeniden yazıp anlamlı hale getirin. O zaman, hala kod hakkında yorum yapmak gerektiğini düşünüyorsanız, uygun bir yorum yazın.


2
Bu oldukça doğru çalıyor. Pek çok insan (kendim dahil) kodlarının o kadar harika olduğunu düşünüyor: dokümantasyona ihtiyacı yok. Bununla birlikte, dünyadaki herkes, tam olarak belgelenmemiş ve yorumlanmamışsa, gobbledygook'u bulur.
Ryan Amos

" kod yalnızca kodu yazan kişiye kendi kendini belgeliyor " - Lütfen bir yıl önce yazdığınız karmaşık, açıklanmamış bir kod parçasını seçin ve sınırlı bir süre içinde anlamaya çalışın. Yapamaz mısın? Hata.
JensG

Bence biraz daha farklı. Pek çok iyi yazılmış kod anlaşılabilir ve yorum yapılmadan anlaşılabilir. Sorun, devam edecek yalnızca karmaşık detaylarınız olduğunda büyük resmi (oldukça yerel düzeyde bile) anlamaya çalışıyor. Yorumlar, açık olmayan kod parçalarını açıklamak için iyidir, ancak iyi dokümanlara sahip olduğunuzda, her bir fonksiyonun, sınıfın ve modülün gerçekte ne olduğunu açıklayan, uygulamanın anlaşılması için daha az yardıma ihtiyacınız olacaktır.
Carl Smith

4

Hayır, yorumlanan kodlar bayatlanır ve kısa sürede değersizleşir, uygulamanın bir yönünü ve mevcut tüm varsayımları beraberinde getirdiği için genellikle zararlıdır.

Yorumlar arayüz ayrıntılarını ve amaçlanan işlevi içermelidir; "amaçlanan işlev" şunları içerebilir: önce bunu deneyelim, sonra deneyelim, sonra başarısız olduk.

Gördüğüm programcılar yorumlarda bir şeyler bırakmaya çalışıyorlar, yazdıklarına aşık, bitmiş ürüne bir şey eklemiyor olsa bile kaybetmek istemiyorlar.


2

Çok nadir durumlarda olabilir, fakat yaptığınız gibi değil. Diğer cevaplar bunun sebeplerini oldukça iyi ortaya koydu.

Nadir durumlardan biri, dükkanımda tüm yeni paketlerin başlangıç ​​noktası olarak kullandığımız ve önemli bir şeyin dışarıda bırakılmadığından emin olmak için kullandığımız bir şablon RPM özelliğidir. Paketlerimizin çoğu, ancak standart bir adı olan ve bir etiket ile belirtilen kaynakları içeren bir tarball'a sahip değildir:

Name:           foomatic
Version:        3.14
 ...
Source0:        %{name}-%{version}.tar.gz

Kaynakları olmayan paketler için, standart formatı korumak ve birisinin geliştirme sürecinin bir parçası olarak sorunu durdurduğunu ve düşündüğünü belirtmek için etiketi yorumlayıp üzerine başka bir yorum koyarız:

Name:           barmatic
Version:        2.71
 ...
# This package has no sources.
# Source0:        %{name}-%{version}.tar.gz

Bildiğiniz kodları kullanmayacaksınız, çünkü başkalarının kapsadığı gibi, oraya ait bir şeyle karıştırılabilir. Yapabilir. ancak, neden bir kodun eksik olmasını beklediğini açıklayan bir yorum eklemek için yararlı olun:

if ( condition ) {
  foo();
  // Under most other circumstances, we would do a bar() here, but
  // we can't because the quux isn't activated yet.  We might call
  // bletch() later to rectify the situation.
  baz();
}

5
Muhtemelen bu yorum olsa kod yorumlanmamıştır.
jk.

1
@jk: Muhtemelen haklısın.
Blrfl

1

Yorumlanan kod uygulama tarafından kullanılmaz, bu yüzden neden kullanılmadığını belirten başka yorumlar da eşlik etmelidir . Ama bu bağlamda, orada olan yorumladı aşımı kod yararlı olabilir durumlar.

Aklıma gelen, bir sorunu ortak ve çekici bir yaklaşım kullanarak çözdüğünüz bir durumdur, ancak daha sonra gerçek sorununuzun gereksinimlerinin bu sorundan biraz farklı olduğu ortaya çıkmaktadır . Özellikle gereksinimleriniz çok daha fazla kod gerektiriyorsa, bakım verenlerin eski yaklaşımı kullanarak kodu "optimize etme" eğilimi büyük olasılıkla güçlü olacak, ancak bunu yapmak sadece hatayı geri getirecektir. “Yanlış” uygulamanın yorumlarda çevrede tutulması bunu ortadan kaldırmaya yardımcı olacaktır, çünkü bu durumda bu yaklaşımın neden yanlış olduğunu göstermek için kullanabilirsiniz .

Bu, çok sık meydana geldiğini hayal edebileceğim bir durum değil. Genellikle, örneklem "yanlış" bir uygulama içermeden olayları açıklamak yeterli olacaktır. Ama olabilir soru, yararlı olabilir, ister evet, olabilir yaklaşık olduğundan böylece, yeterli değil dava düşünün. Sadece çoğu zaman değil.


1
Üzgünüz, ancak yorum kodunun hiçbir değerini göremiyorum. Yorumlanan kod kullanılmaz, bu nedenle üretim kodunda yeri yoktur.
Vladimir Kocjancic

1
Lütfen "kullanılmış" kelimesini tanımlayın.
JensG

Sanırım "idam" anlamına geliyordu
Alexis Dufrenoy

-2

Bu iyi görünmüyor dostum.

Yorumlanan kod ... kod değil. Kod mantığın uygulanması içindir. Bir kodu kendi içinde daha okunaklı kılmak bir sanattır. @CodesInChaos zaten önerdiği gibi tekrarlayan kod satırları mantık çok iyi bir uygulama değildir .

Gerçekten gerçek bir programcının mantıksal uygulama yerine okunabilirliği tercih edeceğini düşünüyor musunuz? (bu arada, mantıklı temsilimize koymak için yorumlarımız ve 'tamamlayıcılarımız').

Endişelendiğim kadarıyla bir derleyici için bir kod yazmalı ve bu iyidir - eğer 'o' bu kodu anlarsa İnsan tarafından okunabilirliği için Yorumlar geliştiriciler için (uzun vadede), bu kodu tekrar kullanan kişiler için (örneğin, testciler) iyidir.

Aksi taktirde burada daha esnek bir şey deneyebilirsiniz.

butik.setSite (site) ile değiştirilebilir

setsiteof.boutique (site). Okunabilirliği artırabileceğiniz OOP'un farklı yönleri ve perspektifi vardır.

Bu kod ilk başta çok çekici görünmekle birlikte, bir kişi derleyici işini mükemmel bir şekilde yaparken bir yandan da insan tarafından okunabilirlik için bir yol bulduğunu düşünebilir ve bu uygulamayı izlemeye başlıyoruz. Zamanla ve daha karmaşık hale geleceği için daha karmaşık.


15
“Endişelendiğim kadarıyla bir derleyici için bir kod yazmalıyım” Ah lütfen, yapma. Doğrudan Obfuscated C Yarışması'ndan ve beğenilerinden alınabilecek gibi görünen canavarlarla sonuçlanır. Bilgisayarlar ikilidir, ancak insanlar bulanık mantık kullanırlar (bu arada evcil hayvan sahipleri için de iki katına çıkar). Bilgisayar zamanı bugün serbest olanın yanında (sadece elektrik kullanımı), programcı zamanı nispeten çok pahalı. İnsanlar için kod yazın, derleyici bunu anlayacaktır. Derleyicinin kodunu insanlara bakmaksızın yazın, takımda pek çok arkadaş edinemezsiniz.
bir CVn

3
" bir derleyici için kod yaz " - Aslında yapmazsın. Aklınızda bulundurmanız gereken kişi, kodunuzu korumak için görevi teslim eden kişidir.
JensG
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.