Facebook Pixel
Searching...
Latviešu
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
by Robert C. Martin 2007 464 pages
4.37
22k+ ratings
Listen
Listen

Key Takeaways

1. Rakstiet tīru kodu, kas ir lasāms un uzturams

Vienīgais derīgais koda kvalitātes mērījums: WTFs/minūtē

Lasāmība ir svarīga. Tīram kodam jābūt viegli saprotamam citiem izstrādātājiem. Tam jābūt vienkāršam, elegantiem un bez liekām detaļām. Tiecaties rakstīt kodu, kas skaidri izsaka savu nodomu, neizmantojot plašus komentārus. Izmantojiet nozīmīgus mainīgo un funkciju nosaukumus, saglabājiet funkcijas mazas un koncentrētas, un organizējiet kodu loģiski.

Uzturējamība ļauj attīstībai. Kods, kuru ir grūti mainīt, kļūst par slogu. Projektējiet savu kodu tā, lai tas būtu elastīgs un modulārs, lai tas varētu pielāgoties mainīgajām prasībām. Ievērojiet principus, piemēram, DRY (Don't Repeat Yourself) un SOLID, lai izveidotu vāji saistītus, ļoti kohēziskus sistēmas. Nežēlojiet sevi refaktorizēšanā, lai uzlabotu koda struktūru, nemainot tā uzvedību.

Tīrs kods atmaksājas. Lai gan tīra koda rakstīšana prasa vairāk sākotnējo pūļu, tas ilgtermiņā ietaupa ievērojamu laiku un galvassāpes. Tīru kodu ir vieglāk labot, paplašināt un uzturēt. Tas ļauj izstrādātājiem strādāt efektīvāk un samazina kļūdu ieviešanas risku izmaiņu laikā. Padariet tīru kodu par galveno jūsu izstrādes prakses daļu.

2. Ievērojiet nozīmīgas nosaukumu konvencijas

Mainīgā, funkcijas vai klases nosaukumam jāatbild uz visiem lielajiem jautājumiem. Tam jāpasaka, kāpēc tas pastāv, ko tas dara un kā to izmanto.

Izmantojiet nodomu atklājošus nosaukumus. Izvēlieties nosaukumus, kas skaidri izsaka mainīgo, funkciju un klašu mērķi un uzvedību. Izvairieties no vienas burta nosaukumiem vai noslēpumainām saīsinājumiem. Izmantojiet izrunājamus nosaukumus, kurus var viegli meklēt. Piemēram:

  • Slikti: d (pārgājušais laiks dienās)
  • Labi: elapsedTimeInDays

Esiet konsekventi un precīzi. Izmantojiet konsekventus nosaukumu standartus visā jūsu kodā. Esiet precīzi, lai izvairītos no neskaidrībām - piemēram, izmantojiet nozīmīgas atšķirības, piemēram, getActiveAccounts() un getActiveAccountInfo(). Izvairieties no kodēšanas vai prefiksiem, kas pievieno troksni bez vērtības. Klases nosaukumiem jābūt lietvārdiem, metožu nosaukumiem - darbības vārdiem.

Nosaukuma garumam jāatbilst apjomam. Izmantojiet garākus, aprakstošākus nosaukumus mainīgajiem un funkcijām ar lielākiem apjomiem. Īsi nosaukumi ir pieņemami maziem, lokāliem apjomiem. Nosaukuma garumam jābūt proporcionālam tā lietošanas apjomam. Optimizējiet lasāmību un izpratni kontekstā, kur nosaukums tiek izmantots.

3. Saglabājiet funkcijas mazas un koncentrētas

Funkcijām jāveic viena lieta. Tām jāveic tas labi. Tām jāveic tas tikai.

Mazs ir skaists. Funkcijām jābūt mazām - parasti 5-10 rindiņas garām. Tām jāiekļaujas vienā ekrānā un jābūt uzreiz saprotamām. Izvelciet kodu uz labi nosauktām palīgfunkcijām, nevis rakstiet garas, sarežģītas funkcijas. Mazas funkcijas ir vieglāk saprast, testēt un uzturēt.

Veiciet vienu lietu labi. Katrai funkcijai jābūt vienam, skaidram mērķim. Ja funkcija veic vairākas lietas, izvelciet tās atsevišķās funkcijās. Zīmes, ka funkcija dara pārāk daudz, ietver:

  • Vairāki abstrakcijas līmeņi
  • Vairāki koda bloki
  • Daudzi parametri

Uzturiet vienu abstrakcijas līmeni. Apgalvojumiem funkcijā jābūt visiem vienā abstrakcijas līmenī. Nesajauciet augsta līmeņa loģiku ar zema līmeņa detaļām. Izvelciet zemāka līmeņa operācijas atsevišķās funkcijās. Tas uzlabo lasāmību, saglabājot funkcijas koncentrētas un konceptuāli vienkāršas.

4. Praktizējiet pareizu formatēšanu un organizāciju

Koda formatēšana ir par komunikāciju, un komunikācija ir profesionālā izstrādātāja pirmais uzdevums.

Konsekventa formatēšana ir svarīga. Izmantojiet konsekventu atkāpi, rindiņu pārtraukumus un atstarpes visā jūsu kodā. Tas uzlabo lasāmību un samazina kognitīvo slodzi. Saskaņojiet formatēšanas standartus ar savu komandu un izmantojiet automatizētus rīkus, lai tos ieviestu. Galvenās formatēšanas vadlīnijas ietver:

  • Pareiza atkāpe
  • Konsekventa iekavu novietošana
  • Loģiski rindiņu pārtraukumi
  • Atbilstošas atstarpes

Organizējiet kodu loģiski. Grupējiet saistīto kodu kopā un atdaliet nesaistīto kodu. Izmantojiet tukšas rindiņas, lai izveidotu "paragrāfu" pārtraukumus starp loģiskajām daļām. Novietojiet saistītās funkcijas tuvāk viena otrai. Saglabājiet failus koncentrētus uz vienu jēdzienu vai komponentu. Sadala lielus failus mazākos, koncentrētākos, kad tas ir piemēroti.

Ievērojiet standarta konvencijas. Ievērojiet standarta konvencijas savai valodai un kopienai. Tas padara jūsu kodu pazīstamāku un pieejamāku citiem izstrādātājiem. Piemēram, Java:

  • Klases nosaukumi izmanto PascalCase
  • Metožu nosaukumi izmanto camelCase
  • Konstantas izmanto ALL_CAPS

5. Pārvaldiet atkarības un izvairieties no dublēšanās

Dublēšanās var būt visu ļaunumu sakne programmēšanā.

Izvairieties no dublēšanās. Dublēts kods ir izmissis iespēja abstrakcijai. Kad redzat dublēšanos, izvelciet kopīgo kodu uz atkārtoti izmantojamu funkciju vai klasi. Tas uzlabo uzturējamību, centralizējot loģiku un samazinot nesakritīgu izmaiņu risku. Dublēšanās veidi, uz kuriem jāpievērš uzmanība:

  • Identiski koda bloki
  • Līdzīgi algoritmi ar nelielām variācijām
  • Atkārtoti switch/case vai if/else ķēdes

Rūpīgi pārvaldiet atkarības. Minimālas atkarības starp moduļiem, lai samazinātu saistību. Izmantojiet atkarību injekciju un kontroles inversiju, lai padarītu kodu modulārāku un testējamu. Ievērojiet Atkarību inversijas principu - paļaujieties uz abstrakcijām, nevis konkrētām lietām. Tas padara jūsu kodu elastīgāku un vieglāk maināmu.

Izmantojiet mazākās zināšanas principu. Modulim nevajadzētu zināt par objektu iekšējo struktūru, ko tas manipulē. Tas samazina saistību starp moduļiem. Piemēram, izmantojiet Demeter likumu - metodei vajadzētu izsaukt metodes tikai uz:

  • Tās paša objekta
  • Objektiem, kas nodoti kā parametri
  • Objektiem, kurus tā izveido
  • Tās tiešajiem komponentu objektiem

6. Rūpīgi apstrādājiet kļūdas

Kļūdu apstrāde ir svarīga, bet, ja tā aizēno loģiku, tā ir nepareiza.

Izmantojiet izņēmumus, nevis kļūdu kodus. Izņēmumi ir tīrāki un nesabojā galveno jūsu koda loģiku. Tie ļauj kļūdu apstrādi atdalīt no laimīgā ceļa. Izmantojot izņēmumus:

  • Izveidojiet informatīvus kļūdu ziņojumus
  • Nodrošiniet kontekstu ar izņēmumiem
  • Definējiet izņēmumu klases, pamatojoties uz izsaucēja vajadzībām

Nekad neatgrieziet null. Null atgriešana noved pie null norādītāja izņēmumiem un sabojā kodu ar null pārbaudēm. Tā vietā:

  • Atgrieziet tukšas kolekcijas, nevis null sarakstiem
  • Izmantojiet Null Object modeli
  • Izmantojiet Optional Java vai Maybe funkcionālajās valodās

Rakstiet try-catch-finally izteiksmes vispirms. Sāciet ar try-catch-finally, rakstot kodu, kas var izraisīt izņēmumus. Tas palīdz definēt apjomu un gaidas izsaucējam. Tas nodrošina, ka resursi tiek pareizi pārvaldīti un atbrīvoti, pat kļūdu gadījumos.

7. Rakstiet rūpīgas vienību pārbaudes

Testa kods ir tikpat svarīgs kā ražošanas kods.

Ievērojiet trīs TDD likumus. Testa vadīta izstrāde (TDD) uzlabo koda kvalitāti un dizainu:

  1. Rakstiet neveiksmīgu testu pirms jebkura ražošanas koda rakstīšanas
  2. Rakstiet tikai tik daudz no testa, lai parādītu neveiksmi
  3. Rakstiet tikai tik daudz ražošanas koda, lai izietu testu

Saglabājiet testus tīrus un uzturamus. Izmantojiet tos pašus koda kvalitātes standartus saviem testiem kā ražošanas kodam. Regulāri refaktorizējiet un uzlabojiet testu kodu. Labi strukturēti testi kalpo kā dokumentācija un ļauj bezbailīgi refaktorizēt ražošanas kodu.

Mērķējiet uz visaptverošu testu pārklājumu. Rakstiet testus, kas aptver robežsituācijas, robežnosacījumus un kļūdu scenārijus - ne tikai laimīgo ceļu. Izmantojiet koda pārklājuma rīkus, lai identificētu testu pārklājuma trūkumus. Atcerieties, ka 100% pārklājums negarantē bezkļūdu kodu, bet tas sniedz pārliecību refaktorizēšanā un izmaiņās.

8. Nepārtraukti refaktorizējiet kodu

Atstājiet kempingu tīrāku, nekā atradāt.

Refaktorizējiet izdevīgi. Uzlabojiet koda struktūru, kad vien strādājat ar kādu kodu. Ievērojiet Zēnu skautu likumu: atstājiet kodu labāku, nekā atradāt. Mazas, pakāpeniskas uzlabojumi laika gaitā sakrājas un novērš koda puvi. Bieži izmantotās refaktorizēšanas tehnikas ietver:

  • Metožu vai klašu izvilkšana
  • Nosaukumu skaidrošana
  • Sarežģītu nosacījumu vienkāršošana
  • Dublēšanās noņemšana

Refaktorizējiet droši ar testiem. Vienmēr ir jābūt stabilai testu komplektam pirms refaktorizēšanas. Veiciet mazas, pakāpeniskas izmaiņas un bieži palaidiet testus. Tas sniedz jums pārliecību, ka jūsu izmaiņas nesalauž esošo funkcionalitāti. Izmantojiet automatizētus refaktorizēšanas rīkus, kad tie ir pieejami, lai samazinātu kļūdu ieviešanas risku.

Sabalansējiet refaktorizēšanu ar vērtības piegādi. Lai gan nepārtraukta refaktorizēšana ir svarīga, neļaujiet tai paralizēt progresu. Mērķējiet uz "pietiekami labu", nevis perfekciju. Koncentrējiet refaktorizēšanas pūles uz visproblemātiskākajām vai bieži mainītajām koda daļām. Komunicējiet refaktorizēšanas vērtību ieinteresētajām pusēm, lai nodrošinātu atbalstu turpmākai koda uzlabošanai.

9. Izmantojiet objektorientētas un funkcionālas programmēšanas principus

Objekti slēpj savus datus aiz abstrakcijām un izsaka funkcijas, kas darbojas ar šiem datiem. Datu struktūras izsaka savus datus un tām nav nozīmīgu funkciju.

Izmantojiet objektorientētas principus saprātīgi. Izmantojiet principus, piemēram, kapsulēšanu, mantošanu un polimorfismu, lai izveidotu elastīgus, modulārus dizainus. Ievērojiet SOLID principus:

  • Vienas atbildības princips
  • Atvērta-slēgta princips
  • Liskov aizvietošanas princips
  • Interfeisa segregācijas princips
  • Atkarību inversijas princips

Izmantojiet funkcionālās programmēšanas koncepcijas. Pat objektorientētās valodās funkcionālās programmēšanas tehnikas var novest pie tīrāka koda:

  • Tīras funkcijas bez blakus efektiem
  • Nemainīgi dati
  • Augstākā līmeņa funkcijas
  • Funkciju kompozīcija

Izvēlieties pareizo pieeju problēmai. Objektorientētās un funkcionālās paradigmas katrai ir savas stiprās un vājās puses. Izmantojiet objektorientētu dizainu, kad jums ir nepieciešams modelēt sarežģītas jomas ar uzvedību. Izmantojiet funkcionālas pieejas datu transformācijai un apstrādes caurulēm. Daudzas modernas valodas atbalsta hibrīda pieeju, ļaujot izmantot labāko rīku katrai jūsu sistēmas daļai.

10. Rūpīgi apsveriet konkurenci

Konkurence ir atdalīšanas stratēģija. Tā palīdz mums atdalīt to, kas tiek darīts, no tā, kad tas tiek darīts.

Izprotiet konkurences izaicinājumus. Konkurējoša programmēšana ievieš sarežģītību un potenciālu smalkām kļūdām. Bieži sastopamie jautājumi ietver:

  • Sacensību apstākļi
  • Mirušās saites
  • Nepalaistas signālus
  • Atmiņas redzamības problēmas

Atdaliet konkurences jautājumus. Saglabājiet savu konkurences saistīto kodu atsevišķi no cita koda. Tas padara to vieglāk saprotamu un testējamu. Izmantojiet abstrakcijas, piemēram, Executors, Futures un Actors, lai pārvaldītu konkurenci, nevis strādājiet ar neapstrādātiem pavedieniem.

Dodiet priekšroku nemainīgumam un tīrām funkcijām. Nemainīgi objekti un tīras funkcijas ir inherentīgi drošas pavedieniem. Tie novērš daudzas konkurences problēmas, izvairoties no kopīgas mainīgas stāvokļa. Kad mainīgais stāvoklis ir nepieciešams, izmantojiet pareizas sinhronizācijas tehnikas un apsveriet atomiskos mainīgos vai konkurences kolekcijas.

Last updated:

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.

Review Summary

4.37 out of 5
Average of 22k+ ratings from Goodreads and Amazon.

Tīrs kods saņem galvenokārt pozitīvas atsauksmes par saviem principiem, kas attiecas uz lasāma, uzturama koda rakstīšanu. Lasītāji novērtē praktiskos padomus par nosaukumiem, funkcijām un testēšanu. Grāmatas fokuss uz Java un daži pārāk stingri norādījumi ir bieži kritizēti. Daudzi uzskata to par būtisku lasāmvielu izstrādātājiem, lai gan daži to uzskata par mazāk noderīgu pieredzējušiem programmētājiem. Gadījumu pētījumi un refaktoringa piemēri tiek slavēti dažu, bet kritizēti citu kā pārlieku izsvērti. Kopumā recenzenti piekrīt, ka grāmata piedāvā vērtīgas atziņas par koda kvalitāti, pat ja ne visi ieteikumi ir vispārēji piemērojami.

Your rating:

About the Author

Roberts Sesils Mārtiņš, pazīstams kā Onkulis Bobs, ir atzīts programmatūras inženieris un konsultants. Viņš iestājas par Agile izstrādes metodēm un ir uzņēmuma Object Mentor Inc. prezidents. Mārtiņa ekspertīze aptver objektorientēto dizainu, paraugus, UML un eXtreme programmēšanu. Viņš ir strādājis ar klientiem visā pasaulē, daloties ar savām zināšanām konsultāciju un lekciju laikā. Mārtiņš no 1996. līdz 1999. gadam bija C++ Report galvenais redaktors. Viņš ir izcila personība programmatūras izstrādes kopienā, bieži uzstājoties starptautiskās konferencēs un izstādēs. Viņa ietekme pārsniedz konsultāciju darbu, pateicoties viņa grāmatām un rakstiem par programmatūras meistarību un labākajām praksēm.

Other books by Robert C. Martin

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
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 Feb 28,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
50,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.
Settings
Appearance
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →