Facebook Pixel
Searching...
Српски
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
od Robert C. Martin 2007 464 stranica
4.37
22k+ ocena
Slušaj
Listen to Summary

Ključna zaključka

1. Pišite čist kod koji je čitljiv i održiv

Jedina validna mera kvaliteta koda: WTFs/minut

Čitljivost je od suštinskog značaja. Čist kod treba da bude lako razumljiv drugim programerima. Treba da bude jednostavan, elegantan i bez suvišnih elemenata. Težite da pišete kod koji jasno izražava svoju nameru bez potrebe za opširnim komentarima. Koristite smislene nazive promenljivih i funkcija, održavajte funkcije malim i fokusiranim, i organizujte kod logično.

Održavanje omogućava evoluciju. Kod koji je teško menjati postaje teret. Dizajnirajte svoj kod da bude fleksibilan i modularan kako bi se mogao prilagoditi promenljivim zahtevima. Pratite principe kao što su DRY (Ne ponavljajte se) i SOLID kako biste stvorili slabo povezane, visoko kohezivne sisteme. Ne štedeći, refaktorišite kako biste poboljšali strukturu koda bez promene ponašanja.

Čist kod se isplati. Iako pisanje čistog koda zahteva više truda na početku, dugoročno štedi značajno vreme i glavobolje. Čist kod je lakši za otklanjanje grešaka, proširenje i održavanje. Omogućava programerima da rade efikasnije i smanjuje rizik od uvođenja grešaka tokom promena. Uključite čist kod kao osnovni deo svoje razvojne prakse.

2. Pratite smislene konvencije imenovanja

Ime promenljive, funkcije ili klase treba da odgovori na sva velika pitanja. Treba da vam kaže zašto postoji, šta radi i kako se koristi.

Koristite imena koja otkrivaju nameru. Birajte imena koja jasno prenose svrhu i ponašanje promenljivih, funkcija i klasa. Izbegavajte imena sa jednim slovom ili nejasne skraćenice. Koristite izgovorljiva imena koja se lako pretražuju. Na primer:

  • Loše: d (prošlo vreme u danima)
  • Dobro: elapsedTimeInDays

Budite dosledni i precizni. Koristite dosledne konvencije imenovanja kroz ceo vaš kod. Budite precizni kako biste izbegli dvosmislenost - na primer, koristite smislene razlike kao što su getActiveAccounts() i getActiveAccountInfo(). Izbegavajte kodiranja ili prefikse koji dodaju šum bez vrednosti. Imena klasa treba da budu imenice, a imena metoda glagoli.

Dužina imena treba da odgovara opsegu. Koristite duža, opisnija imena za promenljive i funkcije sa većim opsegom. Kratka imena su prihvatljiva za male, lokalne opsege. Dužina imena treba da bude proporcionalna njegovom opsegu korišćenja. Optimizujte za čitljivost i razumevanje u kontekstu u kojem se ime koristi.

3. Održavajte funkcije malim i fokusiranim

Funkcije treba da rade jednu stvar. Treba da je rade dobro. Treba da rade samo to.

Malo je lepo. Funkcije treba da budu male - obično 5-10 redova. Treba da stanu na jedan ekran i budu odmah razumljive. Izvucite kod u dobro imenovane pomoćne funkcije umesto da pišete duge, složene funkcije. Male funkcije su lakše za razumevanje, testiranje i održavanje.

Radite jednu stvar dobro. Svaka funkcija treba da ima jednu, jasnu svrhu. Ako funkcija radi više stvari, izdvojite ih u odvojene funkcije. Znakovi da funkcija radi previše uključuju:

  • Višestruke nivoe apstrakcije
  • Više sekcija ili blokova koda
  • Brojne parametre

Održavajte jedan nivo apstrakcije. Izjave unutar funkcije treba da budu na istom nivou apstrakcije. Ne mešajte visoko nivo logike sa nisko nivo detaljima. Izdvojite operacije nižeg nivoa u odvojene funkcije. Ovo poboljšava čitljivost držeći funkcije fokusiranim i konceptualno jednostavnim.

4. Vežbajte pravilno formatiranje i organizaciju

Formatiranje koda je o komunikaciji, a komunikacija je prvi red poslovanja profesionalnog programera.

Dosledno formatiranje je važno. Koristite doslednu uvlaku, prelome redova i razmake kroz ceo vaš kod. Ovo poboljšava čitljivost i smanjuje kognitivno opterećenje. Dogovorite se o standardima formatiranja sa svojim timom i koristite automatizovane alate za njihovo sprovođenje. Ključne smernice za formatiranje uključuju:

  • Pravilna uvlaka
  • Dosledno postavljanje zagrada
  • Logični prelomi redova
  • Prikladan razmak

Organizujte kod logično. Grupisite povezani kod zajedno i odvojite nepovezani kod. Koristite prazne redove da stvorite "paragraf" prekide između logičkih sekcija. Postavite povezane funkcije blizu jedna druge. Održavajte datoteke fokusiranim na jednu jedinu koncepciju ili komponentu. Razbijte velike datoteke na manje, fokusiranije kada je to prikladno.

