Aikido

Kod tabanınızdan yorum satırı haline getirilmiş kodları neden kaldırmalısınız?

Okunabilirlik

Kural
Yorum satırı haline getirilmiş kod bloklarını kaldırın

Yorum satırına çevrilmiş kod, kirlilik yaratır, güncelliğini yitirir 
ve kod tabanında değil, versiyon kontrol geçmişinde yer almalıdır.

Giriş

Yorum satırına çevrilmiş kodlar, geliştiricilerin ileride eski mantığa ihtiyaç duyup duymayacağından emin olamadığı durumlarda birikir. Birisi silmek yerine "ne olur ne olmaz" diye bir fonksiyonu yorum satırına alır ve o kod sonsuza dek orada kalır. Hiç kimse bu kodun hâlâ çalışıp çalışmadığını, neden devre dışı bırakıldığını veya kaldırmanın güvenli olup olmadığını bilmez. Kod tabanı, üretim ortamında (production) aslında neyin çalıştığını anlamayı zorlaştıran geçmiş uygulamaların hayaletleriyle dolup taşar.

Neden önemli?

Kod sürdürülebilirliği: Yorum satırına alınmış kodlar, okuyucuların gerçek olanla pasif duranı zihinsel olarak filtrelemesini zorunlu kılar. Kod incelemesi (code review) sırasında bu blokların geçici deneyler mi, önemli geri alma seçenekleri mi yoksa yıllar öncesinden kalma unutulmuş kalıntılar mı olduğunu anlayamazsınız. Bu kirlilik; asıl mantığı anlamayı, ilgili kod bölümlerini bulmayı ve değişiklikleri anlamlı bir şekilde incelemeyi zorlaştırır.

Güvenlik etkileri: Yorum satırına alınmış kimlik doğrulama kontrolleri, doğrulama (validation) mantığı veya güvenlik özellikleri, bu korumaların bir zamanlar var olduğunu ancak bilerek devre dışı bırakıldığını gösterir. Eğer yorum satırındaki kod kimlik bilgileri, API anahtarları veya dahili URL'ler içeriyorsa, bu hassas verileri düz metin (plaintext) olarak sızdırıyorsunuz demektir. Kod tabanınızı inceleyen saldırganlar, hangi güvenlik önlemlerini düşündüğünüzü ve hangilerini kaldırdığınızı net bir şekilde görür.

Versiyon kontrolü karmaşası: Git farkları (diff), aslında değişmeyen yorum satırı bloklarıyla dolup taşar. Mantığın ne zaman değiştiğini veya bir özelliğin neden belirli bir şekilde çalıştığını izlemeniz gerektiğinde, yorum satırına alınmış alternatifler gerçek geçmişi gizler. Kod tabanında arama yapmak ölü kodlarda eşleşmeler döndürür; bu da yürütülmeyen yolları araştırmaya çalışarak zaman kaybetmenize neden olur.

Kod örnekleri

❌ Kural dışı:

async function createUser(userData) {
    // const hashedPassword = await bcrypt.hash(userData.password, 10);

    const user = await db.users.create({
        email: userData.email,
        password: userData.password,
        // password: hashedPassword,
        role: userData.role || 'user'
    });

    // await sendWelcomeEmail(user.email);
    // await notifyAdmins(user);

    // Old validation approach
    // if (!isValidEmail(user.email)) {
    //     throw new Error('Invalid email');
    // }

    return user;
}

Neden yanlış: Yorum satırına alınmış şifre hashleme işlemi, parolaların düz metin olarak saklandığını ortaya koyuyor ki bu kritik bir güvenlik açığıdır. Hoş geldin e-postasının ve yönetici bildiriminin etkinleştirilmesi gerekip gerekmediği bilinmiyor; ayrıca eski doğrulama mantığı, e-posta doğrulamasının eksik olabileceğini gösteriyor.

✅ Kurallara uygun:

