Anahtar Çıkarım
1. Okunabilir ve sürdürülebilir temiz kod yazın
Kod kalitesinin tek geçerli ölçüsü: Dakikada kaç tane "Bu da ne?" dediğinizdir.
Okunabilirlik önceliklidir. Temiz kod, diğer geliştiriciler tarafından kolayca anlaşılabilir olmalıdır. Basit, zarif ve dağınıklıktan uzak olmalıdır. Kapsamlı yorumlara ihtiyaç duymadan amacını açıkça ifade eden kod yazmaya çalışın. Anlamlı değişken ve fonksiyon isimleri kullanın, fonksiyonları küçük ve odaklanmış tutun ve kodu mantıklı bir şekilde organize edin.
Sürdürülebilirlik evrimi mümkün kılar. Değiştirilmesi zor olan kod bir yük haline gelir. Kodunuzu esnek ve modüler olacak şekilde tasarlayın, böylece değişen gereksinimlere uyum sağlayabilir. DRY (Kendini Tekrarlama) ve SOLID gibi prensipleri takip ederek gevşek bağlı, yüksek uyumlu sistemler oluşturun. Davranışı değiştirmeden kod yapısını iyileştirmek için acımasızca yeniden düzenleyin.
Temiz kod karşılığını verir. Temiz kod yazmak başlangıçta daha fazla çaba gerektirse de, uzun vadede önemli ölçüde zaman ve baş ağrısından tasarruf sağlar. Temiz kod, hata ayıklamayı, genişletmeyi ve sürdürmeyi kolaylaştırır. Geliştiricilerin daha verimli çalışmasını sağlar ve değişiklikler sırasında hata yapma riskini azaltır. Temiz kodu geliştirme pratiğinizin temel bir parçası haline getirin.
2. Anlamlı adlandırma kurallarını takip edin
Bir değişkenin, fonksiyonun veya sınıfın adı, tüm büyük soruları yanıtlamalıdır. Neden var olduğunu, ne yaptığını ve nasıl kullanıldığını söylemelidir.
Niyet belirten isimler kullanın. Değişkenlerin, fonksiyonların ve sınıfların amacını ve davranışını açıkça ileten isimler seçin. Tek harfli isimlerden veya anlaşılmaz kısaltmalardan kaçının. Kolayca aranabilir, telaffuz edilebilir isimler kullanın. Örneğin:
- Kötü: d (gün cinsinden geçen süre)
- İyi: gecenSureGunCinsinden
Tutarlı ve kesin olun. Kod tabanınızda tutarlı adlandırma kuralları kullanın. Belirsizliği önlemek için kesin olun - örneğin, getAktifHesaplar() ve getAktifHesapBilgisi() gibi anlamlı ayrımlar kullanın. Değer katmayan kodlamalardan veya öneklerden kaçının. Sınıf isimleri isim, metod isimleri fiil olmalıdır.
Ad uzunluğu kapsamla eşleşmelidir. Daha geniş kapsamlı değişkenler ve fonksiyonlar için daha uzun, daha açıklayıcı isimler kullanın. Küçük, yerel kapsamlar için kısa isimler kabul edilebilir. Bir ismin uzunluğu, kullanım kapsamına orantılı olmalıdır. İsmin kullanıldığı bağlamda okunabilirlik ve anlama optimizasyonu yapın.
3. Fonksiyonları küçük ve odaklanmış tutun
Fonksiyonlar tek bir şey yapmalıdır. Bunu iyi yapmalıdır. Sadece bunu yapmalıdır.
Küçük güzeldir. Fonksiyonlar küçük olmalıdır - genellikle 5-10 satır uzunluğunda. Bir ekrana sığmalı ve anında kavranabilir olmalıdır. Uzun, karmaşık fonksiyonlar yazmak yerine, kodu iyi adlandırılmış yardımcı fonksiyonlara ayırın. Küçük fonksiyonlar anlamayı, test etmeyi ve sürdürmeyi kolaylaştırır.
Tek bir şeyi iyi yapın. Her fonksiyonun tek bir, net amacı olmalıdır. Bir fonksiyon birden fazla şey yapıyorsa, bunları ayrı fonksiyonlara ayırın. Bir fonksiyonun çok fazla şey yaptığını gösteren işaretler şunlardır:
- Birden fazla soyutlama seviyesi
- Birden fazla bölüm veya kod bloğu
- Çok sayıda parametre
Tek bir soyutlama seviyesini koruyun. Bir fonksiyon içindeki ifadeler aynı soyutlama seviyesinde olmalıdır. Yüksek seviyeli mantığı düşük seviyeli detaylarla karıştırmayın. Düşük seviyeli işlemleri ayrı fonksiyonlara ayırın. Bu, fonksiyonları odaklanmış ve kavramsal olarak basit tutarak okunabilirliği artırır.
4. Doğru biçimlendirme ve organizasyon uygulayın
Kod biçimlendirme iletişimle ilgilidir ve iletişim profesyonel geliştiricinin ilk işidir.
Tutarlı biçimlendirme önemlidir. Kodunuzda tutarlı girinti, satır sonları ve boşluklar kullanın. Bu, okunabilirliği artırır ve bilişsel yükü azaltır. Ekibinizle biçimlendirme standartları üzerinde anlaşın ve bunları uygulamak için otomatik araçlar kullanın. Ana biçimlendirme yönergeleri şunları içerir:
- Doğru girinti
- Tutarlı parantez yerleştirme
- Mantıklı satır sonları
- Uygun boşluk
Kodu mantıklı bir şekilde organize edin. İlgili kodu bir araya getirin ve ilgisiz kodu ayırın. Mantıksal bölümler arasında "paragraf" boşlukları oluşturmak için boş satırlar kullanın. İlgili fonksiyonları birbirine yakın yerleştirin. Dosyaları tek bir kavram veya bileşene odaklanmış tutun. Uygun olduğunda büyük dosyaları daha küçük, daha odaklanmış olanlara ayırın.
Standart konvansiyonları takip edin. Diliniz ve topluluğunuz için standart konvansiyonlara uyun. Bu, kodunuzu diğer geliştiriciler için daha tanıdık ve erişilebilir hale getirir. Örneğin, Java'da:
- Sınıf isimleri PascalCase kullanır
- Metod isimleri camelCase kullanır
- Sabitler ALL_CAPS kullanır
5. Bağımlılıkları yönetin ve tekrardan kaçının
Yazılımdaki tüm kötülüklerin kökü tekrarlama olabilir.
Tekrarlamayı ortadan kaldırın. Tekrarlanan kod, soyutlama için kaçırılmış bir fırsattır. Tekrarlama gördüğünüzde, ortak kodu yeniden kullanılabilir bir fonksiyon veya sınıfa ayırın. Bu, mantığı merkezileştirerek ve tutarsız değişiklikler riskini azaltarak sürdürülebilirliği artırır. İzlenecek tekrarlama türleri:
- Aynı kod blokları
- Küçük varyasyonlarla benzer algoritmalar
- Tekrarlanan switch/case veya if/else zincirleri
Bağımlılıkları dikkatlice yönetin. Modüller arasındaki bağımlılıkları en aza indirin ve bağımlılığı azaltın. Kodunuzu daha modüler ve test edilebilir hale getirmek için bağımlılık enjeksiyonu ve kontrol tersine çevirmesi kullanın. Bağımlılık Tersine Çevirme Prensibini takip edin - somutlamalara değil, soyutlamalara bağımlı olun. Bu, kodunuzu daha esnek ve değiştirilmesi daha kolay hale getirir.
En az bilgi ilkesini kullanın. Bir modül, manipüle ettiği nesnelerin iç işleyişini bilmemelidir. Bu, modüller arasındaki bağımlılığı azaltır. Örneğin, Demeter Yasası'nı kullanın - bir metod yalnızca şunlar üzerinde metod çağrısı yapmalıdır:
- Kendi nesnesi
- Parametre olarak geçirilen nesneler
- Oluşturduğu nesneler
- Doğrudan bileşen nesneleri
6. Hataları zarif bir şekilde yönetin
Hata yönetimi önemlidir, ancak mantığı gizliyorsa yanlıştır.
Hata kodları yerine istisnalar kullanın. İstisnalar daha temizdir ve kodunuzun ana mantığını karıştırmaz. Hata yönetiminin mutlu yoldan ayrılmasına izin verir. İstisnalar kullanırken:
- Bilgilendirici hata mesajları oluşturun
- İstisnalarla bağlam sağlayın
- Çağıranın ihtiyaçlarına göre istisna sınıfları tanımlayın
Null döndürmeyin. Null döndürmek, null işaretçi istisnalarına yol açar ve kodu null kontrolleriyle karıştırır. Bunun yerine:
- Listeler için null yerine boş koleksiyonlar döndürün
- Null Nesne desenini kullanın
- Java'da Optional veya fonksiyonel dillerde Maybe kullanın
Önce try-catch-finally ifadelerini yazın. İstisna atabilecek kod yazarken try-catch-finally ile başlayın. Bu, çağıran kod için kapsam ve beklentileri tanımlamaya yardımcı olur. Hata senaryolarında bile kaynakların düzgün bir şekilde yönetilmesini ve serbest bırakılmasını sağlar.
7. Kapsamlı birim testleri yazın
Test kodu, üretim kodu kadar önemlidir.
TDD'nin üç yasasını takip edin. Test Odaklı Geliştirme (TDD), kod kalitesini ve tasarımını iyileştirir:
- Herhangi bir üretim kodu yazmadan önce başarısız bir test yazın
- Başarısızlığı göstermek için yalnızca yeterli test yazın
- Testi geçmek için yalnızca yeterli üretim kodu yazın
Testleri temiz ve sürdürülebilir tutun. Testlerinize üretim kodunuz kadar yüksek kalite standartları uygulayın. Test kodunu düzenli olarak yeniden düzenleyin ve iyileştirin. İyi yapılandırılmış testler, dokümantasyon işlevi görür ve üretim kodunun korkusuzca yeniden düzenlenmesini sağlar.
Kapsamlı test kapsamı hedefleyin. Sadece mutlu yolu değil, uç durumları, sınır koşullarını ve hata senaryolarını kapsayan testler yazın. Test kapsamındaki boşlukları belirlemek için kod kapsamı araçlarını kullanın. Unutmayın, %100 kapsam hata içermeyen kodu garanti etmez, ancak yeniden düzenleme ve değişikliklerde güven sağlar.
8. Kodu sürekli olarak yeniden düzenleyin
Kamp alanını bulduğunuzdan daha temiz bırakın.
Fırsatçı bir şekilde yeniden düzenleyin. Bir kod parçası üzerinde çalışırken kod yapısını iyileştirin. İzci Kuralını takip edin: kodu bulduğunuzdan daha iyi bırakın. Küçük, kademeli iyileştirmeler zamanla birikir ve kod çürümesini önler. Yaygın yeniden düzenleme teknikleri şunları içerir:
- Metod veya sınıf çıkarma
- Açıklık için yeniden adlandırma
- Karmaşık koşulları basitleştirme
- Tekrarlamayı kaldırma
Testlerle güvenli bir şekilde yeniden düzenleyin. Yeniden düzenlemeden önce her zaman sağlam bir test paketi bulundurun. Küçük, kademeli değişiklikler yapın ve testleri sık sık çalıştırın. Bu, değişikliklerinizin mevcut işlevselliği bozmadığına dair güven verir. Hataların tanıtılma riskini azaltmak için mevcut olduğunda otomatik yeniden düzenleme araçlarını kullanın.
Yeniden düzenlemeyi değer sunmakla dengeleyin. Sürekli yeniden düzenleme önemli olsa da, ilerlemeyi felç etmesine izin vermeyin. Mükemmeliyet yerine "yeterince iyi" hedefleyin. Yeniden düzenleme çabalarını kodun en sorunlu veya sık değiştirilen alanlarına odaklayın. Sürekli kod iyileştirmesi için destek sağlamak amacıyla yeniden düzenlemenin değerini paydaşlara iletin.
9. Nesne yönelimli ve fonksiyonel programlama ilkelerini uygulayın
Nesneler verilerini soyutlamaların arkasına gizler ve bu veriler üzerinde çalışan fonksiyonları ortaya çıkarır. Veri yapıları verilerini ortaya çıkarır ve anlamlı fonksiyonlara sahip değildir.
Nesne yönelimli ilkeleri akıllıca kullanın. Esnek, modüler tasarımlar oluşturmak için kapsülleme, kalıtım ve çok biçimlilik gibi ilkeleri uygulayın. SOLID ilkelerini takip edin:
- Tek Sorumluluk İlkesi
- Açık-Kapalı İlkesi
- Liskov Yerine Geçme İlkesi
- Arayüz Ayrımı İlkesi
- Bağımlılık Tersine Çevirme İlkesi
Fonksiyonel programlama kavramlarından yararlanın. Nesne yönelimli dillerde bile, fonksiyonel programlama teknikleri daha temiz koda yol açabilir:
- Yan etkisi olmayan saf fonksiyonlar
- Değişmez veri
- Yüksek dereceli fonksiyonlar
- Fonksiyon bileşimi
Sorun için doğru yaklaşımı seçin. Nesne yönelimli ve fonksiyonel paradigmaların her birinin güçlü ve zayıf yönleri vardır. Davranışla karmaşık alanları modellemeniz gerektiğinde nesne yönelimli tasarımı kullanın. Veri dönüşümü ve işleme hatları için fonksiyonel yaklaşımlar kullanın. Birçok modern dil, sisteminizin her parçası için en iyi aracı kullanmanıza olanak tanıyan hibrit bir yaklaşımı destekler.
10. Eşzamanlılığı dikkatlice düşünün
Eşzamanlılık bir ayrıştırma stratejisidir. Ne yapıldığını ne zaman yapıldığından ayırmamıza yardımcı olur.
Eşzamanlılık zorluklarını anlayın. Eşzamanlı programlama karmaşıklık ve ince hatalar için potansiyel getirir. Yaygın sorunlar şunları içerir:
- Yarış koşulları
- Kilitlenmeler
- Kaçırılan sinyaller
- Bellek görünürlüğü sorunları
Eşzamanlılıkla ilgili endişeleri ayırın. Eşzamanlılıkla ilgili kodunuzu diğer kodlardan ayrı tutun. Bu, mantık yürütmeyi ve test etmeyi kolaylaştırır. Eşzamanlılığı yönetmek için ham iş parçacıklarıyla çalışmak yerine Yürütücüler, Gelecekler ve Aktörler gibi soyutlamalar kullanın.
Değişmezlik ve saf fonksiyonları tercih edin. Değişmez nesneler ve saf fonksiyonlar doğası gereği iş parçacığı güvenlidir. Paylaşılan değişken durumu önleyerek birçok eşzamanlılık sorununu ortadan kaldırırlar. Değişken durum gerekli olduğunda, uygun senkronizasyon tekniklerini kullanın ve atomik değişkenler veya eşzamanlı koleksiyonlar kullanmayı düşünün.
Son güncelleme::
İncelemeler
Clean Code, okunabilir ve sürdürülebilir kod yazma ilkeleriyle genellikle olumlu eleştiriler alıyor. Okuyucular, isimlendirme, fonksiyonlar ve test etme konularındaki pratik tavsiyeleri takdir ediyor. Kitabın Java odaklı olması ve bazı aşırı katı yönergeler yaygın eleştiriler arasında yer alıyor. Birçok kişi, geliştiriciler için vazgeçilmez bir okuma olarak değerlendirirken, bazıları deneyimli programcılar için daha az faydalı buluyor. Vaka çalışmaları ve yeniden yapılandırma örnekleri bazıları tarafından övülürken, diğerleri tarafından abartılı bulunuyor. Genel olarak, eleştirmenler kitabın kod kalitesi üzerine değerli içgörüler sunduğunda hemfikir, ancak tüm önerilerin evrensel olarak uygulanabilir olmadığını belirtiyorlar.