Kimsenin henüz bahsetmediği bir şey, bu yüzden şunu söyleyeceğim: Yorum yerleştirme arzusu genellikle programcının Yanlış Yaptığını gösterir.
İlk olarak, programcı tarafından "iç içe geçme" veya "iç içe geçmeme" durumunun görülebileceği tek zamanın, programcının yapısal olarak şöyle bir şey yazdığı zaman olduğunu kabul edelim:
do_something();
/* comment /* nested comment */ more comment */
do_something_else();
Şimdi, böyle bir şey pratikte ne zaman ortaya çıkıyor? Kesinlikle programcı, tam olarak yukarıdaki pasaj gibi görünen iç içe yorumlar yazmayacak! Hayır, pratikte yorumları iç içe yerleştirdiğimizde (veya iç içe geçirebilmemizi dilediğimizde) bunun gibi bir şey yazmak istediğimiz için:
do_something(); /* do a thing */
/* [ajo] 2017-12-03 this turned out to be unnecessary
do_something_else(); /* do another thing */
*/
Ve bu KÖTÜ. Bu (dil tasarımcıları olarak) teşvik etmek istediğimiz bir model değil! Doğru Yukarıdaki pasajı yazmak için yoludur:
do_something(); /* do a thing */
Bu "yanlış" kod, yanlış başlangıç veya her neyse, kod tabanına ait değil. En iyi ihtimalle, kaynak kontrol geçmişine aittir. İdeal olarak, başlamak için asla yanlış kod yazmazsınız, değil mi? Ve yanlış kod orada bir amaca hizmet ediyorsa, bakıcıları bir nedenden ötürü eski durumuna getirmemeleri konusunda uyararak, bu muhtemelen iyi yazılmış ve kasıtlı bir kod yorumu için bir iştir . Sadece X yapan bazı eski kodları bırakarak "X yapma" ifadesini ifade etmeye çalışmak, insanların X yapmasını engellemenin en okunaklı veya etkili yolu değildir.
Tüm bunlar daha önce duymuş olabileceğiniz basit bir kuralla sınırlıdır: Kodu yorumlamayın. (Bu ifadeyi aradığınızda , anlaşmada çok sayıda fikir ortaya çıkacaktır .)
Sormadan önce: evet, C, C # ve C ++ gibi diller programcıya büyük kod bloklarını "yorumlamak" için zaten başka bir araç verir #if 0
. Ancak bu, kendi başına büyük ve kullanışlı bir araç olan C ön işlemcisinin özel bir uygulamasıdır. Bir dil ile koşullu derleme desteklemek için Aslında son derece zor ve özel Casey olacağını #if
ve henüz değil desteklemek #if 0
.
Bu nedenle, iç içe yorumların yalnızca programcı kodu yorumladığında alakalı olduğunu belirledik; ve kod yazmanın kötü bir şey olduğunu (birçok deneyimli programcının konsensüsüyle) tespit ettik.
Syllogism'i tamamlamak için, dil tasarımcılarının İyi Şeyler tanıtmak ve Kötü Şeyleri caydırmakla ilgisi olduğunu kabul etmeliyiz (diğer her şeyin eşit olduğunu varsayarak).
İç içe yorumların durumda, her şeyin olduğu eşit - güvenle yok sayabilirsiniz iddiası yuvalanmış ayrıştırma olduğunu cevapları düşük yüksek oyu /*
nasılsa ayrıştırıcı için "zor" olurdu. (Yuvalanmış yuvalar , dünyadaki hemen hemen her ayrıştırıcının zaten ele alması gereken /*
yuvalanmış olanlardan daha zor değildir (
.)
Öyleyse, diğer her şey eşit olduğunda, bir dil tasarımcısı yorum yapmayı (yani kodu yorumlamak) kolaylaştırmalı mı yoksa zor mu? Kodu yorumlamanın bir Kötü Şey olduğunu hatırlayın.
QED
Dipnot. Yuvalanmış yorumlara izin vermezseniz,
hello /* foo*/bar.txt */ world
yanıltıcı bir "yorum" dur - buna eşdeğerdir
hello bar.txt */ world
(bu muhtemelen bir sözdizimi hatasıdır). Eğer Ama eğer bunu iç içe yorumlar, sonra izin
hello /* foo/*.txt */ world
yanıltıcı bir "yorum" dur - buna eşdeğerdir
hello
ancak yorumu dosyanın sonuna kadar açık bırakır (yine neredeyse kesinlikle bir sözdizimi hatasıdır). Bu nedenle, hiçbir şekilde kasti olmayan sözdizimi hatalarına daha az eğilimlidir. Tek fark, yorumlanmış kodun kasıtlı karşıtlığını işleme biçimidir.