“//…” kod bloğunun sonundaki yorumlar} - iyi mi kötü mü? [kapalı]


18

Bu tür yorumların sıklıkla kullanıldığını gördüm:

function foo() {
   ...
} // foo

while (...) {
   ...
} // while

if (...) {
   ...
} // if

ve bazen bile

if (condition) {
   ...
} // if (condition)

Bu uygulamayı hiç anlamadım ve böylece hiç uygulamadım. Kodunuz çok uzunsa, bu sonun ne olduğunu bilmeniz gerekir }, o zaman belki de ayrı işlevlere bölmeyi düşünmelisiniz. Ayrıca, çoğu geliştirici aracı eşleşen brakete atlayabilir. Ve son olarak, benim için, KURU prensibinin açık bir ihlali; koşulu değiştirirseniz, yorumu da değiştirmeyi unutmamalısınız (ya da bakıcı için, hatta sizin için dağınık olabilir).

Peki neden insanlar bunu kullanıyor? Kullanmalı mıyız yoksa kötü bir uygulama mı?


PHP'de, kontrol yapıları için alternatif sözdizimini kullanıyorumif(condition): ... else: ... endif;
systemovich

@Geoffrey van Wyk - gerçekten mi? Hiç kimsenin bunları şablon dosyalarının dışında kullandığını görmedim. Onlar son derece standart dışı, ama her biri kendi için, sanırım.
Craige

4
@Craige: PHP tarafından yerel olarak desteklenen herhangi bir dil yapısı "Son derece Standart Dışı" değildir - PHP yorumlayıcısı "standart" ın ne olduğunu tanımlar .
Billy ONeal

Ada çoğu yapıların ucuna özel işaretleri vardır: if ... then ... end if; while ... loop ... end loop; procedure Foo is ... end Foo;. Okunabilirliğe yardımcı olduğunu düşünüyorum (ve yorumların olmadığı derleyici tarafından kontrol edilir).
Keith Thompson

Yanıtlar:


32

Kod o kadar uzunsa, parantezinizi kolayca takip edemezseniz, kodunuzun çoğu dil için yeniden düzenlenmesi gerekir.

Bununla birlikte, geçici dillerde (PHP gibi) geçerli olabilir, çünkü koşul veya döngü yapısının başlangıcını ve sonunu ayıran büyük bir HTML bloğuna sahip olabilirsiniz.


5
Html ile karıştırılmış PHP kullanıyorsanız, PHP için tamamen geçerli bir nokta. Gryffindor için 1 puan.

3
HTML ile karıştırılmış şablonlama dili olarak PHP ile bile girintili olabilirsiniz. PHP'yi şablonlama dili olarak kullanırken parantez kullanmamalısınız, aksine while(): endwhile;ve foreach(): endforeach;yapıları vb.
Kullanmalısınız

9
Gerçekten neden PHP yeniden düzenleme olmamalı görmüyorum. Muhtemelen başka bir dile.
Tom Hawtin - taktik

@Htbaa: Bunca zaman PHP kullandığım ve bunları bilmediğime inanamıyorum. Teşekkürler! Girintileme ile ilgili olarak, koşullu HTML'yi girintili olarak, onu oluşturan PHP'ye göre değil, sayfanın geri kalanıyla aynı tutmayı tercih ederim.
Matt Ellen

3
@ Tom: Güldüm ama suçlu hissediyorum. : P

17

Bu bir kod kokusu ve genellikle eski moda kod stilinden bir akşamdan kalma. İyi IDE'lerin yeniden düzenlenmesi daha zor ve şimdiki kadar yaygın olmayana kadar, bu nedenle yöntemler daha uzundu ve bu yorumlar daha iyi gezinmek için oradaydı.


15

Bu, birçok faktör tarafından kullanılmayan korkunç bir uygulamadır.

  • Modern IDE'lerin çoğu, düzeltme işareti her iki simgede olduğunda da karşılık gelen ayracı vurgular.
  • Temiz kod yazıyorsanız, yönteminizin 10 satırdan fazla olduğu bir yer nadiren bulunur.

Bu zihniyete sahip bir çok Java programcısının farkına varıyorum ve Java kodunun gerçekten kirli görünmesini sağlıyor ve odağı koddan uzaklara ve yorumlara doğru alıyor.

