Ključne točke
1. Pišite čist in berljiv kodo, ki jo je enostavno vzdrževati
Edina veljavna meritev kakovosti kode: WTF-ji/minuto
Berljivost je ključna. Čista koda mora biti enostavno razumljiva drugim razvijalcem. Mora biti preprosta, elegantna in brez odvečnih elementov. Prizadevajte si pisati kodo, ki jasno izraža svoj namen, brez potrebe po obsežnih komentarjih. Uporabite smiselna imena spremenljivk in funkcij, ohranjajte funkcije majhne in osredotočene ter organizirajte kodo logično.
Vzdržljivost omogoča evolucijo. Koda, ki jo je težko spremeniti, postane breme. Oblikujte svojo kodo tako, da bo fleksibilna in modularna, da se lahko prilagodi spreminjajočim se zahtevam. Sledite načelom, kot sta DRY (Ne ponavljajte se) in SOLID, da ustvarite ohlapno povezane, visoko kohezivne sisteme. Neusmiljeno preoblikujte kodo, da izboljšate njeno strukturo, ne da bi spremenili njeno delovanje.
Čista koda se obrestuje. Čeprav pisanje čiste kode zahteva več začetnega truda, dolgoročno prihrani znatno količino časa in težav. Čista koda je lažja za odpravljanje napak, razširitev in vzdrževanje. Omogoča razvijalcem, da delajo bolj učinkovito in zmanjšuje tveganje za uvajanje napak med spremembami. Naredite čisto kodo za osrednji del svoje razvojne prakse.
2. Sledite smiselni konvenciji poimenovanja
Ime spremenljivke, funkcije ali razreda bi moralo odgovoriti na vsa velika vprašanja. Povedati bi moralo, zakaj obstaja, kaj počne in kako se uporablja.
Uporabite imena, ki razkrivajo namen. Izberite imena, ki jasno izražajo namen in obnašanje spremenljivk, funkcij in razredov. Izogibajte se enotnim črkam ali kraticam, ki niso jasne. Uporabite izgovorljiva imena, ki jih je enostavno iskati. Na primer:
- Slabo: d (pretečen čas v dneh)
- Dobro: elapsedTimeInDays
Bodite dosledni in natančni. Uporabite dosledne konvencije poimenovanja v celotni kodi. Bodite natančni, da se izognete nejasnostim - na primer, uporabite smiselne razlike, kot sta getActiveAccounts() in getActiveAccountInfo(). Izogibajte se kodiranju ali predponam, ki dodajajo šum brez vrednosti. Imena razredov naj bodo samostalniki, imena metod naj bodo glagoli.
Dolžina imena naj ustreza obsegu. Uporabite daljša, bolj opisna imena za spremenljivke in funkcije z večjim obsegom. Krajša imena so sprejemljiva za majhne, lokalne obsege. Dolžina imena naj bo sorazmerna z obsegom njegove uporabe. Optimizirajte za berljivost in razumevanje v kontekstu, kjer se ime uporablja.
3. Ohranite funkcije majhne in osredotočene
Funkcije naj delajo eno stvar. To naj delajo dobro. To naj delajo samo.
Majhno je lepo. Funkcije naj bodo majhne - običajno dolge 5-10 vrstic. Morajo se prilegati na en zaslon in biti takoj razumljive. Izvlecite kodo v dobro poimenovane pomožne funkcije, namesto da bi pisali dolge, kompleksne funkcije. Majhne funkcije so lažje razumljive, testirane in vzdrževane.
Naredite eno stvar dobro. Vsaka funkcija naj ima en sam, jasen namen. Če funkcija počne več stvari, te izvlecite v ločene funkcije. Znaki, da funkcija počne preveč, vključujejo:
- Več ravni abstrakcije
- Več odsekov ali blokov kode
- Številni parametri
Ohranite eno raven abstrakcije. Izjave znotraj funkcije naj bodo vse na isti ravni abstrakcije. Ne mešajte visoko ravnane logike z nizko ravnano podrobnostjo. Izvlecite nizkoravne operacije v ločene funkcije. To izboljša berljivost, saj ohranja funkcije osredotočene in konceptualno preproste.
4. Prakticirajte pravilno oblikovanje in organizacijo
Oblikovanje kode je komunikacija, komunikacija pa je prva naloga profesionalnega razvijalca.
Dosledno oblikovanje je pomembno. Uporabite dosledno zamikanje, prelome vrstic in razmike v celotni kodi. To izboljša berljivost in zmanjšuje kognitivno obremenitev. Dogovorite se o standardih oblikovanja s svojo ekipo in uporabite avtomatizirana orodja za njihovo uveljavitev. Ključne smernice za oblikovanje vključujejo:
- Pravilno zamikanje
- Dosledno postavljanje oklepajev
- Logični prelomi vrstic
- Ustrezni prostori
Organizirajte kodo logično. Skupine sorodne kode skupaj in ločite nesorodno kodo. Uporabite prazne vrstice za ustvarjanje "odstavkov" med logičnimi odseki. Postavite sorodne funkcije blizu skupaj. Ohranite datoteke osredotočene na en sam koncept ali komponento. Velike datoteke razdelite na manjše, bolj osredotočene, kadar je to primerno.
Sledite standardnim konvencijam. Držite se standardnih konvencij za svoj jezik in skupnost. To naredi vašo kodo bolj znano in dostopno drugim razvijalcem. Na primer, v Javi:
- Imena razredov uporabljajo PascalCase
- Imena metod uporabljajo camelCase
- Konstantne vrednosti uporabljajo ALL_CAPS
5. Upravljajte odvisnosti in se izogibajte podvajanju
Podvajanje je lahko koren vsega zla v programski opremi.
Odpravite podvajanje. Podvojena koda je zamujena priložnost za abstrakcijo. Ko opazite podvajanje, izvlecite skupno kodo v ponovno uporabno funkcijo ali razred. To izboljša vzdržljivost s centralizacijo logike in zmanjšanjem tveganja za nekonsistentne spremembe. Vrste podvajanja, na katere morate biti pozorni:
- Identični bloki kode
- Podobni algoritmi z manjšimi variacijami
- Ponovljeni switch/case ali if/else verige
Skrbno upravljajte odvisnosti. Minimalizirajte odvisnosti med moduli, da zmanjšate povezovanje. Uporabite injekcijo odvisnosti in inverzijo nadzora, da bo koda bolj modularna in testabilna. Sledite načelu inverzije odvisnosti - zanašajte se na abstrakcije, ne na konkretne primere. To naredi vašo kodo bolj fleksibilno in lažje spremenljivo.
Uporabite načelo najmanj znanja. Modul ne bi smel poznati notranjosti objektov, s katerimi upravlja. To zmanjšuje povezovanje med moduli. Na primer, uporabite zakon Demetra - metoda naj kliče metode samo na:
- Svojem objektu
- Objektih, posredovanih kot parametri
- Objektih, ki jih ustvari
- Svojih neposrednih komponentah
6. Obvladujte napake na eleganten način
Obvladovanje napak je pomembno, vendar je, če zamegli logiko, napačno.
Uporabite izjeme namesto kod napak. Izjeme so bolj čiste in ne zameglijo glavne logike vaše kode. Omogočajo ločevanje obvladovanja napak od srečne poti. Pri uporabi izjem:
- Ustvarite informativna sporočila o napakah
- Povežite kontekst z izjemami
- Določite razrede izjem na podlagi potreb klicatelja
Ne vračajte null. Vračanje null vodi do napak z null kazalci in zamegljuje kodo z preverjanjem null. Namesto tega:
- Vračajte prazne zbirke namesto null za sezname
- Uporabite vzorec Null Object
- Uporabite Optional v Javi ali Maybe v funkcionalnih jezikih
Najprej napišite izjave try-catch-finally. Začnite z try-catch-finally, ko pišete kodo, ki bi lahko sprožila izjeme. To pomaga opredeliti obseg in pričakovanja za kodo, ki kliče. Zagotavlja, da so viri pravilno upravljani in sproščeni, tudi v primeru napak.
7. Pišite temeljite enotne teste
Testna koda je prav tako pomembna kot produkcijska koda.
Sledite trem zakonom TDD. Razvoj, usmerjen v teste (TDD), izboljša kakovost in oblikovanje kode:
- Napišite neuspešen test, preden napišete katero koli produkcijsko kodo
- Napišite le dovolj testa, da pokažete neuspeh
- Napišite le dovolj produkcijske kode, da opravite test
Ohranite teste čiste in vzdržljive. Uporabite enake standarde kakovosti kode za svoje teste kot za produkcijsko kodo. Redno preoblikujte in izboljšujte testno kodo. Dobro strukturirani testi služijo kot dokumentacija in omogočajo brezskrbno preoblikovanje produkcijske kode.
Ciljajte na celovito pokritost testov. Napišite teste, ki pokrivajo robne primere, mejne pogoje in scenarije napak - ne le srečne poti. Uporabite orodja za pokritost kode, da identificirate vrzeli v pokritosti testov. Ne pozabite, da 100% pokritost ne zagotavlja breznapakne kode, vendar daje zaupanje pri preoblikovanju in spremembah.
8. Nenehno preoblikujte kodo
Pustite kampiranje čistejše, kot ste ga našli.
Preoblikujte priložnostno. Izboljšajte strukturo kode, kadar koli delate na delu kode. Sledite pravilniku skavtov: pustite kodo boljšo, kot ste jo našli. Majhne, postopne izboljšave se sčasoma seštevajo in preprečujejo propad kode. Pogoste tehnike preoblikovanja vključujejo:
- Izvlečenje metod ali razredov
- Preimenovanje za jasnost
- Poenostavitev kompleksnih pogojnih stavkov
- Odstranjevanje podvajanja
Preoblikujte varno s testi. Vedno imejte trdno zbirko testov pred preoblikovanjem. Naredite majhne, postopne spremembe in pogosto izvajajte teste. To vam daje zaupanje, da vaše spremembe ne kršijo obstoječe funkcionalnosti. Uporabite avtomatizirana orodja za preoblikovanje, kadar so na voljo, da zmanjšate tveganje za uvajanje napak.
Uravnotežite preoblikovanje z zagotavljanjem vrednosti. Čeprav je nenehno preoblikovanje pomembno, ne dovolite, da vas paralizira napredek. Ciljajte na "dovolj dobro" namesto na popolnost. Osredotočite napore preoblikovanja na najbolj problematična ali pogosto spreminjana področja kode. Komunicirajte vrednost preoblikovanja deležnikom, da zagotovite podporo za nadaljnje izboljšave kode.
9. Uporabite načela objektno usmerjenega in funkcionalnega programiranja
Objekti skrivajo svoje podatke za abstrakcijami in izpostavljajo funkcije, ki delujejo na teh podatkih. Podatkovne strukture izpostavljajo svoje podatke in nimajo smiselnih funkcij.
Pametno uporabite načela objektno usmerjenega programiranja. Uporabite načela, kot so enkapsulacija, dedovanje in polimorfizem, da ustvarite fleksibilne, modularne zasnove. Sledite načelom SOLID:
- Načelo enotne odgovornosti
- Načelo odprtosti-zaprtosti
- Liskovljev nadomestni princip
- Načelo ločevanja vmesnikov
- Načelo inverzije odvisnosti
Izkoristite koncepte funkcionalnega programiranja. Tudi v objektno usmerjenih jezikih lahko tehnike funkcionalnega programiranja privedejo do čistejše kode:
- Čiste funkcije brez stranskih učinkov
- Nepremični podatki
- Funkcije višjega reda
- Sestavljanje funkcij
Izberite pravi pristop za problem. Objektno usmerjeni in funkcionalni paradigmi imata vsaka svoje prednosti in slabosti. Uporabite objektno usmerjeno zasnovo, ko morate modelirati kompleksne domene z obnašanjem. Uporabite funkcionalne pristope za transformacijo podatkov in obdelovalne cevi. Mnogi sodobni jeziki podpirajo hibridni pristop, kar vam omogoča, da uporabite najboljše orodje za vsak del vašega sistema.
10. Previdno obravnavajte sočasnost
Sočasnost je strategija razklopa. Pomaga nam ločiti, kaj se naredi, od tega, kdaj se to naredi.
Razumite izzive sočasnosti. Sočasno programiranje uvaja kompleksnost in potencial za subtilne napake. Pogosti problemi vključujejo:
- Pogoji dirke
- Zastoji
- Zamujeni signali
- Problemi vidljivosti pomnilnika
Ločite skrbi glede sočasnosti. Ohranite svojo kodo, povezano s sočasnostjo, ločeno od druge kode. To olajša razumevanje in testiranje. Uporabite abstrakcije, kot so izvrševalci, prihodnosti in akterji, za upravljanje sočasnosti namesto dela z surovimi nitmi.
Dajte prednost nepremičnosti in čistim funkcijam. Nepremični objekti in čiste funkcije so inherentno varni za niti. Odpravljajo številne težave s sočasnostjo, saj se izogibajo skupnemu spremenljivemu stanju. Ko je potrebno spremenljivo stanje, uporabite ustrezne tehnike sinhronizacije in razmislite o uporabi atomskih spremenljivk ali sočasnih zbirk.
Zadnja posodobitev:
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.
Ocene
Čist Koda prejema večinoma pozitivne ocene za svoje principe pisanja berljivega in vzdržljivega kode. Bralci cenijo praktične nasvete o poimenovanju, funkcijah in testiranju. Osredotočenost knjige na Javo in nekatere preveč stroge smernice so pogoste kritike. Mnogi menijo, da je to obvezno branje za razvijalce, čeprav nekateri menijo, da je manj uporabna za izkušene programerje. Študije primerov in primeri refaktoringa so pohvaljeni s strani nekaterih, a drugi jih kritizirajo kot pretirane. Na splošno se recenzenti strinjajo, da knjiga ponuja dragocene vpoglede v kakovost kode, čeprav niso vsi predlogi univerzalno uporabni.
Similar Books








