berkmenoo 1
berkmenoo
farkmt2official 1
farkmt2official
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle

[NODE JS] Node.js'te Yorum Satırları ve Kod Düzeni

nodejs.png


[NODE JS] Node.js'te Yorum Satırları ve Kod Düzeni​


Merhaba arkadaşlar. Bugün konumuz kod kalitesinin temel taşlarından biri: yorum satırları ve kod düzeni. Şimdi biliyorum, "yorum yazmayı mı öğreneceğiz" diye düşünüyor olabilirsiniz ama inanın bana, doğru yorum yazmak ve temiz kod düzeni oluşturmak birçok senior developer'ın bile tam yapamadığı bir şey. Ben altı yıllık kariyerimde onlarca projeyi devralıp inceledim, bazılarında tek satır yorum yoktu, bazılarında her satırın başına gereksiz yorum yazılmıştı. İkisi de kötü.

Yorum Satırı Türleri​


JavaScript'te üç tür yorum yapısı var: tek satırlık, çok satırlık ve JSDoc yorumları. Her birinin kullanım yeri farklı ve hepsini bilmek gerekiyor. Yanlış yerde yanlış yorum türü kullanmak kodu daha da karmaşık hale getirebilir.

Benim temel prensibim şu: kod ne yaptığını kendisi anlatmalı. Yorum ise neden yaptığını anlatmalı. Yani "sayacı bir artır" diye yorum yazmak gereksiz çünkü counter++ zaten bunu söylüyor. Ama "müşteri isteği üzerine sayaç sıfırlanmıyor çünkü raporlama buna bağlı" gibi bir yorum çok değerli çünkü koddan anlaşılmayan bir bağlam veriyor.

JavaScript:
// === YORUM SATIRLARI ===

// 1. Tek satırlık yorum
// Bu bir tek satırlık yorumdur
const port = 3000; // Satır sonu yorumu

// 2. Çok satırlık yorum
/*
Bu bir çok satırlık yorumdur.
Birden fazla satır yazabilirsiniz.
Genellikle dosya başında veya
uzun açıklamalar için kullanılır.
*/

/* Tek satırda da kullanılabilir */

// 3. JSDoc yorumları - Dokümantasyon için
/**
 * Kullanıcı bilgilerini veritabanından getirir.
 *
 * @param {number} id - Kullanıcı ID'si
 * @param {Object} secenekler - Opsiyonel ayarlar
 * @param {boolean} secenekler.detayli - Detaylı bilgi isteniyor mu
 * @param {string[]} secenekler.alanlar - Getirilecek alanlar
 * @returns {Promise<Object>} Kullanıcı nesnesi
 * @throws {Error} Kullanıcı bulunamazsa hata fırlatır
 * @example
 * const kullanici = await kullaniciBul(123, { detayli: true });
 * console.log(kullanici.isim);
 */
async function kullaniciBul(id, secenekler = {}) {
    // Gerçek implementasyon burada olurdu
    if (!id) throw new Error('ID gerekli');

    const varsayilan = {
        detayli: false,
        alanlar: ['isim', 'email']
    };

    const ayarlar = { ...varsayilan, ...secenekler };
    // Veritabanı sorgusu simülasyonu
    return { id, isim: 'Test Kullanıcı', ...ayarlar };
}

// 4. TODO, FIXME, HACK, NOTE gibi özel yorum etiketleri
// TODO: Bu fonksiyon cache mekanizması eklenmeli
// FIXME: Türkçe karakter sorunu var, encoding kontrol et
// HACK: Geçici çözüm, API v2'de düzeltilecek
// NOTE: Bu rate limit değeri müşteri sözleşmesine göre belirlendi
// DEPRECATED: Bu metod v3'te kaldırılacak, yerine yeniMetod() kullanın
// WARNING: Bu fonksiyon senkron dosya okuma yapar, production'da dikkatli kullanın

// 5. Bölüm ayırıcı yorumlar
// ============================================
// KULLANICI İŞLEMLERİ
// ============================================

function kullaniciOlustur(veri) { /* ... */ }
function kullaniciGuncelle(id, veri) { /* ... */ }
function kullaniciSil(id) { /* ... */ }

