Facebook Pixel
Searching...
Svenska
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
av Robert C. Martin 2007 464 sidor
4.37
22k+ betyg
Lyssna
Listen to Summary

Viktiga slutsatser

1. Skriv ren kod som är läsbar och underhållbar

Den enda giltiga mätningen av kodkvalitet: WTFs/minut

Läsbarhet är avgörande. Ren kod ska vara lätt att förstå för andra utvecklare. Den ska vara enkel, elegant och fri från onödig komplexitet. Sträva efter att skriva kod som tydligt uttrycker sin avsikt utan behov av omfattande kommentarer. Använd meningsfulla variabel- och funktionsnamn, håll funktioner små och fokuserade, och organisera koden logiskt.

Underhållbarhet möjliggör evolution. Kod som är svår att ändra blir en belastning. Designa din kod för att vara flexibel och modulär så att den kan anpassas till förändrade krav. Följ principer som DRY (Don't Repeat Yourself) och SOLID för att skapa löst kopplade, högkohesiva system. Refaktorisera obarmhärtigt för att förbättra kodstrukturen utan att ändra beteendet.

Ren kod lönar sig. Även om det tar mer tid att skriva ren kod i början, sparar det betydande tid och huvudvärk på lång sikt. Ren kod är lättare att felsöka, utöka och underhålla. Den gör det möjligt för utvecklare att arbeta mer effektivt och minskar risken för att introducera buggar vid förändringar. Gör ren kod till en kärnkomponent i din utvecklingspraxis.

2. Följ meningsfulla namngivningskonventioner

Namnet på en variabel, funktion eller klass bör besvara alla stora frågor. Det ska berätta varför det finns, vad det gör och hur det används.

Använd avsiktsavslöjande namn. Välj namn som tydligt förmedlar syftet och beteendet hos variabler, funktioner och klasser. Undvik enstaka bokstavsnamn eller kryptiska förkortningar. Använd uttalbara namn som enkelt kan sökas. Till exempel:

  • Dåligt: d (förfluten tid i dagar)
  • Bra: elapsedTimeInDays

Var konsekvent och precis. Använd konsekventa namngivningskonventioner genom hela din kodbas. Var precis för att undvika tvetydighet - till exempel, använd meningsfulla distinktioner som getActiveAccounts() och getActiveAccountInfo(). Undvik kodningar eller prefix som tillför brus utan värde. Klassnamn ska vara substantiv, metodnamn ska vara verb.

Namnets längd bör matcha omfattningen. Använd längre, mer beskrivande namn för variabler och funktioner med större omfattningar. Korta namn är acceptabla för små, lokala omfattningar. Längden på ett namn bör vara proportionell mot dess användningsområde. Optimera för läsbarhet och förståelse inom den kontext där namnet används.

3. Håll funktioner små och fokuserade

Funktioner ska göra en sak. De ska göra det bra. De ska göra det endast.

Små är vackert. Funktioner ska vara små - typiskt 5-10 rader långa. De ska få plats på en skärm och vara omedelbart begripliga. Extrahera kod till väl namngivna hjälpfunktioner istället för att skriva långa, komplexa funktioner. Små funktioner är lättare att förstå, testa och underhålla.

Gör en sak bra. Varje funktion ska ha ett enda, klart syfte. Om en funktion gör flera saker, extrahera dessa till separata funktioner. Tecken på att en funktion gör för mycket inkluderar:

  • Flera abstraktionsnivåer
  • Flera sektioner eller kodblock
  • Många parametrar

Upprätthåll en nivå av abstraktion. Uttalandena inom en funktion ska alla vara på samma abstraktionsnivå. Blanda inte hög nivå logik med lågnivådetaljer. Extrahera lägre nivåoperationer till separata funktioner. Detta förbättrar läsbarheten genom att hålla funktioner fokuserade och konceptuellt enkla.

4. Praktisera korrekt formatering och organisering

Kodformatering handlar om kommunikation, och kommunikation är den professionella utvecklarens första prioritet.

Konsekvent formatering spelar roll. Använd konsekvent indragning, radbrytningar och mellanrum genom hela din kod. Detta förbättrar läsbarheten och minskar den kognitiva belastningen. Kom överens om formateringsstandarder med ditt team och använd automatiserade verktyg för att upprätthålla dem. Viktiga formateringsriktlinjer inkluderar:

  • Korrekt indragning
  • Konsekvent placering av klamrar
  • Logiska radbrytningar
  • Lämpligt vitt utrymme

Organisera koden logiskt. Gruppera relaterad kod tillsammans och separera orelaterad kod. Använd tomma rader för att skapa "stycke" pauser mellan logiska sektioner. Placera relaterade funktioner nära varandra. Håll filer fokuserade på ett enda koncept eller komponent. Dela stora filer i mindre, mer fokuserade när det är lämpligt.

Följ standardkonventioner. Håll dig till standardkonventioner för ditt språk och din gemenskap. Detta gör din kod mer bekant och tillgänglig för andra utvecklare. Till exempel, i Java:

  • Klassnamn använder PascalCase
  • Metodnamn använder camelCase
  • Konstanter använder ALL_CAPS

5. Hantera beroenden och undvik duplicering

Duplicering kan vara roten till allt ont inom mjukvara.

Eliminera duplicering. Duplicerad kod är en missad möjlighet för abstraktion. När du ser duplicering, extrahera den gemensamma koden till en återanvändbar funktion eller klass. Detta förbättrar underhållbarheten genom att centralisera logik och minska risken för inkonsekventa förändringar. Typer av duplicering att se upp för:

  • Identiska kodblock
  • Liknande algoritmer med små variationer
  • Upprepade switch/case eller if/else kedjor

Hantera beroenden noggrant. Minimera beroenden mellan moduler för att minska kopplingen. Använd beroendeinjektion och kontrollinversion för att göra koden mer modulär och testbar. Följ principen om beroendeinversion - bero på abstraktioner, inte konkretioner. Detta gör din kod mer flexibel och lättare att ändra.

Använd principen om minsta kunskap. En modul bör inte veta om detaljerna i de objekt den manipulerar. Detta minskar kopplingen mellan moduler. Till exempel, använd Demeter-lagen - en metod bör endast anropa metoder på:

  • Ditt eget objekt
  • Objekt som skickas som parametrar
  • Objekt som den skapar
  • Dess direkta komponentobjekt

6. Hantera fel på ett smidigt sätt

Felhantering är viktig, men om den döljer logik, är den felaktig.

Använd undantag istället för felkoder. Undantag är renare och rör inte till den huvudsakliga logiken i din kod. De tillåter felhantering att separeras från den lyckliga vägen. När du använder undantag:

  • Skapa informativa felmeddelanden
  • Ge kontext med undantag
  • Definiera undantagsklasser baserat på anroparens behov

Returnera inte null. Att returnera null leder till nullpekare undantag och rör till koden med null-kontroller. Istället:

  • Returnera tomma samlingar istället för null för listor
  • Använd Null Object-mönstret
  • Använd Optional i Java eller Maybe i funktionella språk

Skriv try-catch-finally satser först. Börja med try-catch-finally när du skriver kod som kan kasta undantag. Detta hjälper till att definiera omfattningen och förväntningarna för den anropande koden. Det säkerställer att resurser hanteras och frigörs korrekt, även i fel-scenarier.

7. Skriv grundliga enhetstester

Testkod är lika viktig som produktionskod.

Följ de tre lagarna för TDD. Testdriven utveckling (TDD) förbättrar kodkvalitet och design:

  1. Skriv ett misslyckat test innan du skriver någon produktionskod
  2. Skriv bara tillräckligt av ett test för att visa ett misslyckande
  3. Skriv bara tillräckligt med produktionskod för att klara testet

Håll tester rena och underhållbara. Tillämpa samma standarder för kodkvalitet på dina tester som på din produktionskod. Refaktorisera och förbättra testkod regelbundet. Välstrukturerade tester fungerar som dokumentation och möjliggör orädd refaktorisering av produktionskod.

Sträva efter omfattande testtäckning. Skriv tester som täcker kantfall, gränsvillkor och fel-scenarier - inte bara den lyckliga vägen. Använd kodtäckningsverktyg för att identifiera luckor i testtäckningen. Kom ihåg att 100 % täckning inte garanterar felfri kod, men det ger förtroende för refaktorisering och förändringar.

8. Refaktorisera koden kontinuerligt

Lämna campingplatsen renare än du fann den.

Refaktorisera opportunistiskt. Förbättra kodstrukturen närhelst du arbetar med en del av koden. Följ Boy Scout-regeln: lämna koden bättre än du fann den. Små, inkrementella förbättringar lägger upp över tid och förhindrar kodförfall. Vanliga refaktoriseringstekniker inkluderar:

  • Extrahera metoder eller klasser
  • Byta namn för tydlighet
  • Förenkla komplexa villkor
  • Ta bort duplicering

Refaktorisera säkert med tester. Ha alltid en solid uppsättning tester innan du refaktorerar. Gör små, inkrementella förändringar och kör tester ofta. Detta ger dig förtroende för att dina förändringar inte bryter befintlig funktionalitet. Använd automatiserade refaktoriseringverktyg när de finns tillgängliga för att minska risken för att introducera fel.

Balans mellan refaktorisering och att leverera värde. Även om kontinuerlig refaktorisering är viktig, låt det inte förlama framsteg. Sikta på "tillräckligt bra" snarare än perfektion. Fokusera refaktorisering på de mest problematiska eller ofta ändrade områdena av koden. Kommunicera värdet av refaktorisering till intressenter för att säkerställa stöd för pågående kodförbättringar.

9. Tillämpa objektorienterade och funktionella programmeringsprinciper

Objekt döljer sin data bakom abstraktioner och exponerar funktioner som arbetar på den datan. Datastrukturer exponerar sin data och har inga meningsfulla funktioner.

Använd objektorienterade principer klokt. Tillämpa principer som inkapsling, arv och polymorfism för att skapa flexibla, modulära designer. Följ SOLID-principerna:

  • Enskild ansvarighetsprincip
  • Öppen-stängd princip
  • Liskovs substitutionsprincip
  • Gränssnittssplittringsprincip
  • Beroendeinversionsprincip

Utnyttja funktionella programmeringskoncept. Även i objektorienterade språk kan funktionella programmeringstekniker leda till renare kod:

  • Renodlade funktioner utan sidoeffekter
  • Oföränderliga data
  • Högre ordningens funktioner
  • Funktionskomposition

Välj rätt tillvägagångssätt för problemet. Objektorienterade och funktionella paradigmer har var och en sina styrkor och svagheter. Använd objektorienterad design när du behöver modellera komplexa domäner med beteende. Använd funktionella tillvägagångssätt för datatransformation och bearbetningspipelines. Många moderna språk stöder en hybridansats, vilket gör att du kan använda det bästa verktyget för varje del av ditt system.

10. Tänk noga på samtidighet

Samtidighet är en avkopplingsstrategi. Den hjälper oss att separera vad som görs från när det görs.

Förstå samtidighetsutmaningar. Samtidig programmering introducerar komplexitet och potentiella subtila buggar. Vanliga problem inkluderar:

  • Tävlingstillstånd
  • Dödslås
  • Missade signaler
  • Problem med minnesvisibilitet

Separera samtidighetsrelaterade bekymmer. Håll din samtidighetsrelaterade kod separat från annan kod. Detta gör det lättare att resonera kring och testa. Använd abstraktioner som Executors, Futures och Actors för att hantera samtidighet istället för att arbeta med råa trådar.

Föredra oföränderliga objekt och rena funktioner. Oföränderliga objekt och rena funktioner är i grunden trådsäkra. De eliminerar många samtidighetsproblem genom att undvika delad, förändringsbar status. När förändringsbar status är nödvändig, använd lämpliga synkroniseringstekniker och överväg att använda atomära variabler eller samtidiga samlingar.

Senast uppdaterad:

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.

Recensioner

4.37 av 5
Genomsnitt av 22k+ betyg från Goodreads och Amazon.

Clean Code får mestadels positiva omdömen för sina principer kring att skriva läsbar och underhållbar kod. Läsarna uppskattar de praktiska råden om namngivning, funktioner och testning. Bokens fokus på Java och vissa alltför strikta riktlinjer är vanliga kritikpunkter. Många anser att den är en nödvändig läsning för utvecklare, även om vissa tycker att den är mindre användbar för erfarna programmerare. Fallstudierna och exemplen på omstrukturering hyllas av vissa men kritiseras av andra som överdrivna. Sammanfattningsvis är recensenterna överens om att boken erbjuder värdefulla insikter om kodkvalitet, även om inte alla förslag är universellt tillämpliga.

Your rating:

Om författaren

Robert Cecil Martin, känd som Uncle Bob, är en välrenommerad mjukvaruingenjör och konsult. Han förespråkar för Agila utvecklingsmetoder och är president för Object Mentor Inc. Martins expertis omfattar objektorienterad design, mönster, UML och eXtreme Programming. Han har arbetat med kunder världen över och delat med sig av sin kunskap genom konsultverksamhet och föreläsningar. Martin var chefredaktör för C++ Report från 1996 till 1999. Han är en framstående personlighet inom mjukvaruutvecklingsgemenskapen och presenterar ofta på internationella konferenser och mässor. Hans inflytande sträcker sig bortom hans konsultarbete genom hans böcker och artiklar om mjukvaruhantverk och bästa praxis.

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 8,
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
Find a barcode to scan

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