Facebook Pixel
Searching...
Slovenščina
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Clean Code

Clean Code

A Handbook of Agile Software Craftsmanship
avtor: Robert C. Martin 2007 464 strani
4.37
22k+ ocene
Poslušaj
Listen to Summary

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:

  1. Napišite neuspešen test, preden napišete katero koli produkcijsko kodo
  2. Napišite le dovolj testa, da pokažete neuspeh
  3. 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

4.37 od 5
Povprečje 22k+ ocene iz Goodreads in Amazon.

Č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.

Your rating:

O avtorju

Robert Cecil Martin, znan kot Uncle Bob, je priznani inženir programske opreme in svetovalec. Zagovarja metode agilnega razvoja in je predsednik podjetja Object Mentor Inc. Martinovo strokovno znanje zajema objektno usmerjeno oblikovanje, vzorce, UML in ekstremno programiranje. Sodeloval je s strankami po vsem svetu ter delil svoje znanje skozi svetovanje in javna predavanja. Med letoma 1996 in 1999 je bil glavni urednik revije C++ Report. Je pomembna osebnost v skupnosti razvoja programske opreme, pogosto nastopa na mednarodnih konferencah in sejmih. Njegov vpliv sega onkraj svetovalnega dela, saj je avtor številnih knjig in člankov o obrtništvu programske opreme ter najboljših praksah.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Get personalized suggestions
Ratings: Rate books & see your ratings
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 10
📜 Unlimited History
Free users are limited to 10
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Apr 6,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Scanner

Point camera at a book's barcode to scan

Scanning...

Settings
General
Widget
Appearance
Loading...
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →