Yorumlara izin vermeyen bir dil daha okunabilir kod verir mi? [kapalı]


15

Sadece meraktan, yorumlara izin vermeyen bir dilin daha fazla okunabilir kod getirip getirmeyeceğini merak etmeye başladım.

Sonra tekrar, daha önce olduğu gibi kötü kod yazabilirsiniz çünkü umursamıyorsunuz. Ama ne düşünüyorsun?


44
Yorumlara izin vermeyen bir dil ile bunları kullanmayan geliştiriciler arasında bir fark olduğunu düşünüyor musunuz?
Jeremy Heiler

21
Yorumlara izin vermemenin, geliştiricileri daha fazla kendi kendini belgeleyen kod yazmaya zorlayacağı fikri saçmadır.
Adam Crossland

2
@ IDE / editör özelliği olan bir jeff dil özelliği değil IMHO
jk.

4
im geliştiricileri bir şey yapmaya zorlamak mümkün olduğundan emin değilim
jk.

2
@Adam @ jk01: geliştiricileri kodu belirli bir şekilde girintili yapmaya zorlayan bir dile bile sahipler ;-)
Joris Meys

Yanıtlar:


61

Programcıların yorum eklemenin başka bir yolunu bulacağını düşünüyorum ...

string aComment = "This is a kludge.";

7
Ben bu "yorum" nasıl birden fazla katmanı gibi
Logan Capaldo

29
Ek bir fayda, ikili dosyaya gidecek olması, böylece yorumları da görebilirsiniz! Tersine mühendisliği çok daha basit hale getirir.

1
Haklısın. Bunun yerine # ifdef ifadeleri kullanmamız gerekir.
James

9
Bu muhtemelen "programlama en iyi örnek içine " programlama aksine bir dil " in şimdiye kadar gördüğüm bir dil". =)
gablin

2
MOO'da yorumlar için destek vardır, ancak tüm programlar depolama için ayrıştırılır ve görüntülenmek üzere ayrıştırılır, böylece yorumlar kaybolur. Kalıcı yorumlar için deyim dize değişmezleri ala"this is a comment";
Ben Jackson

44

Bunun bu kadar basit olduğunu düşünmüyorum:

iyi yazılmış, kendi kendini belgeleyen kodlarda bile, yorum yazmanız gereken meşru durumlar vardır.


13
Yorumlar için + 1 kodun ne yaptığının basit bir anlatımından daha fazlasıdır. En iyi 'kendi kendini belgeleyen kodun' bile pek çok şeyin detaylandırılması için yorumları olması gerekir. Çoğu zaman, kodun dış bağımlılıkları, giriş varsayımları, uyarılar, iyileştirilebilir alanlar, bilinen güvenlik açıkları ve başka türlü kabul edilmeyen sayısız başka şey olacaktır. Yorumların birçok kullanımı vardır.
Adam Crossland

3
Kesinlikle. "Niyet" veya "neden" veya "doğruluk kanıtı" nı yorum yapmadan nasıl kaydedersiniz?
S.Lott

2
Kabul edildi, yorumlar "Ne" değil "Neden" olmalıdır. Koddan Ne elde edemeyen herkes kodu okumamalıdır.
Matthew,

3
@Matthew: Adil olmak gerekirse, kolayca deşifre edilmeyen bir kod yazabilirsiniz. Ama evet, okunabilir kod "ne" için en iyi kaynaktır.

14

Diyelim ki mükemmel bir programcısınız (ki öyle değilsiniz, ama diyelim)

Yazmadığınız şeylerle arayüz oluştururken kodda oluşabilecek çok sayıda belirgin olmayan etki var. Örneğin, bir başkasının kütüphanesinde veya başka bir kişinin donanımında (çekirdek geliştiricisiyseniz) tasarım kusurları olabilir. Belirli bir yerde neden belirli bir çamur kullandığınızı açıklamak için yorum yapmak, kodu anlamak ve çamurun kaldırılmadığından emin olmak (bir şeyleri kırmak) için önemli olabilir.


11

Zihnimi bir dilden seçenekleri kaldırmanın söz konusu dilde yazılmış programları bir şekilde daha iyi hale getireceği fikrini sarmak benim için zor. Yorumlar zorunlu değildir ve kendi kendini belgeleyen kod yazmak da uygun değildir.

İyi geliştirme uygulamalarının yerini tutamaz.


6

Teorik olarak, COBOL başlangıçta , geliştirici olmayanların bile (yani süpervizörlerin) yazılan kodu gözden geçirebilecekleri ve neler olup bittiğini belirleyebilecek kadar kendi kendini belgeleyecek şekilde tasarlanmıştır. Bununla birlikte, pratikte, bir program daha karmaşık hale geldikçe, sadece kod yoluyla olan her şeyi anlamak zordur.

Yorumunu kaldırdık öz belgelerine daha iyidir yazma koduna bazı geliştiriciler zorlamak olsa da, orada geliştiriciler bu yazma kötü belgelenmiş kodu hala vardır (yani değişken adları a, b, c, vs) ve insanlar dışarı eğitilmesi gereken kişiler alışkanlıkları olduğunu /. Bu durumlarda, yorumların kaldırılması bu geliştiricileri etkilemez ve diğer geliştiricilerin karmaşık kod parçalarını açıklama çabalarını engelleyebilir.


1
Şimdi bununla bazı kodları okuyorum: argument = 3.0; aa = sqrt( argument ); bb = f( aa ); Sigh.
S.Lott

Cobol özel bir dildir. Ama "." Operatör kötü !!! Bu bir cümlenin sözdizimini bozar.
Loïc Faure-Lacroix

3

Her program, ister yazılı ister sadece birinin kafasında olsun, programın dışındaki fonksiyonel gereksinimleri uygulamak için yazılır.

Yorumların en temel işlevinin gereklilikler ve kod arasında bir eşleme oluşturmak olduğunu düşünüyorum. Haritalamanın gerekli olmasının nedeni, artımlı değişikliklere izin vermektir. Gereksinimlerde bir değişiklik meydana geldiğinde, kod gereksinimlere bir çözüm olarak kalacaksa, kodda karşılık gelen değişiklikler yapmak gerekir. Yorumlar, değişiklikler için bir yol haritası görevi görür.

Dil, çözülmekte olan soruna mükemmel bir şekilde uyarlanmış ideal bir etki alanına özgü dil (DSL) ise, haritalama basit bir izomorfizm olmalıdır ve yorumlar gerekli değildir. Kaynak kodu sorunu basitçe belirtirdi ve başka bir şeyin söylenmesi gerekmiyordu. Sorunun çözümü dilin uygulanmasında gömülecektir.

Çalıştığımız diller böyle DSL'ler olmadığından ve bir süre daha kalacağından, hala yorumlara ihtiyacımız var . Bu bir derece meselesi. Bazen sorun eldeki dile iyi uyuyor, ama genellikle değil.

Ayrıca bakınız...


2

Satır içi yorumlara izin vermeyen bir yerde çalışıyorum (yani yalnızca işlevlerin üst kısmında yorum yapabilirsiniz). Hayır, kodun okunmasını kolaylaştırmaz. Büyüklük derecelerini daha da kötüleştirir.


Yöntem sayısının bir sınırı olmadığını varsayarsak, neden kod bloklarınızı geçerli yöntemlere göre yeniden düzenleyip yöntemlere açıklayıcı adlar (ya da sizin durumunuzda daha fazla yorum) vermiyorsunuz? Gördüğüm çoğu "iyi" kodda, yöntemler nadiren yaklaşık 10 satırdan daha uzun ve ne yaptığı oldukça açık.
Scott Whitlock

@Scott - Kodun kendi kendine belgelenmesi ve satır içi yorumlardan kaçınılması gereken kesin bir savunucuyum, ancak bunları açıkça yasaklamak aşırıya kaçıyor.
Jason Baker

@Jason - Sana katılıyorum, ama sadece satır içi yorumlar olmadan "daha büyük siparişlerin daha kötü" olduğu fikrine katılmıyorum.
Scott Whitlock

@Scott: "37. satırdaki garip null kontrolü yapmamızın nedeni ..." gibi bir sürü yorum alıyorsunuz ve sonra kod ve yorumlar arasında gözlerinizi kaydırmanız gerekiyor. Bu yorumu 37. satırın üstünde tutmak çok daha kolay olurdu.
Xodarap

2

Kod yorum yapmaktan kaçının ve işe yarıyor.

Docblock + anlamlı değişkenler + spartan programlama lehine tüm kod içi (satır içi veya akış) yorumlardan kaçınırım ve işe yarar .

