Yazılım ve Teknoloji

Temiz Kod Nedir? Okunabilir Kod İçin 10 Kural

Rıfat Akarca 👁️ 9 okunma 📅 06/09/2026

Yazılım geliştirirken yalnızca çalışan kod üretmek yeterli değildir. Kodun başka geliştiriciler tarafından kolayca anlaşılması, güvenle değiştirilmesi ve uzun süre sürdürülebilmesi de gerekir. Temiz kod yaklaşımı tam olarak bu ihtiyaca odaklanır.

Peki, temiz kod nedir ve daha okunabilir kod yazmak için hangi kurallar uygulanabilir? Bu rehberde yeni başlayan geliştiricilerin hemen kullanabileceği 10 pratik kuralı örneklerle ele alacağız.

Temiz Kod Nedir?

Temiz kod; ne yaptığını açıkça anlatan, kolay okunan, gereksiz karmaşıklık içermeyen ve değişiklik yapılması kolay olan koddur.

Bir kodun çalışması, onun mutlaka temiz olduğu anlamına gelmez. Aynı sonucu üreten iki farklı kod parçasından biri anlaşılır ve düzenli olabilirken diğeri iç içe koşullar, belirsiz değişkenler ve tekrar eden işlemler içerebilir.

Temiz kodun temel özellikleri şunlardır:

  • Kolay okunur ve anlaşılır.
  • Değişken ve fonksiyon adları amacını açıklar.
  • Gereksiz kod tekrarları içermez.
  • Fonksiyonlar tek bir sorumluluğa odaklanır.
  • Test edilmesi ve değiştirilmesi kolaydır.
  • Projenin genel yazım standartlarıyla uyumludur.
  • İhtiyaç duyulan yerde kısa ve anlamlı açıklamalar içerir.

Temiz kod yazmanın amacı kusursuz görünen kod üretmek değildir. Temel amaç, geliştiricilerin daha sonra güvenle çalışabileceği anlaşılır bir yapı oluşturmaktır.

Okunabilir Kod Neden Önemlidir?

Yazılım geliştirme sürecinde kod, yazıldığından çok daha fazla okunur. Bir geliştirici yeni özellik eklerken, hata düzeltirken veya mevcut davranışı anlamaya çalışırken daha önce yazılmış kodu tekrar tekrar inceler.

Okunabilir kod aşağıdaki avantajları sağlar:

  • Yeni ekip üyeleri projeyi daha hızlı anlar.
  • Hataların bulunması ve düzeltilmesi kolaylaşır.
  • Yeni özellikler daha güvenli biçimde eklenir.
  • Kod incelemeleri daha verimli ilerler.
  • Yanlış anlaşılmalardan kaynaklanan problemler azalır.
  • Yazılımın bakım maliyeti düşer.
  • Teknik borcun kontrol altında tutulması kolaylaşır.

Karmaşık ve düzensiz bir kod tabanı başlangıçta zaman kazandırıyor gibi görünebilir. Fakat proje büyüdükçe küçük bir değişiklik bile beklenmeyen hatalara yol açabilir. Temiz kod ise geliştirme sürecini uzun vadede daha hızlı ve öngörülebilir hâle getirir.

Okunabilir Kod Yazmak İçin 10 Pratik Kural

Aşağıdaki temiz kod kuralları belirli bir programlama diline bağlı değildir. JavaScript, Python, Java, C# ve benzeri birçok dilde uygulanabilir.

1. Açıklayıcı İsimler Kullanın

Değişken, fonksiyon ve sınıf isimleri kodun amacını anlatmalıdır. Tek harfli veya neyi temsil ettiği belirsiz isimler, kodun anlaşılmasını zorlaştırır.

Kötü örnek:

const d = 7;
const p = 250;

function c(a, b) {
  return a * b;
}

Daha okunabilir örnek:

const deliveryDays = 7;
const productPrice = 250;

function calculateTotalPrice(price, quantity) {
  return price * quantity;
}

İyi bir isim, çoğu zaman açıklama satırına duyulan ihtiyacı ortadan kaldırır. Bir değişkeni anlamak için kodun başka bölümlerini incelemek gerekiyorsa isim yeterince açıklayıcı olmayabilir.

İsim seçerken şu soruyu sorun: “Bu kodu ilk kez gören biri, bu değerin neyi temsil ettiğini anlayabilir mi?”

2. Fonksiyonları Küçük Tutun

