Kľúčové body
1. Píšte čistý kód, ktorý je čitateľný a udržiavateľný
Jediným platným meraním kvality kódu: WTFs/minúta
Čitateľnosť je kľúčová. Čistý kód by mal byť ľahko pochopiteľný pre ostatných vývojárov. Mal by byť jednoduchý, elegantný a bez zbytočného neporiadku. Snažte sa písať kód, ktorý jasne vyjadruje svoj zámer bez potreby rozsiahlych komentárov. Používajte zmysluplné názvy premenných a funkcií, udržujte funkcie malé a zamerané a organizujte kód logicky.
Udržateľnosť umožňuje evolúciu. Kód, ktorý je ťažké zmeniť, sa stáva záťažou. Navrhnite svoj kód tak, aby bol flexibilný a modulárny, aby sa mohol prispôsobiť meniacim sa požiadavkám. Dodržiavajte princípy ako DRY (Nerobte si zbytočne) a SOLID, aby ste vytvorili voľne prepojené, vysoko koherentné systémy. Nezľutujte sa pri refaktoringu, aby ste zlepšili štruktúru kódu bez zmeny správania.
Čistý kód sa vypláca. Hoci písanie čistého kódu si vyžaduje viac úvodného úsilia, v dlhodobom horizonte ušetrí značný čas a nervy. Čistý kód je ľahšie laditeľný, rozšíriteľný a udržiavateľný. Umožňuje vývojárom pracovať efektívnejšie a znižuje riziko zavedenia chýb počas zmien. Urobte z čistého kódu základnú súčasť svojej vývojovej praxe.
2. Dodržiavajte zmysluplné konvencie pomenovania
Názov premennej, funkcie alebo triedy by mal odpovedať na všetky dôležité otázky. Mal by vám povedať, prečo existuje, čo robí a ako sa používa.
Používajte názvy, ktoré odhaľujú úmysel. Vyberte si názvy, ktoré jasne vyjadrujú účel a správanie premenných, funkcií a tried. Vyhnite sa názvom s jedným písmenom alebo kryptickým skratkám. Používajte vysloviteľné názvy, ktoré sa dajú ľahko vyhľadávať. Napríklad:
- Zlé: d (uplynulý čas v dňoch)
- Dobré: elapsedTimeInDays
Buďte konzistentní a presní. Používajte konzistentné konvencie pomenovania v celom kóde. Buďte presní, aby ste sa vyhli nejednoznačnosti - napríklad používajte zmysluplné rozlíšenia ako getActiveAccounts() a getActiveAccountInfo(). Vyhnite sa kódovaniu alebo predponám, ktoré pridávajú šum bez hodnoty. Názvy tried by mali byť podstatné mená, názvy metód by mali byť slovesá.
Dĺžka názvu by mala zodpovedať rozsahu. Používajte dlhšie, popisnejšie názvy pre premenné a funkcie s väčším rozsahom. Krátke názvy sú prijateľné pre malé, lokálne rozsahy. Dĺžka názvu by mala byť úmerná jeho rozsahu použitia. Optimalizujte pre čitateľnosť a porozumenie v kontexte, kde sa názov používa.
3. Udržujte funkcie malé a zamerané
Funkcie by mali robiť jednu vec. Mali by to robiť dobre. Mali by to robiť len to.
Malé je krásne. Funkcie by mali byť malé - typicky 5-10 riadkov dlhé. Mali by sa zmestiť na jednu obrazovku a byť okamžite pochopiteľné. Extrahujte kód do dobre pomenovaných pomocných funkcií namiesto písania dlhých, zložitých funkcií. Malé funkcie sú ľahšie pochopiteľné, testovateľné a udržiavateľné.
Robte jednu vec dobre. Každá funkcia by mala mať jeden jasný účel. Ak funkcia robí viacero vecí, extrahujte ich do samostatných funkcií. Znaky, že funkcia robí príliš veľa, zahŕňajú:
- Viacero úrovní abstrakcie
- Viacero sekcií alebo blokov kódu
- Početné parametre
Udržujte jednu úroveň abstrakcie. Všetky príkazy v rámci funkcie by mali byť na rovnakej úrovni abstrakcie. Nemiešajte vysokú logiku s nízkou úrovňou detailov. Extrahujte operácie nižšej úrovne do samostatných funkcií. To zlepšuje čitateľnosť tým, že udržuje funkcie zamerané a konceptuálne jednoduché.
4. Praktizujte správne formátovanie a organizáciu
Formátovanie kódu je o komunikácii a komunikácia je prvým poriadkom práce profesionálneho vývojára.
Konzistentné formátovanie je dôležité. Používajte konzistentné odsadenie, zalomenia riadkov a medzery v celom kóde. To zlepšuje čitateľnosť a znižuje kognitívnu záťaž. Dohodnite sa na formátovacích štandardoch so svojím tímom a používajte automatizované nástroje na ich presadzovanie. Kľúčové formátovacie pokyny zahŕňajú:
- Správne odsadenie
- Konzistentné umiestnenie zložených zátvoriek
- Logické zalomenia riadkov
- Primerané biele miesta
Organizujte kód logicky. Skupinujte súvisiaci kód dohromady a oddelujte nesúvisiaci kód. Používajte prázdne riadky na vytvorenie "odsekov" medzi logickými sekciami. Umiestnite súvisiace funkcie blízko seba. Udržujte súbory zamerané na jeden koncept alebo komponent. Rozdeľte veľké súbory na menšie, zamerané, keď je to vhodné.
Dodržiavajte štandardné konvencie. Držte sa štandardných konvencií pre váš jazyk a komunitu. To robí váš kód známejším a prístupnejším pre ostatných vývojárov. Napríklad v Jave:
- Názvy tried používajú PascalCase
- Názvy metód používajú camelCase
- Konštanty používajú ALL_CAPS
5. Spravujte závislosti a vyhýbajte sa duplicite
Duplicita môže byť koreňom všetkého zla v softvéri.
Eliminujte duplicitu. Duplicovaný kód je premeškaná príležitosť na abstrakciu. Keď vidíte duplicitu, extrahujte spoločný kód do znovupoužiteľnej funkcie alebo triedy. To zlepšuje udržateľnosť centralizovaním logiky a znižovaním rizika nekonzistentných zmien. Typy duplicity, na ktoré si dajte pozor:
- Identické bloky kódu
- Podobné algoritmy s drobnými variáciami
- Opakované switch/case alebo if/else reťazce
Starostlivo spravujte závislosti. Minimalizujte závislosti medzi modulmi, aby ste znížili prepojenosť. Používajte injekciu závislostí a inverziu kontroly, aby ste spravili kód modulárnejším a testovateľnejším. Dodržiavajte princíp inverzie závislostí - závisí na abstrakciách, nie na konkrétnych implementáciách. To robí váš kód flexibilnejším a ľahšie zmeniteľným.
Používajte princíp minimálneho poznania. Modul by nemal poznať vnútornosti objektov, ktoré manipuluje. To znižuje prepojenosť medzi modulmi. Napríklad, používajte Zákon Demeter - metóda by mala volať metódy iba na:
- Svojom vlastnom objekte
- Objektoch predaných ako parametre
- Objektoch, ktoré vytvára
- Svojich priamych komponentných objektoch
6. Riešte chyby elegantne
Riešenie chýb je dôležité, ale ak zakrýva logiku, je to zlé.
Používajte výnimky namiesto chybových kódov. Výnimky sú čistejšie a nezapĺňajú hlavnú logiku vášho kódu. Umožňujú oddeliť spracovanie chýb od šťastnej cesty. Pri používaní výnimiek:
- Vytvorte informatívne chybové správy
- Poskytnite kontext s výnimkami
- Definujte triedy výnimiek na základe potrieb volajúceho
Nevracajte null. Vracanie null vedie k výnimkám null pointer a zapĺňa kód kontrolami null. Namiesto toho:
- Vracajte prázdne kolekcie namiesto null pre zoznamy
- Používajte vzor Null Object
- Používajte Optional v Jave alebo Maybe vo funkčných jazykoch
Píšte try-catch-finally vyhlásenia najprv. Začnite s try-catch-finally pri písaní kódu, ktorý by mohol vyvolať výnimky. To pomáha definovať rozsah a očakávania pre volajúci kód. Zabezpečuje, že zdroje sú správne spravované a uvoľnené, aj v chybových scenároch.
7. Píšte dôkladné jednotkové testy
Testovací kód je rovnako dôležitý ako produkčný kód.
Dodržiavajte tri zákony TDD. Test-Driven Development (TDD) zlepšuje kvalitu a dizajn kódu:
- Napíšte zlyhávajúci test predtým, ako napíšete akýkoľvek produkčný kód
- Napíšte len toľko testu, aby ste preukázali zlyhanie
- Napíšte len toľko produkčného kódu, aby ste prešli testom
Udržujte testy čisté a udržiavateľné. Používajte rovnaké štandardy kvality kódu pre svoje testy ako pre produkčný kód. Pravidelne refaktorujte a zlepšujte testovací kód. Dobre štruktúrované testy slúžia ako dokumentácia a umožňujú bezstarostný refaktoring produkčného kódu.
Snažte sa o komplexné pokrytie testami. Píšte testy, ktoré pokrývajú okrajové prípady, hraničné podmienky a chybové scenáre - nie len šťastnú cestu. Používajte nástroje na pokrytie kódu, aby ste identifikovali medzery v pokrytí testami. Pamätajte, že 100% pokrytie nezaručuje bezchybový kód, ale poskytuje dôveru pri refaktoringu a zmenách.
8. Neustále refaktorujte kód
Nechajte táborisko čistejšie, než ste ho našli.
Refaktorujte príležitostne. Zlepšujte štruktúru kódu vždy, keď pracujete na nejakom úseku kódu. Dodržiavajte pravidlo skautov: nechajte kód lepší, než ste ho našli. Malé, postupné zlepšenia sa časom sčítajú a zabránia hnilobe kódu. Bežné techniky refaktoringu zahŕňajú:
- Extrakciu metód alebo tried
- Premenovanie pre jasnosť
- Zjednodušenie zložitých podmienok
- Odstránenie duplicity
Refaktorujte bezpečne s testami. Vždy majte solídny súbor testov pred refaktoringom. Robte malé, postupné zmeny a často spúšťajte testy. To vám dáva dôveru, že vaše zmeny neporušujú existujúcu funkčnosť. Používajte automatizované nástroje na refaktoring, keď sú k dispozícii, aby ste znížili riziko zavedenia chýb.
Vyvážte refaktoring s dodávaním hodnoty. Hoci je neustály refaktoring dôležitý, nenechajte sa ním paralyzovať. Snažte sa o "dostatočne dobré" namiesto dokonalosti. Zamerajte úsilie o refaktoring na najproblémovejšie alebo najčastejšie menené oblasti kódu. Komunikujte hodnotu refaktoringu zainteresovaným stranám, aby ste zabezpečili podporu pre pokračujúce zlepšovanie kódu.
9. Používajte princípy objektovo orientovaného a funkčného programovania
Objekty skrývajú svoje dáta za abstrakciami a vystavujú funkcie, ktoré na týchto dátach operujú. Dátové štruktúry vystavujú svoje dáta a nemajú žiadne zmysluplné funkcie.
Používajte objektovo orientované princípy rozumne. Aplikujte princípy ako enkapsulácia, dedičnosť a polymorfizmus na vytvorenie flexibilných, modulárnych dizajnov. Dodržiavajte princípy SOLID:
- Princíp jednotnej zodpovednosti
- Princíp otvorenosti a uzavretosti
- Princíp substitúcie Liskov
- Princíp segregácie rozhraní
- Princíp inverzie závislostí
Využívajte koncepty funkčného programovania. Aj v objektovo orientovaných jazykoch môžu techniky funkčného programovania viesť k čistejšiemu kódu:
- Čisté funkcie bez vedľajších účinkov
- Nemenné dáta
- Funkcie vyššieho poriadku
- Kompozícia funkcií
Vyberte správny prístup pre problém. Objektovo orientované a funkčné paradigmy majú každé svoje silné a slabé stránky. Používajte objektovo orientovaný dizajn, keď potrebujete modelovať zložité domény so správaním. Používajte funkčné prístupy na transformáciu dát a spracovateľské pipeline. Mnohé moderné jazyky podporujú hybridný prístup, ktorý vám umožňuje použiť najlepší nástroj pre každú časť vášho systému.
10. Starostlivo zvažujte súbežnosť
Súbežnosť je stratégia oddeľovania. Pomáha nám oddeliť, čo sa robí, od toho, kedy sa to robí.
Pochopte výzvy súbežnosti. Súbežné programovanie zavádza zložitosti a potenciálne jemné chyby. Bežné problémy zahŕňajú:
- Pretečenia
- Zablokovania
- Premeškané signály
- Problémy s viditeľnosťou pamäte
Oddelujte obavy o súbežnosť. Udržujte svoj kód súvisiaci so súbežnosťou oddelený od iného kódu. To uľahčuje jeho pochopenie a testovanie. Používajte abstrakcie ako Executors, Futures a Actors na správu súbežnosti namiesto práce s surovými vláknami.
Preferujte nemennosť a čisté funkcie. Nemenné objekty a čisté funkcie sú inherentne bezpečné pre vlákna. Eliminujú mnohé problémy so súbežnosťou tým, že sa vyhýbajú zdieľanému meniteľnému stavu. Keď je meniteľný stav nevyhnutný, používajte správne techniky synchronizácie a zvážte použitie atomických premenných alebo súbežných kolekcií.
Posledná aktualizácia:
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.
Recenzie
Čistý kód získava prevažne pozitívne hodnotenia za svoje princípy písania čitateľného a udržateľného kódu. Čitatelia oceňujú praktické rady týkajúce sa pomenovania, funkcií a testovania. Zameranie knihy na Javu a niektoré príliš prísne smernice sú bežné kritiky. Mnohí ju považujú za nevyhnutné čítanie pre vývojárov, hoci niektorí ju považujú za menej užitočnú pre skúsených programátorov. Prípadové štúdie a príklady refaktoringu sú niektorými chválené, ale iní ich kritizujú ako prehnané. Celkovo recenzenti súhlasia, že kniha ponúka cenné poznatky o kvalite kódu, aj keď nie všetky návrhy sú univerzálne použiteľné.
Similar Books