async function createUser(userData) {
    if (!isValidEmail(userData.email)) {
        throw new Error('Invalid email');
    }

    const hashedPassword = await bcrypt.hash(userData.password, 10);

    const user = await db.users.create({
        email: userData.email,
        password: hashedPassword,
        role: userData.role || 'user'
    });

    await sendWelcomeEmail(user.email);
    await notifyAdmins(user);

    return user;
}

Neden önemli: Fonksiyon net ve eksiksizdir; üretim ortamında tam olarak neyin çalıştığını gösterir. E-posta doğrulaması önce çalışır, parolalar düzgün bir şekilde hashlenir ve neyin etkinleştirildiği konusunda hiçbir belirsizlik olmaksızın tüm bildirimler gönderilir.

Sonuç

Kodları yorum satırına almak yerine silin. Versiyon kontrol sisteminiz yazılmış her satırı korur ve bunlara şu komutla erişebilirsiniz: git log ve git blame İhtiyacınız olduğunda kullanabilirsiniz. Depoda yorum satırı haline getirilmiş kod tutmak yalnızca asıl mantığı gizleyen bir kirlilik yaratır ve kod tabanınızda gezinmeyi zorlaştırır.

Sık Sorulan Sorular

Sorularınız mı var?

Geri alma (rollback) için eski uygulamaya ihtiyaç duyarsam ne olacak?

Yorumlar yerine özellik bayrakları (feature flags) veya versiyon kontrol dalları (branches) kullanın. Eski mantığa geri dönme ihtimaliniz varsa, bunu açıp kapatabileceğiniz bir özellik bayrağının arkasında uygulayın. Kalıcı değişiklikler için eski kodu silin ve Git geçmişine güvenin. İhtiyacınız olduğunda silinen kodlara her zaman git log -p veya git show ile ulaşabilirsiniz.

Geliştirme sürecindeki deneysel kodları nasıl yönetmeliyim?

Deneyleri ayrı dallarda tutun veya onlara özellik bayrakları atayın. İki yaklaşımı test ediyorsanız, her biri için bir dal oluşturun veya aralarında geçiş yapmak için bir yapılandırma bayrağı kullanın. Ana dallardaki yorum satırı kodlar, üretimde ne olması gerektiğinden emin olmadığınıza işaret eder ki bu bir versiyon kontrolü sorunu değil, bir planlama sorunudur.

Hata ayıklama (debugging) sırasında kodu geçici olarak devre dışı bırakmak hakkında ne düşünmelisiniz?

Bu, yerel hata ayıklama oturumları için kabul edilebilirdir ancak asla commit edilmemelidir. Commit etmeden önce yorum satırına alınmış hata ayıklama kodunu incelemek ve hariç tutmak için git add -p kullanın. Kodu tüm ekip genelinde geçici olarak devre dışı bırakmanız gerekirse, yorumlar yerine özellik bayraklarını veya yapılandırmayı tercih edin.

Yorum satırındaki açıklama notlarını da kaldırmalı mıyım?

Hayır, bu kural dokümantasyon yorumlarını değil, yorum satırına alınmış kod bloklarını hedef alır. Bir şeyin neden veya nasıl çalıştığını açıklayan yorumlar değerlidir. Buradaki sorun, güncelliğini yitirmiş olabilecek veya olamayacak ölü kod bloklarıdır.

Yorum satırındaki kodlar eski uygulama yaklaşımlarını belgeliyorsa ne olacak?

Bu yaklaşımı ölü kodu saklayarak değil, açıklayan bir yorum satırıyla belgeliyin. Her iki uygulamayı da yorum satırında tutmak yerine "daha önce X yaklaşımı kullanıldı, Z nedeniyle Y'ye geçildi" şeklinde yazın. Tarihsel bağlam, atıl kod bloklarında değil, commit mesajlarında ve tasarım dokümanlarında yer almalıdır.

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.