Pratite standardne konvencije. Pridržavajte se standardnih konvencija za vaš jezik i zajednicu. Ovo čini vaš kod poznatijim i dostupnijim drugim programerima. Na primer, u Javi:

  • Imena klasa koriste PascalCase
  • Imena metoda koriste camelCase
  • Konstantne vrednosti koriste ALL_CAPS

5. Upravljajte zavisnostima i izbegavajte dupliciranje

Dupliciranje može biti koren svega zla u softveru.

Eliminišite dupliciranje. Duplicirani kod je propuštena prilika za apstrakciju. Kada primetite dupliciranje, izdvojite zajednički kod u ponovo upotrebljivu funkciju ili klasu. Ovo poboljšava održivost centralizovanjem logike i smanjuje rizik od nekonzistentnih promena. Tipovi dupliciranja na koje treba obratiti pažnju:

  • Identični blokovi koda
  • Slični algoritmi sa malim varijacijama
  • Ponovljeni switch/case ili if/else lanci

Pažljivo upravljajte zavisnostima. Smanjite zavisnosti između modula kako biste smanjili povezivanje. Koristite injekciju zavisnosti i inverziju kontrole kako biste učinili kod modularnijim i testabilnijim. Pratite Princip inverzije zavisnosti - oslanjajte se na apstrakcije, a ne na konkretne implementacije. Ovo čini vaš kod fleksibilnijim i lakšim za promene.

Koristite princip najmanjeg znanja. Modul ne bi trebao da zna o unutrašnjosti objekata koje manipuliše. Ovo smanjuje povezivanje između modula. Na primer, koristite Zakon Demetre - metoda bi trebala da poziva metode samo na:

  • Svojim sopstvenim objektima
  • Objekatima prosleđenim kao parametri
  • Objekatima koje kreira
  • Svojim direktnim komponentama

6. Rukujte greškama na dostojanstven način

Rukovanje greškama je važno, ali ako zamagli logiku, to je pogrešno.

Koristite izuzetke umesto kodova grešaka. Izuzeci su čistiji i ne zagušuju glavnu logiku vašeg koda. Omogućavaju da se rukovanje greškama odvoji od srećnog puta. Kada koristite izuzetke:

  • Kreirajte informativne poruke o grešci
  • Pružite kontekst uz izuzetke
  • Definišite klase izuzetaka na osnovu potreba pozivaoca

Ne vraćajte null. Vraćanje null dovodi do izuzetaka null pointer i zagušuje kod sa proverama null. Umesto toga:

  • Vratite prazne kolekcije umesto null za liste
  • Koristite obrazac Null Object
  • Koristite Optional u Javi ili Maybe u funkcionalnim jezicima

Pišite try-catch-finally izjave prvo. Počnite sa try-catch-finally kada pišete kod koji bi mogao da baci izuzetke. Ovo pomaže da se definiše opseg i očekivanja za pozivajući kod. Osigurava da se resursi pravilno upravljaju i oslobađaju, čak i u scenarijima greške.

7. Pišite temeljne jedinicne testove

Test kod je jednako važan kao i produkcioni kod.

Pratite tri zakona TDD-a. Razvoj vođen testovima (TDD) poboljšava kvalitet i dizajn koda:

  1. Napišite test koji ne prolazi pre nego što napišete bilo koji produkcioni kod
  2. Napišite samo onoliko testa koliko je potrebno da pokaže neuspeh
  3. Napišite samo onoliko produkcionog koda koliko je potrebno da prođe test

Održavajte testove čistim i održivim. Primijenite iste standarde kvaliteta koda na svoje testove kao i na svoj produkcioni kod. Redovno refaktorišite i poboljšavajte test kod. Dobro strukturirani testovi služe kao dokumentacija i omogućavaju bezbrižno refaktorisanje produkcionog koda.

Težite sveobuhvatnom pokrivanju testova. Pišite testove koji pokrivaju ivice, granične uslove i scenarije grešaka - ne samo srećni put. Koristite alate za pokrivenost koda kako biste identifikovali praznine u pokrivenosti testovima. Zapamtite da 100% pokrivenost ne garantuje kod bez grešaka, ali pruža poverenje u refaktorisanje i promene.

8. Kontinuirano refaktorišite kod

Ostavite kamp prikolicu čistijom nego što ste je našli.

Refaktorišite oportunistički. Poboljšavajte strukturu koda kad god radite na nekom delu koda. Pratite pravilo izviđača: ostavite kod boljim nego što ste ga našli. Male, inkrementalne promene se vremenom sabiraju i sprečavaju propadanje koda. Uobičajene tehnike refaktorisanja uključuju:

  • Izdvajanje metoda ili klasa
  • Preimenovanje radi jasnoće
  • P pojednostavljivanje složenih uslova
  • Uklanjanje dupliciranja

