Yazılım geliştirme sürecinde temiz kod yazmak, hem projenin sürdürülebilirliği hem de ekip içi iletişim açısından kritik bir öneme sahiptir. Temiz kod, okunabilirliği yüksek, bakımı kolay ve hatası az olan kod anlamına gelir. İşte temiz kod yazmanın 10 altın kuralı:
1- Anlamlı İsimlendirmeler Kullanın
Değişken, fonksiyon veya sınıf isimleri, ne yaptığını açıkça belirtmelidir. Anlamsız kısaltmalar veya tek harfli isimler yerine, amacı netleştiren isimler tercih edilmelidir.
Örneğin, bir kullanıcının yaşını tutan değişken için a
yerine userAge
kullanmak daha doğrudur. Aynı şekilde, bir fonksiyon ismi proc()
yerine calculateUserDiscount()
olarak belirlenmelidir.
# Kötü Örnek
def f(x):
return x * 2
# İyi Örnek
def calculateDouble(value):
return value * 2
2- Fonksiyonlar Tek Bir İş Yapmalı
Her fonksiyonun tek bir sorumluluğu olmalıdır. Bir fonksiyon hem veri çekip hem de formatlamamalıdır. Bu, kodun yeniden kullanılabilirliğini artırır ve test etmeyi kolaylaştırır.
Örneğin, bir e-ticaret sisteminde sepete ürün ekleyen ve aynı zamanda ödeme hesaplaması yapan bir fonksiyon yerine, bu işlemler iki ayrı fonksiyona bölünmelidir.
# Kötü Örnek
def addToCartAndCalculateTotal(product):
cart.append(product)
total = sum(item.price for item in cart)
return total
# İyi Örnek
def addToCart(product):
cart.append(product)
def calculateTotal(cart):
return sum(item.price for item in cart)
3- Gereksiz Yorum Satırlarından Kaçının
Kodun kendisi kendini açıklayıcı olmalıdır. Eğer yorum satırlarıyla kodun ne yaptığını anlatıyorsanız, muhtemelen isimlendirme veya fonksiyon yapısında hata var demektir. Yorumlar, neden yapıldığını açıklamak için kullanılmalıdır
Örneğin, bir döngüde neden belirli bir koşulun atlandığını açıklamak faydalı olabilir:
# Kötü Örnek
# Kullanıcı yaşını kontrol et
if user.age > 18:
print("Yetişkin")
# İyi Örnek
# 18 yaş altı kullanıcılar için kayıt izni yok (Yasa Madde 25)
if user.age < 18:
raise PermissionError("Yaş sınırı nedeniyle kayıt reddedildi.")
4- Kod Tekrarını Önleyin (DRY Prensibi)
Don’t Repeat Yourself (DRY) prensibi, aynı kodu birden fazla yerde yazmamanız gerektiğini söyler. Tekrarlanan kod parçalarını fonksiyon veya sınıflara taşıyın.
Örneğin, iki farklı yerde kullanıcı e-posta formatını kontrol eden kod varsa, bu işlem bir fonksiyona dönüştürülmelidir:
# Kötü Örnek
if re.match(r"[^@]+@[^@]+\.[^@]+", email1):
print("Geçerli")
if re.match(r"[^@]+@[^@]+\.[^@]+", email2):
print("Geçerli")
# İyi Örnek
def isValidEmail(email):
return re.match(r"[^@]+@[^@]+\.[^@]+", email)
if isValidEmail(email1):
print("Geçerli")
5- Hata Yönetimini Doğru Yapın
Hataları görmezden gelmek yerine, try-except bloklarıyla ele alın. Ayrıca, hata mesajlarının anlaşılır olmasına dikkat edin.
Örneğin, bir dosya okuma işlemi sırasında oluşabilecek hatalar:
# Kötü Örnek file = open("data.txt") data = file.read() # İyi Örnek try: file = open("data.txt") except FileNotFoundError: print("Dosya bulunamadı.") except PermissionError: print("Dosya okuma izniniz yok.") else: data = file.read()
6- Kodunuzu Formatlayın ve Standartlara Uyun
Kodunuzun girinti, boşluk ve süslü parantez kullanımında tutarlı olun. PEP8 (Python), ESLint (JavaScript) gibi dil özelindeki formatlama kurallarını takip edin.
Örneğin, Python’da satır uzunluğu 79 karakteri geçmemelidir. Ayrıca, değişken isimlendirmelerinde snake_case kullanılmalıdır.
7- Unit Test Yazın
Test edilebilir kod yazmak, hataları erken yakalamanızı sağlar. Her fonksiyon için unit testler oluşturun ve testleri otomatize edin.
Örneğin, bir toplama fonksiyonu için test senaryosu:
def add(a, b): return a + b # Test def test_add(): assert add(2, 3) == 5 assert add(-1, 1) == 0
8- Magic Number’lardan Kaçının
Kod içinde anlamı belirsiz sayılar (sihirli sayılar) kullanmak yerine, bu değerleri sabitlere (constant) atayın.
Örneğin, vergi hesaplamasındaki %18’lik KDV oranı:
# Kötü Örnek total = price * 1.18 # İyi Örnek TAX_RATE = 1.18 total = price * TAX_RATE
9- Kodunuzu Düzenli Olarak Gözden Geçirin (Code Review)
Kodunuzu ekip arkadaşlarınızla düzenli olarak inceleyin. Farklı bakış açıları, potansiyel hataları veya iyileştirmeleri ortaya çıkarabilir.
12- Sürekli Refaktör Yapın
Kodunuzu iyileştirmek için asla geç kalmayın. Teknik borç biriktirmek, uzun vadede projeyi yönetilemez hale getirir.
Örneğin, karmaşık bir fonksiyonu daha küçük parçalara bölmek:
# Kötü Örnek def processOrder(order): # 50 satırlık karmaşık işlemler ... # İyi Örnek def validateOrder(order): ... def calculateTotal(order): ... def sendConfirmation(order): ...