Uzun fonksiyonlar genellikle birden fazla işi aynı anda yapar. Bu durum kodu anlamayı, test etmeyi ve değiştirmeyi zorlaştırır.

Bir fonksiyon mümkün olduğunca tek bir göreve odaklanmalıdır.

Karmaşık örnek:

function completeOrder(order) {
  // Ürünleri doğrula
  // Toplam tutarı hesapla
  // Ödemeyi gerçekleştir
  // Stokları güncelle
  // E-posta gönder
}

Daha temiz bir yapı:

function completeOrder(order) {
  validateOrder(order);
  processPayment(order);
  updateStock(order);
  sendConfirmationEmail(order);
}

İkinci örnekte sipariş sürecinin hangi adımlardan oluştuğu fonksiyon isimlerinden anlaşılır. Ayrıca her adım bağımsız olarak test edilebilir.

Bir fonksiyonu açıklamak için “ve” kelimesini sık kullanıyorsanız fonksiyon birden fazla sorumluluk taşıyor olabilir.

3. Her Fonksiyona Tek Bir Sorumluluk Verin

Tek sorumluluk ilkesi, bir kod parçasının değişmesi için tek bir temel neden bulunmasını önerir.

Örneğin kullanıcı verilerini kaydeden bir fonksiyonun aynı zamanda e-posta hazırlaması, rapor üretmesi ve ekrana mesaj yazdırması gereksiz bağımlılıklar oluşturur.

function createUser(userData) {
  const user = saveUser(userData);
  sendWelcomeEmail(user);

  return user;
}

Bu kod başlangıçta küçük görünse de kullanıcı kaydetme ve e-posta gönderme işlemleri birbirinden farklı sorumluluklardır. Daha esnek bir kullanım için işlemler ayrılabilir:

const user = createUser(userData);
sendWelcomeEmail(user);

Sorumlulukların ayrılması kodun yeniden kullanılmasını ve olası hataların kaynağının bulunmasını kolaylaştırır.

4. Kod Tekrarından Kaçının

Aynı işlem birden fazla yerde tekrarlandığında değişiklik yapmak zorlaşır. Bir kural güncellendiğinde bütün kopyaların bulunması ve değiştirilmesi gerekir.

Tekrarlı örnek:

const firstProductTotal =
  firstProduct.price - firstProduct.price * 0.1;

const secondProductTotal =
  secondProduct.price - secondProduct.price * 0.1;

Daha temiz örnek:

function applyDiscount(price, discountRate) {
  return price - price * discountRate;
}

const firstProductTotal = applyDiscount(firstProduct.price, 0.1);
const secondProductTotal = applyDiscount(secondProduct.price, 0.1);

Ancak her benzer kodu hemen ortak bir fonksiyona dönüştürmek de doğru değildir. Yalnızca görünüşte benzer fakat farklı iş kurallarına sahip kodları birleştirmek, ileride daha karmaşık bir yapı oluşturabilir.

Önce gerçek bir tekrar olduğundan emin olun, ardından ortak davranışı uygun bir soyutlamaya taşıyın.

5. Karmaşık Koşulları Basitleştirin

Uzun ve iç içe koşullar kodun takip edilmesini zorlaştırır.

Karmaşık örnek:

if (user && user.isActive && user.age >= 18 && !user.isBlocked) {
  allowPurchase();
}

Daha okunabilir örnek:

const canPurchase =
  user &&
  user.isActive &&
  user.age >= 18 &&
  !user.isBlocked;

if (canPurchase) {
  allowPurchase();
}

Koşulun birden fazla yerde kullanılması gerekiyorsa fonksiyona da dönüştürülebilir:

function canUserPurchase(user) {
  return (
    user &&
    user.isActive &&
    user.age >= 18 &&
    !user.isBlocked
  );
}

Anlamlı bir isim verilen koşul, teknik kontrollerin arkasındaki iş kuralını görünür hâle getirir.

6. İç İçe Yapıları Erken Dönüşlerle Azaltın

Birden fazla if bloğunun iç içe kullanılması kodun okuma akışını bozar. Geçersiz durumları fonksiyonun başında ele almak, ana işlemi daha görünür hâle getirir.

İç içe yapı:

function processPayment(user, cart) {
  if (user) {
    if (user.isActive) {
      if (cart.items.length > 0) {
        return makePayment(cart);
      }
    }
  }

  return false;
}

Erken dönüş kullanılan yapı:

function processPayment(user, cart) {
  if (!user) return false;
  if (!user.isActive) return false;
  if (cart.items.length === 0) return false;

  return makePayment(cart);
}