Refaktorišite sigurno uz testove. Uvek imajte solidan skup testova pre refaktorisanja. Pravite male, inkrementalne promene i često pokrećite testove. Ovo vam daje poverenje da vaše promene ne krše postojeću funkcionalnost. Koristite automatizovane alate za refaktorisanje kada su dostupni kako biste smanjili rizik od uvođenja grešaka.

Balansirajte refaktorisanje sa isporukom vrednosti. Iako je kontinuirano refaktorisanje važno, ne dozvolite da vas paralizuje napredak. Težite "dovoljno dobrom" umesto savršenstvu. Fokusirajte napore na refaktorisanje na najproblematičnije ili najčešće menjane delove koda. Komunicirajte vrednost refaktorisanja zainteresovanim stranama kako biste osigurali podršku za kontinuirano poboljšanje koda.

9. Primijenite principe objektno-orijentisanog i funkcionalnog programiranja

Objekti skrivaju svoje podatke iza apstrakcija i izlažu funkcije koje deluju na tim podacima. Strukture podataka izlažu svoje podatke i nemaju značajne funkcije.

Pametno koristite principe objektno-orijentisanog programiranja. Primijenite principe kao što su enkapsulacija, nasleđivanje i polimorfizam kako biste stvorili fleksibilne, modularne dizajne. Pratite SOLID principe:

  • Princip jedinstvene odgovornosti
  • Princip otvorenosti-zatvorenosti
  • Liskovljev princip supstitucije
  • Princip segregacije interfejsa
  • Princip inverzije zavisnosti

Iskoristite koncepte funkcionalnog programiranja. Čak i u objektno-orijentisanim jezicima, tehnike funkcionalnog programiranja mogu dovesti do čistijeg koda:

  • Čiste funkcije bez sporednih efekata
  • Nepromenljivi podaci
  • Funkcije višeg reda
  • Kompozicija funkcija

Izaberite pravi pristup za problem. Objektno-orijentisani i funkcionalni paradigmi imaju svoje snage i slabosti. Koristite objektno-orijentisani dizajn kada treba da modelujete složene domene sa ponašanjem. Koristite funkcionalne pristupe za transformaciju podataka i procesne cevi. Mnogi moderni jezici podržavaju hibridni pristup, omogućavajući vam da koristite najbolji alat za svaki deo vašeg sistema.

10. Pažljivo razmotrite konkurenciju

Konkurencija je strategija dekoplinga. Pomaže nam da odvojimo šta se radi od kada se radi.

Razumite izazove konkurencije. Konkurentno programiranje uvodi složenost i potencijal za suptilne greške. Uobičajeni problemi uključuju:

  • Uslovi trke
  • Zastoje
  • Propuštene signale
  • Problemi sa vidljivošću memorije

Odvojite brige o konkurenciji. Držite svoj kod vezan za konkurenciju odvojenim od drugog koda. Ovo olakšava razumevanje i testiranje. Koristite apstrakcije kao što su Executor, Future i Actor za upravljanje konkurencijom umesto da radite sa sirovim nitima.

Preferirajte nepromenljivost i čiste funkcije. Nepromenljivi objekti i čiste funkcije su inherentno bezbedni za niti. Oni eliminišu mnoge probleme konkurencije izbegavajući deljenu promenljivu stanje. Kada je promenljivo stanje neophodno, koristite odgovarajuće tehnike sinhronizacije i razmotrite korišćenje atomskih promenljivih ili konkurentnih kolekcija.

Poslednji put 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

4.37 od 5
Prosečna ocena od 22k+ ocene sa Goodreads-a i Amazon-a.

Čist Kod dobija uglavnom pozitivne ocene zbog svojih principa pisanja čitljivog i održivog koda. Čitaoci cene praktične savete o imenovanju, funkcijama i testiranju. Fokus knjige na Javi i neka previše stroga pravila su česte kritike. Mnogi je smatraju obaveznim štivom za programere, iako neki smatraju da nije toliko korisna za iskusne programere. Studije slučaja i primeri refaktorisanja su pohvaljeni od strane nekih, ali drugi ih kritikuju kao preterane. U celini, recenzenti se slažu da knjiga nudi dragocene uvide o kvalitetu koda, čak i ako nisu svi predlozi univerzalno primenljivi.

Your rating:

O autoru

Robert Cecil Martin, poznat kao Ujak Bob, je renomirani inženjer softvera i konsultant. Zalaže se za Agile metode razvoja i predsednik je kompanije Object Mentor Inc. Martinovo znanje obuhvata objektno orijentisani dizajn, obrasce, UML i eXtreme programiranje. Radio je sa klijentima širom sveta, deleći svoje znanje kroz konsultacije i javne nastupe. Martin je bio glavni urednik C++ Report-a od 1996. do 1999. godine. On je istaknuta ličnost u zajednici razvoja softvera, često se pojavljuje na međunarodnim konferencijama i sajmovima. Njegov uticaj prevazilazi konsultantski rad kroz njegove knjige i članke o veštini izrade softvera i najboljim praksama.

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 →