Ve evet, docblock'ların teknik olarak yorum yaptığını biliyorum, yine de, müdahaleci değil ve "standartlaştırılmış" değil, aslında kod için tamamlayıcılar ... ortak bir yorumun olmadığı her şey.

Bence yorumların yerine geçebilir: standart bir docblock dili / sözdizimi / deyim, java ek açıklamaları gibi bir şey.


"standartlaştırılmış bir docblock dili / sözdizimi / deyim": Bunun doxygeniçin işe yaramaz mıydı ? en.wikipedia.org/wiki/Doxygen
sleske

Doxygen, phpdocumentor ve Java belgelerini javadoc'tan (homonim?) Üreten şeyle aynı olan bir belge aracıdır. Demek istediğim, dil / sözdizimi / deyimler, programlama dilinin bir parçasıydı ve etiketler / özellikler için ayrıştırılması gereken bir yorum değil.
dukeofgaming

4
Yani, başka bir şey diyerek yorumlardan kaçınırsınız.
Nate CK

2

Sadece kaliteyi etkilemekle kalmaz, diğerlerinin de gözlemlediği gibi, gerçekten sinir bozucu olurdu.

Eminim çoğumuz zaman zaman böyle bir şey yaptık:

foreach ( myObject obj in SomeList )
 {
    Debug.Writeline( obj.Name );
//  for some reason this isn't working
//  obj.SetArielPotency( setting );
//  obj.DoSomeProcess();       
 }

Bu hatanın nereden geldiğini anlamak için birkaç kod satırını yorumlayamazsanız ne kadar rahatsız edici olurdu?

Kodun nasıl çalıştığına dair yorumlara bakılmaksızın, bunun gibi basit pratik şeyler veya uygun bir TODOnotu bırakmak, küçük sorunları düzeltmeyi ve kodu yazmaya başladığımızda ne yaptığımızı hatırlamayı kolaylaştıran şeylerdir.


1

Yorumlar bir kitap özeti gibidir. Elbette, kodu okuyarak her şeyi anlayabilirsiniz, ancak neden yorumlanmış bir satırda özetlenebildiğini tüm dünyada okumak istiyorsunuz?


3
Bir satırda özetleyebiliyorsanız, bir işlevi veya yöntemi, ne yaptığını açıklayacak kadar açıklayıcı olarak adlandırabilirsiniz.
Scott Whitlock

1

Kendini belgeleyen kodun bile yorumlara ihtiyaç duyduğu diğer cevapları kabul etsem de, bu sadece geçerli diller için geçerlidir.

Bence asıl soru " Yorum gerektirmeyen yeni bir programlama dili tasarlamak mümkün mü ?" Büyük bir soyutlama ile oldukça yüksek düzeyde olması gerekir. Her ifade ve işlev, dilin sözdizimi yoluyla okunabilir olmaya zorlanır.


1
Okuryazar programlama, yorum gerektirmeyen bir dil sunar. Gerekli açıklama, destek, kanıt, niyet, ödünleşmeler, kludges vb. Kodların tümünü içeren belgenizi yazarsınız. Kod tek başına amaçlanmadığı için güzel çalışıyor.
S.Lott

@DisgrunteldGoat: unut gitsin. Belirli bir dilden başlamak zorunda kalırsınız ve ben sadece 5 konuşurum. Hollandaca olacağınız kadar kaybolacağım tüm diller.
Joris Meys

İkinci paragraf yeniden: tabii ki yapabilirsiniz. Yorum desteği sunan tüm geçerli dilleri alın ve yorum desteğini kaldırın. Bu diller yorumlara ihtiyaç duyduysa, derlenmiş kodda olurlar veya yorumlayıcı bunları görmezden gelmekten başka bir şey yapar.
Kit

1

Disiplinsiz programcılar dil ne olursa olsun kötü kod yazacaktır.

Sadece kongre (_-önek) tarafından özel olduğunu piton, ilginç, yok değil hala yazılırken polis bu ve çok ince kodunda herhangi bir çaba.