// ============================================
// ÜRÜN İŞLEMLERİ
// ============================================

function urunListele() { /* ... */ }
function urunEkle(veri) { /* ... */ }

Kod Düzeni ve Stil Kuralları​


Şimdi gelelim asıl konuya: kod düzeni. Bir projede birden fazla kişi çalışıyorsa herkesin aynı stilde kod yazması gerekir. Aksi halde kod tabanı çorba gibi olur. Ben projelerime her zaman ESLint ve Prettier kuruyorum. ESLint kod kalitesini kontrol eder, Prettier ise formatlamayı yapır.

Tecrübeme göre en önemli kod düzeni kuralları: tutarlı girinti kullanımı (2 veya 4 boşluk, ama karıştırmayın), anlamlı değişken ve fonksiyon isimleri, tek sorumluluk prensibi (bir fonksiyon tek bir iş yapsın), ve dosya organizasyonu.

JavaScript:
// === KOD DÜZENİ ÖRNEKLERİ ===

// KÖTÜ ÖRNEK - Okunması zor, bakımı kabus
function x(a,b,c){if(a>0){for(let i=0;i<b;i++){c.push(a*i);}return c;}else{return [];}}

// İYİ ÖRNEK - Okunabilir, bakımı kolay
function carpimTablosuOlustur(carpan, tekrarSayisi, sonucListesi) {
    if (carpan <= 0) {
        return [];
    }

    for (let i = 0; i < tekrarSayisi; i++) {
        sonucListesi.push(carpan * i);
    }

    return sonucListesi;
}

// KÖTÜ ÖRNEK - Anlamsız isimler
const d = new Date();
const a = d.getFullYear();
const b = d.getMonth() + 1;

// İYİ ÖRNEK - Anlamlı isimler
const simdi = new Date();
const mevcutYil = simdi.getFullYear();
const mevcutAy = simdi.getMonth() + 1;

// Dosya yapısı örneği - İyi organize edilmiş bir proje
/*
proje/
├── src/
│   ├── config/
│   │   ├── database.js
│   │   ├── server.js
│   │   └── index.js
│   ├── controllers/
│   │   ├── kullaniciController.js
│   │   └── urunController.js
│   ├── models/
│   │   ├── Kullanici.js
│   │   └── Urun.js
│   ├── middlewares/
│   │   ├── auth.js
│   │   └── errorHandler.js
│   ├── routes/
│   │   ├── kullaniciRoutes.js
│   │   └── urunRoutes.js
│   ├── utils/
│   │   ├── helpers.js
│   │   └── validators.js
│   └── app.js
├── tests/
├── .eslintrc.js
├── .prettierrc
├── package.json
└── README.md
*/

// ESLint konfigürasyon örneği (.eslintrc.js)
const eslintConfig = {
    env: {
        node: true,
        es2021: true
    },
    extends: ['eslint:recommended'],
    parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module'
    },
    rules: {
        'no-console': ['warn', { allow: ['warn', 'error'] }],
        'no-unused-vars': 'error',
        'prefer-const': 'error',
        'no-var': 'error',
        'eqeqeq': 'error',
        'semi': ['error', 'always'],
        'quotes': ['error', 'single'],
        'indent': ['error', 4],
        'max-len': ['warn', { code: 100 }]
    }
};

console.log('ESLint config hazır:', JSON.stringify(eslintConfig, null, 2));

Bir de şunu ekleyeyim: yorum yazmak kadar eski ve geçersiz yorumları temizlemek de önemli. Geçen bir projede 2019'dan kalma yorumlar vardı ve artık geçerli değillerdi, hatta yanlış yönlendiriyorlardı. Kodu değiştirirken yorumları da güncellemeyi unutmayın.

Son olarak, "kendi kendini açıklayan kod" prensibi her zaman ilk tercih olmalı. İyi isimlendirilmiş değişkenler ve fonksiyonlar, küçük ve odaklı fonksiyonlar, tutarlı bir yapı. Bunları sağladıktan sonra yorumları sadece gerçekten gerekli yerlerde kullanın. Kolay gelsin arkadaşlar.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst