Neden ikisi de olmasın?
Her şeyden önce, "tanımlayıcı" ve "ayrıntılı" aynı değildir. Örneğin, oldukça yerel bir döngü yazıyorsanız i
, döngü değişkeni için çok iyi bir değişken adıdır; current_iteration_index
tartışmasız daha açıklayıcı ve kesinlikle daha ayrıntılı olsa da, çok daha kötüdür ve hiç bilgi eklemez, çünkü i
bir döngü değişkeni olarak kullanımı hemen hemen evrensel olarak kabul edilir ve bundan başka bir anlamı yoktur i
.
İyi değişken isimleri açıklayıcıdır, çünkü dilin deyimine ve kod tabanının kurallarına aşina olan bir programcı rollerinin ne olduğunu kolayca tahmin edebilir, ancak işleri kompakt tutacak kadar özlüdür.
80 karakterlik sınır, 1970'lerin metin terminallerinin teknik sınırlamalarının bir sonucu olarak, bugün hala birçok kişi tarafından değer görüyor ve hala teknik nedenler olsa da (bazı ağ protokollerinde maksimum satır uzunlukları, özellikle e-posta ile ilgili), daha zorlayıcı nedenler psikolojik ve sosyal nedenlerdir. 66 karakter işaretinin etrafındaki satır uzunluklarının doğal dil nesirleri için en rahat okuma deneyimini sağladığı ortaya çıkıyor (yazı tipi boyutu ilginç bir şekilde çok fazla bir fark yaratmıyor ve sonuç olarak ekran veya kağıt boyutu da yok); 80 karakterlik çizgi sınırları buna oldukça yakındır, ancak tipik bir kod parçasının büyük kısmı genellikle en az bir veya iki seviyeye girintili olduğundan (girinti ayarlarına bağlı olarak 4 ila 16 karakter arasında anlamına gelir),
80 karakterlik çizgilere yapışmanın bir diğer etkisi de, işlerin ne zaman çok karmaşık olduğunun oldukça iyi bir göstergesidir. Uzun satırlara genellikle aşağıdakilerden biri neden olur:
- Uzun bir argüman listesi olan fonksiyonlar; bu olması hoş bir şey değildir, çünkü okunabilirliği engeller ve kolayca hatalara neden olabilirler, örneğin insanlar argüman sırasını derleyicinin yakalayamayacağı bir şekilde değiştirdiğinde.
- Genellikle koşullu olarak bulunan karmaşık ifadeler (örn.
if ((user.isLoggedIn && user.hasPermission(page.getRequiredPermission()) && !user.isBanned) || page.getRequiredPermission() == null)
); bunun da çözülmesi oldukça zordur ve kod daha yapılandırılmış bir şeye yeniden yazılmalıdır. Büyük olasılıkla, ifade çok fazla şey yapar ve bir yönteme veya işleve dahil edilmelidir.
- İşlev çağrılarında veya ifadelerinde kullanılan uzun değişmez değerler, ör
print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));
. Değişmezi bir değişkene veya sabite taşıyın; yine de satır uzunluğunu aşabilir, ancak tutarlı bir şekilde yaparsanız, okuyucu, sadece hazır bilginin geri kalanının takip ettiği varsayılarak, çizginin görünmez kısmını en azından güvenli bir şekilde göz ardı edebilir. Veya daha da iyisi, değişmezleri kodun dışına ve bir dış veri deposuna (dosya, veritabanı, her neyse) taşıyın.
- Derin iç içe ifadeler, örneğin
if
bir sınıf yöntemindeki altı deyim düzeyi ( tipik ayarlar için 32 girinti sütunu). Yine, derin yuvalama karmaşık ve okunması zor kod oluşturur ve veba gibi kaçınılmalıdır - basitçe, derin yuvalama okuma sırasında insan beyninin yığınını taşar.
Tüm bunlar sonuçta uzun vadede kod tabanınızda olmasını istemediğiniz şeylerin belirtileridir ve 80 karakter sınırlarını zorlamak, karmaşıklığı düşük ve okunabilirliği korumanıza yardımcı olan güzel ve basit bir yoldur. (Bu, 80 sütuna mükemmel okunamayan kod yazamayacağınız anlamına gelmez: çeşitli gizli-şey-kod yarışmaları açık bir karşı örnektir).