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?
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?
Yanıtlar:
Programcıların yorum eklemenin başka bir yolunu bulacağını düşünüyorum ...
string aComment = "This is a kludge.";
"this is a comment";
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.
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.
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.
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.
argument = 3.0; aa = sqrt( argument ); bb = f( aa );
Sigh.
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.
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.
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.
doxygen
için işe yaramaz mıydı ? en.wikipedia.org/wiki/Doxygen
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 TODO
notu bırakmak, küçük sorunları düzeltmeyi ve kodu yazmaya başladığımızda ne yaptığımızı hatırlamayı kolaylaştıran şeylerdir.
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?
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.
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ı).
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?
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.
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.