Bu yönteme “guard clause” adı verilir. Geçersiz koşullar başta elendiği için fonksiyonun esas amacı daha kolay anlaşılır.

7. Sihirli Sayılar Yerine İsimlendirilmiş Sabitler Kullanın

Kod içinde açıklaması olmayan sayı ve metinlere “sihirli değer” denir. Bu değerlerin ne anlama geldiği çoğu zaman yalnızca kodu yazan kişi tarafından bilinir.

Belirsiz örnek:

if (failedLoginCount >= 5) {
  lockAccount();
}

Daha açık örnek:

const MAX_LOGIN_ATTEMPTS = 5;

if (failedLoginCount >= MAX_LOGIN_ATTEMPTS) {
  lockAccount();
}

İsimlendirilmiş sabit kullanımı hem kodun anlamını açıklar hem de değer değiştiğinde güncellemenin tek noktadan yapılmasını sağlar.

Aynı yaklaşım durum isimleri, kullanıcı rolleri ve hata kodları gibi metinsel değerlerde de uygulanabilir.

8. Yalnızca Gerekli Yerde Yorum Yazın

Yorumlar kötü yazılmış kodu anlaşılır hâle getirmek için kullanılmamalıdır. Öncelikle kodun kendisi açıklayıcı olmalıdır.

Gereksiz yorum:

// Kullanıcının yaşını bir artır
userAge = userAge + 1;

Bu yorum, kodun zaten söylediği bilgiyi tekrarlar.

Daha yararlı bir yorum ise işlemin neden yapıldığını açıklar:

// Kampanya, yerel saatle gece yarısında sona erdiği için
// sunucu saatini kullanıcının saat dilimine dönüştürüyoruz.
const localExpirationDate = convertToUserTimezone(expirationDate);

İyi yorumlar genellikle şu bilgileri açıklar:

  • Alınan teknik kararın nedeni,
  • Beklenmeyen bir iş kuralı,
  • Harici sistemden kaynaklanan zorunluluk,
  • Geçici çözümün kapsamı,
  • Dikkat edilmesi gereken özel durum.

Güncelliğini kaybeden yorumlar yanlış yönlendirebilir. Kod değiştiğinde ilgili açıklamalar da gözden geçirilmelidir.

9. Tutarlı Bir Kodlama Stili Kullanın

Aynı proje içinde farklı isimlendirme, girintileme ve dosya düzeni yaklaşımlarının kullanılması gereksiz zihinsel yük oluşturur.

Ekip içinde şu konularda ortak standartlar belirlenebilir:

  • Değişken ve fonksiyon isimlendirme biçimi,
  • Girintileme ve satır uzunluğu,
  • Dosya ve klasör adları,
  • Fonksiyonların sıralanması,
  • Hata yönetimi yaklaşımı,
  • Import düzeni,
  • Test dosyalarının konumu.

Otomatik biçimlendirme ve kod denetleme araçları, biçim tartışmalarını azaltarak ekibin kodun davranışına odaklanmasını sağlar.

En iyi stil yalnızca kişisel olarak tercih edilen değil, proje genelinde tutarlı şekilde uygulanan stildir.

10. Kodu Düzenli Olarak İyileştirin

Temiz kod çoğu zaman ilk denemede ortaya çıkmaz. Önce doğru çalışan bir çözüm hazırlanır, ardından kodun yapısı davranışı değiştirmeden iyileştirilir. Bu sürece refactoring, yani kodu yeniden düzenleme adı verilir.

Kodunuzu tamamladıktan sonra şu soruları sorabilirsiniz:

  • İsimler yeterince açık mı?
  • Fonksiyonlardan biri gereğinden uzun mu?
  • Tekrar eden bir işlem var mı?
  • Koşullar daha anlaşılır hâle getirilebilir mi?
  • Kullanılmayan kod bulunuyor mu?
  • Bu davranış kolayca test edilebilir mi?
  • Yeni bir geliştirici kodu ek açıklama olmadan anlayabilir mi?

Büyük ve riskli düzenlemeler yerine küçük iyileştirmeler yapmak daha güvenlidir. Otomatik testler de kodun davranışının değişmediğini doğrulamaya yardımcı olur.

Temiz Kod Yazmak İçin Uygulanabilir Kontrol Listesi

Kodunuzu paylaşmadan veya incelemeye göndermeden önce aşağıdaki kısa listeyi kullanabilirsiniz:

Bu maddelerin tamamını her küçük kod parçasında kusursuz şekilde uygulamak mümkün olmayabilir. Önemli olan, kodu her değişiklikte bulunduğundan biraz daha anlaşılır bırakmaktır.

Temiz Kod Yazarken Kaçınılması Gereken Hatalar

Gereğinden fazla soyutlama yapmak

Gelecekte kullanılabileceği düşüncesiyle çok sayıda katman, sınıf veya yardımcı fonksiyon oluşturmak kodu sadeleştirmek yerine zorlaştırabilir. Önce mevcut ihtiyacı açık biçimde karşılayan çözüm tercih edilmelidir.

Her fonksiyonu aşırı küçültmek

Küçük fonksiyonlar yararlıdır; ancak tek satırlık ve anlam taşımayan çok sayıda fonksiyon kod akışının sürekli farklı dosyalar arasında takip edilmesine neden olabilir. Bölme işlemi okunabilirliğe gerçekten katkı sağlamalıdır.

Kısa kodu temiz kod sanmak

Daha az satır her zaman daha okunabilir kod anlamına gelmez. Birden fazla işlemi tek satıra sıkıştırmak kodu kısaltabilir fakat anlaşılmasını zorlaştırabilir.

const activeNames = users.filter(u => u.a).map(u => u.n);

Daha açıklayıcı isimlerle aynı işlem çok daha rahat okunabilir:

const activeUsers = users.filter((user) => user.isActive);
const activeUserNames = activeUsers.map((user) => user.name);

Yalnızca kendi anlayabileceğiniz kod yazmak

Bir kod parçası bugün size açık görünebilir. Ancak birkaç ay sonra aynı kodu siz de yeniden anlamaya çalışacaksınız. Kodu, proje hakkında sınırlı bilgisi bulunan başka bir geliştiricinin okuyacağını düşünerek yazmak daha sağlıklı bir ölçüttür.

Temiz Kod Bir Alışkanlıktır

“Temiz kod nedir?” sorusunun tek bir programlama dili veya kesin bir kural listesiyle sınırlı cevabı yoktur. Temiz kod; anlaşılabilirlik, sadelik, tutarlılık ve değiştirilebilirlik üzerine kurulu bir geliştirme yaklaşımıdır.

Başlangıç seviyesinde şu üç alışkanlığa öncelik vermek güçlü bir temel oluşturur:

  1. Ne yaptığını açıklayan isimler kullanın.
  2. Fonksiyonları küçük ve tek sorumluluklu tutun.
  3. Çalışan kodu teslim etmeden önce bir kez daha okuyup sadeleştirin.

Okunabilir kod yazma becerisi deneyimle gelişir. Küçük iyileştirmeleri düzenli olarak uyguladığınızda yalnızca daha düzenli kod üretmezsiniz; hataları daha kolay bulur, ekip çalışmasını hızlandırır ve geliştirilmesi daha güvenli yazılımlar oluşturursunuz.

Sıkça Sorulan Sorular

Temiz kod ile çalışan kod arasındaki fark nedir?

Çalışan kod beklenen sonucu üretir. Temiz kod ise bunu anlaşılır, düzenlenebilir ve sürdürülebilir bir yapıyla yapar. İdeal durumda kodun hem doğru çalışması hem de kolay anlaşılması gerekir.

Temiz kod yazmaya nereden başlanmalıdır?

İlk olarak değişken ve fonksiyon isimlerini iyileştirin. Ardından uzun fonksiyonları, tekrar eden kodları ve karmaşık koşulları gözden geçirin. Küçük düzenlemeler zaman içinde önemli bir fark yaratır.

Yorum kullanmak temiz kod için kötü müdür?

Hayır. Kodun zaten açıkça anlattığı işlemi tekrar eden yorumlar genellikle gereksizdir. Bir kararın nedenini, özel bir iş kuralını veya teknik zorunluluğu açıklayan güncel yorumlar ise yararlıdır.

Temiz kod performansı etkiler mi?

Temiz kodun temel amacı okunabilirlik ve sürdürülebilirliktir. Bazı düzenlemeler performansı etkileyebilir; bu nedenle performans açısından kritik bölümlerde varsayım yapmak yerine ölçüm yapılmalıdır.

Temiz kod yazmak geliştirme süresini uzatır mı?

İlk aşamada isimlendirme ve düzenleme için ek zaman gerekebilir. Ancak anlaşılır kod; hata düzeltme, kod inceleme ve yeni özellik geliştirme süreçlerini kolaylaştırarak uzun vadede zaman kazandırır.