- Neden "neden olmadı" yorumları? Neden "yorum yok" değil
- “Neden ‘neden işe yaramadığını’ açıklayan yorumlar bırakmıyorsunuz? Sormak istediğim şey ‘neden yorum eklemediğiniz’ değil.”
Neden Olmadı Yorumları
- Kod, yapılandırılmış bir makine diliyle yazılır; yorumlar ise ifade gücü yüksek insan diliyle yazılır
- Amaç, "ne"yi yorumlamamak; bunun yerine mümkün olduğunca fazla bilgiyi tanımlayıcılara yerleştirmektir
- Son dönemde, "neden"in de yorumlara değil
LongFunctionNames ya da test vakası adlarına konulması gerektiği savunuluyor
- "Kendini belgeleyen" kod tabanları, tanımlayıcılar aracılığıyla dokümantasyon ekler
Yakın tarihli bir örnek
Logic for Programmers kitabından bir örnek
- epub derlemesinin matematik sembollerini (
\forall) karaktere (∀) dönüştürememesi sorunu ortaya çıktı
- Matematik dizelerindeki token'ları Unicode ile elle değiştiren bir betik yazıldı
- Bu, 16 matematik sembolünün her biri için ayrı ayrı değiştirme yapacak şekilde yazıldı; ancak bu verimsiz bir yöntem
- Basit bir yorum eklenerek çözüldü
- "Her dize için 16 kez dönüyor, ancak şu an kitapta yalnızca 25 matematik dizesi var ve bunların çoğu 5 karakterden kısa, bu yüzden yine de yeterince hızlı"
Neden yorum eklenmeli
- Yavaş kod sorun çıkarmasa bile neden yorum eklenmesi gerektiği
- Kod gelecekte sorun yaratabilir
- Yorumlar, yapılan trade-off'un farkında olunduğunu gösterir
- Projeye daha sonra geri dönüldüğünde neden yavaş kod yazıldığını anlamayı sağlar
Kendini belgeleyen kod neden mümkün değil
RunFewerTimesSlowerAndSimplerAlgorithmAfterConsideringTradeOffs gibi uzun işlev adları trade-off'u açıklamaz
- İşlev ve değişken tanımlayıcıları yalnızca tek bir bilgi türünü taşıyabilir
- Yorumları testlerle değiştirmek de mümkün değildir
- Kendini belgeleyen yapı, kodun ne yaptığını açıklar; negatif bilgi ise kodun ne yapmadığını açıklar
Bültenin sonundaki spekülasyon
- "Neden işe yaramadığını" anlatan yorumların karşı-olgusal örnekler olarak düşünülemeyeceği merak ediliyor
- İnsan iletişimindeki soyutlamalar kendini belgeleyen hale getirilemez mi?
- Mecazlar, belirsizlikler, etik iddialar vb. kendini belgeleyen şekilde ifade edilebilir mi?
GN⁺ özeti
- Bu yazı, kod yorumlarının önemini ve sınırlarını ele alıyor
- Yorumlar, koddaki trade-off'ları netleştiriyor ve gelecekteki bakım işini kolaylaştırıyor
- Kendini belgeleyen yaklaşımın sınırlarını ve yorumların gerekliliğini vurguluyor
1 yorum
Hacker News görüşleri
Koda yorum eklerken çoğunlukla "neden"i ve "neden işe yaramadığını" açıklarım. Kod karmaşıksa, "ne" yaptığını kısaca açıklamak da faydalıdır
Junior mühendisler kodun ne yaptığını açıklayan yorumlar yazar, orta seviye mühendisler neden böyle yazıldığını açıklar, senior mühendisler ise neden başka türlü yazılmadığını açıklar
Bakım yapacak kişiler için bir yorum şablonu kullanırım
Kodda şaşırtıcı olan yerlere yorum eklemek önemlidir
Yorumların önemini vurguluyorum; özellikle kendi kodunuzu 5, 10, 15 yıl sonra da bakımını yapmanız gerekecekse çok faydalıdır
"naif çözüm olmayan" yerlere yorum eklemek iyidir
Uzun fonksiyon adlarına veya test case adlarına yorumu dahil etmek iyidir
Debug logging üzerinden, girdiler ilk tasarım kısıtlarından daha büyük olduğunda uyarı eklemek de faydalıdır
Yorumları ve dokümantasyon yorumlarını bolca kullanmayı tercih ederim
Kod incelemesinde gelebilecek eleştirileri peşinen önlemek için "X yapmadım çünkü Y" şeklinde yorum yazarım