Rant: Bazen daha izin verici dillerin , tersine değil, daha fazla insanı düzgün kodlamayı öğrenmeye zorlayacağını düşünüyorum (yani, Java'nın tek yönlü ve işlevleri birinci sınıf nesneler olarak düşünmek istiyorsanız, lanet olası).


1

Tahmin edeceğim: muhtemelen hayır. Neden? Çünkü "neden" i bir formalizm olarak kodlamanız gerekecek ve "neden", ister dil olarak kodlanmış, ister dilde yorum yapılmış olsun, yine de programcılar tarafından az kullanılıyor.


1

Kod kesinlikle ne yaptığını açıklarken kendini yorumlayabilir , ancak kodun neden yaptığını açıklaması her zaman mümkün değildir . Yorumlara en çok ihtiyaç duyulan yer burasıdır.

Örneğin, belirli bir düzenlemeye uymak için bir kod bölümü gerekiyorsa, bunu yorum yapmadan nasıl açıklarsınız? Belirli bir kod parçası tarafından kullanılan algoritma, 1998 yılında M. Matsumoto ve T. Nishimura tarafından yazılan bir makalede açıklanıyorsa, bunu yorum yapmadan nasıl açıklarsınız? Bir algoritma tam olarak optimum işlevsellik sağlamaz, ancak diğer kodlar değiştirilirse gelecekteki sorunlara neden olabilecek çok özel bir haklı uzlaşma yaparsa, bunu yorum yapmadan nasıl açıklarsınız?

Kodun bir bölümü bağımsız bir denetçi tarafından denetlendiyse, denetlemeyi geçersiz kılmadan değiştirilemezse ve kod, bu denetime uyumu müşterileriniz tarafından gerekli görülen bir ürün oluşturmak için kullanılır. Bunu bir yorum yapmadan nasıl belirtirsiniz?


0

Her zaman tek kelimelik bir yorum yapmanın güzel olabileceğini düşündüm, böylece bir sözcüğün önüne bir kelime eklediyseniz (diyelim ki iki nokta üst üste), bu kelime yok sayılır. Bu şekilde, bir lisp ifadesinin, bir s ifadesi içinde yalnızca tek kelimelik yorumlara izin verdiğini söyleyebilirsiniz. Örneğin, şunu çevirebilirsiniz:

(if (= x y)
    x
    y)

...bunun içine:

(if (= x y)
    :then x
    :else y)

Kesinlikle yapmanız gerekiyorsa, satır içi yorum oluşturmak için birden çok tek kelimelik yorumları zincirleyebilirsiniz:

(if x :Remember, :x :could :be :nil!
    ...)

Tabii ki, bu yazmak için bir acı. Aslında, mesele bu. Satır içi yorumları dikkatli bir şekilde kullanmanızı ve kısa ve öz tutmanızı sağlar. Ama birisini dili kullanmaya ikna etmekte zorlandığımı hissediyorum.


Ayrıca okumayı zorlaştırır, bu da kodu daha okunabilir hale getirmek için yorumların kullanımını yener.
Nate CK

0

Bu çift ya da hiç. Bazı programcılar kodu okunabilir kılmak için hiçbir şey yapmazlar. Yorumlara izin vermemek bunu güçlendirecektir. Bazı programcılar, yorumlardan ziyade kod yeniden düzenleme yapsalar bile daha iyi olsalar bile iyi yorumlar yazarlar - yorumları kaldırmak onları daha iyi yeniden düzenleme yapmaya zorlayabilir.

Bunun iyi bir fikir olmasının nedenleri: - Yok

Bunun kötü bir fikir olmasının nedenleri: - İyi ama mükemmel olmayan programcılardan çok daha acımasız programcılar var - Neredeyse her zaman garip gotchas, özetler, vb. İçin bazı yorumlar olmalı - Yorumlardan kaçınsanız bile, muhtemelen yorumları bir aşama olarak yorumlayın: bir şey yazarken bir yorum yazın ve sonra geri dönün ve yeniden düzenleyin. Ama bunu her zaman hemen yapamazsın çünkü hala öğreniyorsun. - İnsanları etrafında çalışmaya teşvik edecek - Kim kullanacak? Okunamayan kod yazan ve bahane (kötü) isteyen insanlar ve bu fikre zaten aşık olanlar (sadece "yorum yazamayanlar"). İstediğiniz buysa, insanların bunu nasıl yapmasını istediğinizi gösteren bir kodlama standardı yazmanız yeterlidir.

Bunun ilgili olabileceği nedenler - Yararlı olabileceği yerler, "yorum yapmamak" ı daha iyi hale getirmek için bir sistemin bir parçasıdır; yorumlardan daha iyi bir şey için iyi bir desteği olan ve konuşmanın bir parçası olarak yorumlardan kaçınan bir dil veya IDE. Nasıl çalışacağını bilmiyorum, ama en azından düşünmeye değer iyi bir nokta.

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.