Son derece bu kullanılmasına karşı düşündürmektedir.


4
Bunu yapan bir iş arkadaşım (java geliştirici) var. // for ve // ​​yerine // rof ve // ​​fi kullanıyorsa. Beni delirtiyor ve her yerde yapıyor.
Jay

Evet, üzerinde ısrar eden bir tane vardı. AAAAAGHHHHH.
Rig

2
Bunun gerçekten Java veya Java programcıları ile bir ilgisi yoktur ve Java'da programlama yaparken yapılacak yaygın veya fiili standart bir şey değildir.
Jesper

1
+1.000 "korkunç bir uygulamadır".
scunliffe

6

Kod yazıldığından 10 kat daha fazla okunur.

Okumayı kolaylaştırırsa yapın.

Ayrıca bunu yapan herkese, işleri daha kolay okumak için başka yollara bakmaları gerektiğini de öneririm. Diğer insanların bahsettiği yeniden düzenleme teknikleri, farklı hatlardaki parantezler, vb. Hepsi iyidir. Kodun kendi kendini yorumlaması için işleri farklı işlevlere, yöntemlere veya sınıflara bölmek de iyidir. Çoğu "ifs" i ​​ortadan kaldırmanın ve "for" döngülerini bariz yerlere koymanın, böylece bunlardan herhangi birine olan ihtiyacı ortadan kaldırmanın yolları da vardır.

Ama bazen insanlar öğreniyorlar. Bu yaptıkları bir şey ise, kodu gerçekten daha okunaklı yapan, teşvik edin ve sonra da diğer bazı uygulamaları da teşvik edin. Öğrenen insanlar, nasıl başladıklarına bakılmaksızın cesaretlendirmeyi hak eder ve bundan faydalanırlar. "Bu kötü" demek, "Bu başka şey daha iyi" demek kadar kullanışlı değildir.


6
Bu ise kötü. Başlangıç ​​seviyesi ders kitapları bile bu vahşeti yapmaz. "Kod yazıldığından 10 kat daha fazla okunur" ... okuyucunun zamanını bu kodla boşa harcamamak için daha fazla sebep.
Thomas Eding

@trinithis 20 durumlu anahtar ifadeniz varsa ne olur? Bazen 20 farklı seçeneği desteklemeniz gerekir ve bunların çok seviyeli bir karar verme şemasında "yeniden düzenlenmiş" olmak yerine tek bir yerde toplanması daha iyidir.
quant_dev

Bu akranları küçümseyen kodlayıcılar tarafından bir uygulama olduğuna inanıyorum :) diğerleri sürece kodu okumak için daha akıllı değildir. gnerally ben bu uygulamaya karşıyım, ama tamam birisi coz yaparsa zor okunabilir kılan bir orman var. Bunu yine de yapmam!
WinW

1
@trinithis Kötü olup olmadığı değil, insanların daha iyi olmalarına yardımcı olmak için etkili yollar hakkındadır. Etkili olmak> doğru olmak. Ayrıca, eski kodu daha da karmaşık bir şekilde yeniden düzenlerseniz, bunu yapmak da son derece mantıklı bir şeydir. Bazen kötü şeyler daha iyi ara adımlar atabilir ve bundan daha iyi bir şeye yol açabilir.
Lunivore

1
@trinithis Üzgünüm, hepsi böyle bir satırda ne demek istediğini anlayamıyorum. Sanırım geliştiricilerin bunu öğrenebileceği kodları yeniden düzenlemenin başka yolları da var.
Lunivore

4

Ben bu tür bir şey dolu büyük (C ++) kod tabanı var:

int Class::AccessorMethod(void)
{
    return privateValue;
}//end AccessorMethod

Bu küçük bir şey için, bu "kod kokusu" içine "kod kokusu" ötesine geçer söyleyebilirim. Özellikle açılış parantezini bulmak için kapanış parantezini tuş vuruşuyla eşleştirebileceğim bir IDE'de. Daha uzun bir yöntem göz önüne alındığında, hala tel yorumunu terminal yorumu üzerinden alacağım. Bu tür yorumlar beni rahatsız ediyor ve ben onları gürültü olarak görme eğilimindeyim.


