Ključne točke
1. Pišite čisti kod koji je čitljiv i održiv
Jedina valjana mjera kvalitete koda: WTF-ova/minuta
Čitljivost je od najveće važnosti. Čisti kod trebao bi biti lako razumljiv drugim programerima. Trebao bi biti jednostavan, elegantan i bez suvišnih elemenata. Težite pisanju koda koji jasno izražava svoju namjeru bez potrebe za opširnim komentarima. Koristite smisleno imenovanje varijabli i funkcija, održavajte funkcije malima i fokusiranima te organizirajte kod logično.
Održavanje omogućava evoluciju. Kod koji je teško mijenjati postaje teret. Dizajnirajte svoj kod da bude fleksibilan i modularan kako bi se mogao prilagoditi promjenjivim zahtjevima. Slijedite principe poput DRY (Ne ponavljaj se) i SOLID kako biste stvorili slabo povezane, visoko kohezivne sustave. Neumoljivo refaktorirajte kako biste poboljšali strukturu koda bez promjene ponašanja.
Čisti kod se isplati. Iako pisanje čistog koda zahtijeva više truda na početku, dugoročno štedi značajno vrijeme i glavobolje. Čisti kod je lakši za otklanjanje grešaka, proširenje i održavanje. Omogućuje programerima učinkovitiji rad i smanjuje rizik od uvođenja grešaka tijekom promjena. Uključite čisti kod kao ključni dio svoje razvojne prakse.
2. Slijedite smislene konvencije imenovanja
Ime varijable, funkcije ili klase treba odgovoriti na sva važna pitanja. Treba reći zašto postoji, što radi i kako se koristi.
Koristite imena koja otkrivaju namjeru. Odaberite imena koja jasno prenose svrhu i ponašanje varijabli, funkcija i klasa. Izbjegavajte imena s jednim slovom ili kriptične skraćenice. Koristite izgovorljiva imena koja se lako pretražuju. Na primjer:
- Loše: d (prošlo vrijeme u danima)
- Dobro: elapsedTimeInDays
Budite dosljedni i precizni. Koristite dosljedne konvencije imenovanja kroz cijeli kod. Budite precizni kako biste izbjegli dvosmislenost - na primjer, koristite smislene razlike poput getActiveAccounts() i getActiveAccountInfo(). Izbjegavajte kodiranja ili prefikse koji dodaju šum bez vrijednosti. Imena klasa trebaju biti imenice, a imena metoda glagoli.
Duljina imena trebala bi odgovarati opsegu. Koristite duža, opisnija imena za varijable i funkcije s većim opsegom. Kratka imena su prihvatljiva za male, lokalne opsege. Duljina imena trebala bi biti proporcionalna njegovom opsegu korištenja. Optimizirajte za čitljivost i razumijevanje unutar konteksta u kojem se ime koristi.
3. Održavajte funkcije malima i fokusiranima
Funkcije trebaju raditi jednu stvar. Trebaju to raditi dobro. Trebaju to raditi isključivo.
Malo je lijepo. Funkcije trebaju biti male - obično 5-10 redaka. Trebaju stati na jedan ekran i biti odmah razumljive. Izvucite kod u dobro imenovane pomoćne funkcije umjesto da pišete duge, složene funkcije. Male funkcije su lakše za razumijevanje, testiranje i održavanje.
Radite jednu stvar dobro. Svaka funkcija trebala bi imati jednu, jasnu svrhu. Ako funkcija radi više stvari, izdvojite ih u odvojene funkcije. Znakovi da funkcija radi previše uključuju:
- Više razina apstrakcije
- Više sekcija ili blokova koda
- Brojni parametri
Održavajte jednu razinu apstrakcije. Izjave unutar funkcije trebaju biti na istoj razini apstrakcije. Ne miješajte visoku logiku s niskim detaljima. Izdvojite operacije niže razine u odvojene funkcije. To poboljšava čitljivost držeći funkcije fokusirane i konceptualno jednostavne.
4. Prakticirajte pravilno formatiranje i organizaciju
Formatiranje koda je o komunikaciji, a komunikacija je prvi red poslovanja profesionalnog programera.
Dosljedno formatiranje je važno. Koristite dosljednu uvlaku, razmake i razmake između redaka kroz cijeli kod. To poboljšava čitljivost i smanjuje kognitivno opterećenje. Dogovorite se o standardima formatiranja s vašim timom i koristite automatizirane alate za njihovo provođenje. Ključne smjernice za formatiranje uključuju:
- Pravilna uvlaka
- Dosljedno postavljanje zagrada
- Logični prekidi redaka
- Prikladni razmaci
Organizirajte kod logično. Grupirajte povezani kod zajedno i odvojite nepovezani kod. Koristite prazne redove za stvaranje "odlomaka" između logičkih sekcija. Držite povezane funkcije blizu jedna druge. Održavajte datoteke fokusirane na jednu koncepciju ili komponentu. Razbijte velike datoteke na manje, fokusiranije kada je to prikladno.
Slijedite standardne konvencije. Držite se standardnih konvencija za vaš jezik i zajednicu. To čini vaš kod poznatijim i dostupnijim drugim programerima. Na primjer, u Javi:
- Imena klasa koriste PascalCase
- Imena metoda koriste camelCase
- Konstantne vrijednosti koriste ALL_CAPS
5. Upravljajte ovisnostima i izbjegavajte dupliciranje
Dupliciranje može biti korijen svih zala u softveru.
Eliminirajte dupliciranje. Duplicirani kod je propuštena prilika za apstrakciju. Kada primijetite dupliciranje, izdvojite zajednički kod u ponovo upotrebljivu funkciju ili klasu. To poboljšava održivost centraliziranjem logike i smanjuje rizik od nekonzistentnih promjena. Tipovi dupliciranja na koje treba paziti:
- Identični blokovi koda
- Slični algoritmi s malim varijacijama
- Ponovljeni switch/case ili if/else lanci
Pažljivo upravljajte ovisnostima. Smanjite ovisnosti između modula kako biste smanjili povezivanje. Koristite injekciju ovisnosti i inverziju kontrole kako biste učinili kod modularnijim i testabilnijim. Slijedite princip inverzije ovisnosti - oslanjajte se na apstrakcije, a ne na konkretne implementacije. To čini vaš kod fleksibilnijim i lakšim za promjenu.
Koristite princip najmanjeg znanja. Modul ne bi trebao znati o unutarnjim detaljima objekata koje manipulira. To smanjuje povezivanje između modula. Na primjer, koristite Zakon Demetera - metoda bi trebala pozivati metode samo na:
- Svojim vlastitim objektu
- Objektima proslijeđenim kao parametri
- Objektima koje stvara
- Svojim izravnim komponentnim objektima
6. Rukujte greškama s pažnjom
Rukovanje greškama je važno, ali ako zamagli logiku, to je pogrešno.
Koristite iznimke umjesto kodova grešaka. Iznimke su čišće i ne zagušuju glavnu logiku vašeg koda. Omogućuju odvajanje rukovanja greškama od sretne staze. Kada koristite iznimke:
- Stvorite informativne poruke o grešci
- Pružite kontekst s iznimkama
- Definirajte klase iznimki prema potrebama pozivatelja
Ne vraćajte null. Vraćanje null dovodi do iznimki pokazivača na null i zagušuje kod provjerama null. Umjesto toga:
- Vratite prazne kolekcije umjesto null za liste
- Koristite obrazac Null Object
- Koristite Optional u Javi ili Maybe u funkcionalnim jezicima
Prvo napišite try-catch-finally izjave. Započnite s try-catch-finally kada pišete kod koji bi mogao izazvati iznimke. To pomaže definirati opseg i očekivanja za pozivajući kod. Osigurava da se resursi pravilno upravljaju i oslobađaju, čak i u scenarijima grešaka.
7. Pišite temeljite jedinicne testove
Testni kod je jednako važan kao i proizvodni kod.
Slijedite tri zakona TDD-a. Razvoj vođen testovima (TDD) poboljšava kvalitetu i dizajn koda:
- Napišite test koji ne prolazi prije nego što napišete bilo koji proizvodni kod
- Napišite samo onoliko testa koliko je potrebno da pokaže neuspjeh
- Napišite samo onoliko proizvodnog koda koliko je potrebno da prođe test
Održavajte testove čistima i održivima. Primijenite iste standarde kvalitete koda na svoje testove kao i na proizvodni kod. Redovito refaktorirajte i poboljšavajte testni kod. Dobro strukturirani testovi služe kao dokumentacija i omogućuju bezbrižno refaktorisanje proizvodnog koda.
Težite sveobuhvatnom pokrivenosti testovima. Pišite testove koji pokrivaju rubne slučajeve, granične uvjete i scenarije grešaka - ne samo sretne staze. Koristite alate za pokrivenost koda kako biste identificirali praznine u pokrivenosti testovima. Zapamtite da 100% pokrivenost ne jamči kod bez grešaka, ali pruža povjerenje u refaktorisanje i promjene.
8. Kontinuirano refaktorirajte kod
Ostavite kampersko mjesto čišće nego što ste ga našli.
Refaktorirajte oportunistički. Poboljšajte strukturu koda kad god radite na nekom dijelu koda. Slijedite pravilo izviđača: ostavite kod boljim nego što ste ga našli. Male, postupne promjene zbrajaju se tijekom vremena i sprječavaju propadanje koda. Uobičajene tehnike refaktorizacije uključuju:
- Izdvajanje metoda ili klasa
- Preimenovanje radi jasnoće
- P pojednostavljenje složenih uvjeta
- Uklanjanje dupliciranja
Refaktorirajte sigurno s testovima. Uvijek imajte solidan skup testova prije refaktorizacije. Radite male, postupne promjene i često pokrećite testove. To vam daje povjerenje da vaše promjene ne krše postojeću funkcionalnost. Koristite automatizirane alate za refaktorizaciju kada su dostupni kako biste smanjili rizik od uvođenja grešaka.
Balansirajte refaktorizaciju s isporukom vrijednosti. Iako je kontinuirana refaktorizacija važna, nemojte dopustiti da vas paralizira napredak. Težite "dovoljno dobrom" umjesto savršenstvu. Fokusirajte napore refaktorizacije na najproblematičnija ili najčešće mijenjana područja koda. Komunicirajte vrijednost refaktorizacije dionicima kako biste osigurali podršku za kontinuirano poboljšanje koda.
9. Primijenite principe objektno orijentiranog i funkcionalnog programiranja
Objekti skrivaju svoje podatke iza apstrakcija i izlažu funkcije koje djeluju na tim podacima. Strukture podataka izlažu svoje podatke i nemaju značajne funkcije.
Mudro primijenite principe objektno orijentiranog programiranja. Primijenite principe poput enkapsulacije, nasljeđivanja i polimorfizma kako biste stvorili fleksibilne, modularne dizajne. Slijedite SOLID principe:
- Princip jedinstvene odgovornosti
- Princip otvorenosti-zatvorenosti
- Liskovljev princip supstitucije
- Princip segregacije sučelja
- Princip inverzije ovisnosti
Iskoristite koncepte funkcionalnog programiranja. Čak i u objektno orijentiranim jezicima, tehnike funkcionalnog programiranja mogu dovesti do čišćeg koda:
- Čiste funkcije bez nuspojava
- Neizmjenjivi podaci
- Funkcije višeg reda
- Kompozicija funkcija
Odaberite pravi pristup za problem. Objektno orijentirani i funkcionalni paradigmi imaju svoje snage i slabosti. Koristite objektno orijentirani dizajn kada trebate modelirati složena područja s ponašanjem. Koristite funkcionalne pristupe za transformaciju podataka i procesne cijevi. Mnogi moderni jezici podržavaju hibridni pristup, omogućujući vam korištenje najboljeg alata za svaki dio vašeg sustava.
10. Pažljivo razmotrite konkurentnost
Konkurentnost je strategija odvajanja. Pomaže nam odvojiti što se radi od kada se radi.
Razumite izazove konkurentnosti. Konkurentno programiranje uvodi složenost i potencijal za suptilne greške. Uobičajeni problemi uključuju:
- Uvjeti utrke
- Zastoje
- Propuštene signale
- Problemi s vidljivošću memorije
Odvojite brige o konkurentnosti. Držite svoj kod vezan uz konkurentnost odvojenim od drugog koda. To olakšava razmišljanje i testiranje. Koristite apstrakcije poput izvršitelja, budućnosti i glumaca za upravljanje konkurentnošću umjesto rada s sirovim nitima.
Preferirajte neizmjenjivost i čiste funkcije. Neizmjenjivi objekti i čiste funkcije su inherentno sigurni za niti. Eliminiraju mnoge probleme s konkurentnošću izbjegavanjem dijeljenog promjenjivog stanja. Kada je promjenjivo stanje nužno, koristite pravilne tehnike sinkronizacije i razmotrite korištenje atomskih varijabli ili konkurentnih kolekcija.
Zadnje ažurirano:
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.
Recenzije
Čisti kod dobiva većinom pozitivne recenzije zbog svojih principa pisanja čitljivog i održivog koda. Čitatelji cijene praktične savjete o imenovanju, funkcijama i testiranju. Fokus knjige na Javi i neka pretjerano stroga pravila često su predmet kritike. Mnogi je smatraju obaveznim štivom za programere, iako neki smatraju da nije toliko korisna za iskusne programere. Studije slučaja i primjeri refaktoriranja hvale neki, dok drugi kritiziraju kao pretjerane. Općenito, recenzenti se slažu da knjiga nudi vrijedne uvide o kvaliteti koda, čak i ako nisu svi prijedlozi univerzalno primjenjivi.
Similar Books








