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::
FAQ
What's "Clean Code: A Handbook of Agile Software Craftsmanship" about?
- Focus on Clean Code: "Clean Code" by Robert C. Martin emphasizes writing code that is easy to read, understand, and maintain.
- Professionalism in Coding: It argues that clean code is a hallmark of professionalism in software development.
- Practical Advice: The book provides guidelines, examples, and case studies to help developers write clean and efficient code.
Why should I read "Clean Code: A Handbook of Agile Software Craftsmanship"?
- Improve Coding Skills: It teaches how to write code that is clean, efficient, and maintainable.
- Learn from Experts: Part of the Robert C. Martin series, known for its technical and pragmatic approach.
- Long-term Benefits: Writing clean code reduces maintenance costs and makes you a more valuable developer.
What are the key takeaways of "Clean Code: A Handbook of Agile Software Craftsmanship"?
- Code Readability: Emphasizes that code should be easy to read and understand.
- Single Responsibility Principle: Advocates for each class or function to have one reason to change.
- Continuous Improvement: Encourages developers to continuously improve their code, following the Boy Scout Rule.
How does "Clean Code: A Handbook of Agile Software Craftsmanship" define clean code?
- Elegance and Efficiency: Clean code is described as elegant and efficient, with minimal dependencies.
- Readable and Maintainable: It should read like well-written prose, making the designer's intent clear.
- Focused and Single-minded: Each function, class, and module should have a single, clear purpose.
What is the Single Responsibility Principle in "Clean Code: A Handbook of Agile Software Craftsmanship"?
- One Reason to Change: A class or module should have one, and only one, reason to change.
- Improves Cohesion: Ensures that classes are cohesive, with closely related methods and variables.
- Facilitates Maintenance: Makes the code easier to maintain and extend, reducing the impact of changes.
What is the "Boy Scout Rule" mentioned in "Clean Code: A Handbook of Agile Software Craftsmanship"?
- Continuous Improvement: Suggests leaving the codebase cleaner than you found it.
- Small, Incremental Changes: Encourages making small improvements, like renaming variables or breaking up functions.
- Professional Responsibility: Presented as a professional responsibility to ensure maintainability.
How does "Clean Code: A Handbook of Agile Software Craftsmanship" approach Test-Driven Development (TDD)?
- Fundamental Discipline: TDD is crucial for writing clean, reliable code.
- Three Laws of TDD: Write a failing test first, write code to pass the test, then refactor.
- Benefits: Helps catch bugs early and improves code design.
What are "code smells" according to "Clean Code: A Handbook of Agile Software Craftsmanship"?
- Definition: Indicators of potential problems that hinder readability or maintainability.
- Examples: Long methods, large classes, and duplicated code.
- Addressing Smells: Provides heuristics and refactoring techniques to improve code quality.
How does "Clean Code: A Handbook of Agile Software Craftsmanship" suggest handling exceptions?
- Prefer Exceptions: Use exceptions instead of error codes for better context and management.
- Provide Context: Include meaningful messages and context when throwing exceptions.
- Avoid Checked Exceptions: Suggests using unchecked exceptions for cleaner code.
What role do unit tests play in "Clean Code: A Handbook of Agile Software Craftsmanship"?
- Ensure Code Quality: Unit tests ensure code works as intended and remains maintainable.
- Test-Driven Development: Advocates writing tests before production code.
- Clean and Readable Tests: Tests should be as clean and readable as production code.
What is the role of refactoring in "Clean Code: A Handbook of Agile Software Craftsmanship"?
- Continuous Improvement: Refactoring improves code structure and readability without changing functionality.
- Techniques: Provides techniques like Extract Method and Rename Variable to enhance code quality.
- Fearless Refactoring: With comprehensive tests, developers can refactor confidently.
What are the best quotes from "Clean Code: A Handbook of Agile Software Craftsmanship" and what do they mean?
- "Clean code does one thing well." Emphasizes focus and clarity in code.
- "Leave the campground cleaner than you found it." Encourages continuous improvement of the codebase.
- "You know you are working on clean code when each routine you read turns out to be pretty much what you expected." Highlights the importance of readability and predictability.
İ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.
Similar Books