Um, sanırım bu sitedeki bazı biçimlendirmeleri alamıyorum; Orada bulunan her küme, yöntem gövdesi gibi kendi hattında olmalıdır.
PSU

C ++ olsa da genellikle gizli uygulama şeyler için üstte anonim bir ad alanı açacağım. Sonra bir noktada bu ayracı kapatıyorum ve burada yakın ayraçın ne anlama geldiğini bilmek faydalı.
CashCow

4

C ++ 'da bunun hala yararlı olduğu iki tutucu vardır ve "kodunuzu ayırın" tavsiyesi gerekli değildir:

  1. İsim alanları için. Bir ad alanı tüm dosyayı kapsayabilir ve bu son parantez bazen insanları atabilir, bu nedenle parantezin bir ad alanının kapatılması olduğunu belirten bir yorum eklemek yararlıdır. Şirketimdeki belirli kodlama stili için bu önemlidir, çünkü bu girintinin sadece bir dosyada yer açacağına karar verildiğinden ad alanlarını girintilemiyoruz.

  2. #İfdef / #endif çiftleri için. Bazen koşullu derleme için çok fazla kod var, iç içe geçme ile kötü olabilir ve sık sık kullandığımız editör girintiyi ortadan kaldırır, bu nedenle yorumlar hızlı bir genel bakış sırasında faydalıdır.


Ad alanı yorumu ve nedenleri için +1. Bunu tek seferde yapıyorum ve aynı nedenden ötürü
JohnB

+ uzun anahtar ifadeleri.
quant_dev

1

Benim için, kodun belirttiğiniz gibi bir yorum eklemek için kafa karıştırıcı olması gerekir.

Sadece // EĞER İfadesi diyorsa. O zaman neden orada olduğunu merak etmelisin.


Katılıyorum, eski bir okuldan ziyade yorumlanmış bir satır gibi görünüyor//endif
StuperUser

1

Brace'nizin neyi kapattığını görmenin alternatifi, açılışını yakın olanla aynı sütunda bulundurmaktır. Bunu çok daha net ve okunaklı buluyorum.

Yorum, normalde izlenmesi zor olduğunda faydalıdır, çünkü açık uzun zaman önce gerçekleşmiştir. Bu normalde sadece bir ad alanı için olmalıdır (özellikle derleme birimindeki uygulama ayrıntıları için kullanılan C ++ 'da anonim). Çoğu durumda neyi kapattığınız açık olmalıdır.


1

Bu, özellikle EVE gibi pencereli bir editör kullanıyorsanız, 80x24 karakter terminal pencerelerinde eski çalışma günlerinden büyük bir engel. Şimdi bile, işimin çoğunu vim kullanarak bir terminal oturumunda yapıyorum ve oturumu üç veya dört alt pencereye bölebilirim, böylece herhangi bir anda yalnızca birkaç satırı görüntüleyebilirim.

Bununla birlikte, pastırmamı birden fazla vesileyle kurtaracak olsa bile, konvansiyona asla ısınmadım. Sadece gürültü olarak görüyorum. Döngüleriniz veya koşullarınız bu kadar büyüyorsa, evet, yeniden düzenlemeye bakmak isteyebilirsiniz.


0

temelde bunu kullanmamanız için geçerli tüm nedenleri belirtirsiniz. Her saygın programcı bunları uygulamalıdır. Peki neden yok insanlar kullanmak? Çünkü bunu yanlış yapıyorlar ve daha iyisini bilmiyorlar.


erm, downvote lütfen açıklayınız. Sadece bu cevabı icat etmedim, gerçek bir yaşam deneyiminden kaynaklanıyor: yanımda birkaç ayak oturan meslektaşım 10'dan fazla kulak için programlama yapıyor ve onu açıklayana kadar bunun neden yanlış olduğu hakkında hiçbir fikri yoktu. .
stijn

Muhtemelen bazı ders kitaplarında kullanıldı, bu yüzden bir grup insan onu kullanarak üniversiteden çıktı? Tanıtım metninde bir yeri olabilir. Ayrıca, bir önişlemcide, özellikle # ifdef / endif, korumaları da içerir
Martin Beckett
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.