Svarbiausios išvados
1. Rašykite švarų, skaitomą ir prižiūrimą kodą
Vienintelis galiojantis kodo kokybės matavimas: WTFs/minutę
Skaitomumas yra svarbiausias. Švarus kodas turi būti lengvai suprantamas kitiems programuotojams. Jis turi būti paprastas, elegantiškas ir be nereikalingų detalių. Stenkitės rašyti kodą, kuris aiškiai išreiškia savo ketinimus, nereikalaujant išsamių komentarų. Naudokite prasmingus kintamųjų ir funkcijų pavadinimus, laikykite funkcijas mažas ir orientuotas, ir logiškai organizuokite kodą.
Prižiūrimumas leidžia evoliuciją. Kodo, kurį sunku keisti, tampa našta. Projektuokite savo kodą taip, kad jis būtų lankstus ir modulinis, kad galėtų prisitaikyti prie besikeičiančių reikalavimų. Laikykitės tokių principų kaip DRY (Don't Repeat Yourself) ir SOLID, kad sukurtumėte laisvai sujungtas, labai kohezines sistemas. Nešykite kodo struktūrą be gailesčio, kad pagerintumėte jo struktūrą, nekeisdami elgesio.
Švarus kodas atsiperka. Nors rašyti švarų kodą reikalauja daugiau pradinio pastangų, ilgainiui tai sutaupo daug laiko ir nervų. Švarus kodas yra lengviau derinamas, plečiamas ir prižiūrimas. Tai leidžia programuotojams dirbti efektyviau ir sumažina klaidų įvedimo riziką keičiant kodą. Padarykite švarų kodą pagrindine savo kūrimo praktikos dalimi.
2. Laikykitės prasmingų pavadinimų konvencijų
Kintamojo, funkcijos ar klasės pavadinimas turėtų atsakyti į visus svarbiausius klausimus. Jis turėtų pasakyti, kodėl jis egzistuoja, ką jis daro ir kaip jis naudojamas.
Naudokite ketinimus atskleidžiančius pavadinimus. Pasirinkite pavadinimus, kurie aiškiai perteikia kintamųjų, funkcijų ir klasių tikslą ir elgesį. Venkite vieno simbolio pavadinimų ar paslaptingų santrumpų. Naudokite tariamus pavadinimus, kuriuos lengva ieškoti. Pavyzdžiui:
- Blogai: d (praeitas laikas dienomis)
- Gerai: elapsedTimeInDays
Būkite nuoseklūs ir tikslūs. Naudokite nuoseklias pavadinimų konvencijas visame savo kodo bazėje. Būkite tikslūs, kad išvengtumėte dviprasmybių - pavyzdžiui, naudokite prasmingus skirtumus, tokius kaip getActiveAccounts() ir getActiveAccountInfo(). Venkite kodavimo ar prefiksų, kurie prideda triukšmo be vertės. Klasės pavadinimai turėtų būti daiktavardžiai, metodų pavadinimai - veiksmažodžiai.
Pavadinimo ilgis turėtų atitikti apimtį. Naudokite ilgesnius, aprašomuosius pavadinimus kintamiesiems ir funkcijoms, turinčioms didesnę apimtį. Trumpi pavadinimai yra priimtini mažoms, vietinėms apimtims. Pavadinimo ilgis turėtų būti proporcingas jo naudojimo apimčiai. Optimizuokite skaitomumą ir supratimą kontekste, kuriame pavadinimas naudojamas.
3. Laikykite funkcijas mažas ir orientuotas
Funkcijos turėtų daryti vieną dalyką. Jos turėtų daryti tai gerai. Jos turėtų daryti tai tik.
Mažas yra gražu. Funkcijos turėtų būti mažos - paprastai 5-10 eilučių ilgio. Jos turėtų tilpti į vieną ekraną ir būti iš karto suprantamos. Išskirkite kodą į gerai pavadintas pagalbines funkcijas, o ne rašykite ilgas, sudėtingas funkcijas. Mažos funkcijos yra lengviau suprantamos, testuojamos ir prižiūrimos.
Darykite vieną dalyką gerai. Kiekviena funkcija turėtų turėti vieną aiškų tikslą. Jei funkcija atlieka kelis dalykus, išskirkite juos į atskiras funkcijas. Ženklai, kad funkcija daro per daug, apima:
- Daugiau nei vienas abstrakcijos lygis
- Daugiau nei viena kodo dalis ar blokas
- Daug parametrų
Išlaikykite vieną abstrakcijos lygį. Teiginiai funkcijoje turėtų būti visi tame pačiame abstrakcijos lygyje. Nešalinkite aukšto lygio logikos su žemo lygio detalėmis. Išskirkite žemesnio lygio operacijas į atskiras funkcijas. Tai pagerina skaitomumą, išlaikant funkcijas orientuotas ir konceptualiai paprastas.
4. Praktikuokite tinkamą formatavimą ir organizavimą
Kodo formatavimas yra apie komunikaciją, o komunikacija yra profesionalaus programuotojo pirmas reikalas.
Nuoseklus formatavimas yra svarbus. Naudokite nuoseklų įtraukimo, eilučių pertraukimo ir tarpo naudojimą visame savo kode. Tai pagerina skaitomumą ir sumažina kognityvinę apkrovą. Susitarkite su savo komanda dėl formatavimo standartų ir naudokite automatizuotas priemones, kad juos užtikrintumėte. Pagrindinės formatavimo gairės apima:
- Tinkamą įtraukimo lygį
- Nuoseklų skliaustų išdėstymą
- Logiškas eilučių pertraukas
- Tinkamą tarpą
Organizuokite kodą logiškai. Grupiuokite susijusį kodą kartu ir atskirkite nesusijusį kodą. Naudokite tuščias eiles, kad sukurtumėte „pastraipų“ pertraukas tarp loginių skyrių. Laikykite susijusias funkcijas šalia viena kitos. Laikykite failus orientuotus į vieną koncepciją ar komponentą. Didelius failus padalinkite į mažesnius, labiau orientuotus, kai tai tinkama.
Laikykitės standartinių konvencijų. Laikykitės standartinių konvencijų savo kalbai ir bendruomenei. Tai padaro jūsų kodą labiau pažįstamą ir prieinamą kitiems programuotojams. Pavyzdžiui, Java:
- Klasės pavadinimai naudoja PascalCase
- Metodų pavadinimai naudoja camelCase
- Konstantos naudoja ALL_CAPS
5. Valdykite priklausomybes ir venkite dubliavimo
Dubliavimas gali būti visų blogybių šaknis programinėje įrangoje.
Pašalinkite dubliavimą. Dubliuotas kodas yra praleista galimybė abstrakcijai. Kai matote dubliavimą, išskirkite bendrą kodą į pakartotinai naudojamą funkciją ar klasę. Tai pagerina prižiūrimumą centralizuojant logiką ir sumažinant nesuderinamų pakeitimų riziką. Dubliavimo tipai, kuriuos reikia stebėti:
- Identški kodo blokai
- Panašūs algoritmai su nedideliais variantais
- Pakartotiniai switch/case ar if/else grandinės
Atsargiai valdykite priklausomybes. Minimalizuokite priklausomybes tarp modulių, kad sumažintumėte sujungimą. Naudokite priklausomybės injekciją ir kontrolės inversiją, kad kodas būtų labiau modulinis ir testuojamas. Laikykitės Priklausomybės inversijos principo - priklausykite nuo abstrakcijų, o ne konkretumų. Tai padaro jūsų kodą lankstesnį ir lengviau keičiamą.
Naudokite mažiausio žinojimo principą. Modulis neturėtų žinoti apie objektų, kuriuos jis manipuliuoja, vidinę struktūrą. Tai sumažina sujungimą tarp modulių. Pavyzdžiui, naudokite Demeter įstatymą - metodas turėtų skambinti metodams tik:
- Jo pačio objekto
- Objektams, perduotiems kaip parametrai
- Objektams, kuriuos jis sukuria
- Jo tiesioginiams komponentų objektams
6. Tvarkykite klaidas maloniai
Klaidos tvarkymas yra svarbus, tačiau jei jis užgožia logiką, tai neteisinga.
Naudokite išimtis, o ne klaidų kodus. Išimtys yra švaresnės ir nesukelia triukšmo pagrindinėje jūsų kodo logikoje. Jos leidžia klaidų tvarkymą atskirti nuo laimingos kelio. Naudodami išimtis:
- Sukurkite informatyvius klaidų pranešimus
- Pateikite kontekstą su išimtimis
- Apibrėžkite išimčių klases pagal skambinančiojo poreikius
Negrąžinkite null. Grąžinimas null sukelia null rodyklių išimtis ir užkemša kodą null patikromis. Vietoj to:
- Grąžinkite tuščias kolekcijas vietoj null sąrašams
- Naudokite Null Object modelį
- Naudokite Optional Java arba Maybe funkcinėse kalbose
Rašykite try-catch-finally teiginius pirmiausia. Pradėkite nuo try-catch-finally, kai rašote kodą, kuris gali sukelti išimtis. Tai padeda apibrėžti apimtį ir lūkesčius skambinančiam kodui. Tai užtikrina, kad ištekliai būtų tinkamai valdomi ir atlaisvinami, net ir klaidų scenarijuose.
7. Rašykite išsamius vienetinius testus
Testų kodas yra toks pat svarbus kaip ir gamybos kodas.
Laikykitės trijų TDD įstatymų. Testų vedama plėtra (TDD) gerina kodo kokybę ir dizainą:
- Rašykite nesėkmingą testą prieš rašydami bet kokį gamybos kodą
- Rašykite tik tiek, kad parodytumėte nesėkmę
- Rašykite tik tiek gamybos kodo, kad praeitumėte testą
Laikykite testus švarius ir prižiūrimus. Taikykite tuos pačius kodo kokybės standartus savo testams, kaip ir gamybos kodui. Reguliariai peržiūrėkite ir gerinkite testų kodą. Gerai struktūrizuoti testai tarnauja kaip dokumentacija ir leidžia drąsiai peržiūrėti gamybos kodą.
Siekiate išsamaus testų aprėpties. Rašykite testus, kurie apima kraštutinius atvejus, ribines sąlygas ir klaidų scenarijus - ne tik laimingą kelią. Naudokite kodo aprėpties įrankius, kad nustatytumėte spragas testų aprėtyje. Atminkite, kad 100% aprėptis negarantuoja be klaidų kodo, tačiau suteikia pasitikėjimo peržiūrint ir keičiant.
8. Nuolat peržiūrėkite kodą
Palikite stovyklavietę švaresnę nei radote.
Peržiūrėkite protingai. Gerinkite kodo struktūrą, kai dirbate su tam tikru kodu. Laikykitės Skautų taisyklės: palikite kodą geresnį nei radote. Maži, palaipsniui atliekami patobulinimai kaupiasi laikui bėgant ir užkerta kelią kodo puvimui. Dažnos peržiūros technikos apima:
- Metodų ar klasių išskyrimą
- Pavadinimų keitimą aiškumui
- Sudėtingų sąlygų supaprastinimą
- Dubliavimo pašalinimą
Peržiūrėkite saugiai su testais. Visada turėkite tvirtą testų rinkinį prieš peržiūrėdami. Darykite mažus, palaipsniui atliekamus pakeitimus ir dažnai vykdykite testus. Tai suteikia jums pasitikėjimo, kad jūsų pakeitimai nesugriauna esamos funkcionalumo. Naudokite automatizuotas peržiūros priemones, kai jos yra prieinamos, kad sumažintumėte klaidų įvedimo riziką.
Subalansuokite peržiūrą su vertės teikimu. Nors nuolatinė peržiūra yra svarbi, neleiskite, kad ji paralyžiuotų pažangą. Siekite „pakankamai gerai“, o ne tobulumo. Orientuokite peržiūros pastangas į labiausiai problematiškas ar dažnai keičiamas kodo sritis. Komunikuokite peržiūros vertę su suinteresuotaisiais asmenimis, kad užtikrintumėte paramą nuolatiniam kodo tobulinimui.
9. Taikykite objektinio ir funkcinio programavimo principus
Objektai slepia savo duomenis už abstrakcijų ir atskleidžia funkcijas, kurios veikia su tais duomenimis. Duomenų struktūros atskleidžia savo duomenis ir neturi prasmingų funkcijų.
Naudokite objektinio programavimo principus protingai. Taikykite tokius principus kaip kapsuliavimas, paveldėjimas ir polimorfizmas, kad sukurtumėte lanksčius, modulius dizainus. Laikykitės SOLID principų:
- Vieno atsakomybės principas
- Atvirkščio uždarymo principas
- Liskovo pakaitos principas
- Sąsajų segregacijos principas
- Priklausomybės inversijos principas
Išnaudokite funkcinio programavimo koncepcijas. Net objektiniuose programavimo kalbose funkcinio programavimo technikos gali lemti švaresnį kodą:
- Švarios funkcijos be šalutinių efektų
- Nepriklausomi duomenys
- Aukštesnio lygio funkcijos
- Funkcijų sudėtis
Pasirinkite tinkamą požiūrį problemai. Objektinio ir funkcinio paradigmos kiekviena turi stipriąsias ir silpnąsias puses. Naudokite objektinio programavimo dizainą, kai reikia modeliuoti sudėtingas sritis su elgesiu. Naudokite funkcinį požiūrį duomenų transformacijai ir apdorojimo vamzdynams. Daugelis šiuolaikinių kalbų palaiko hibridinį požiūrį, leidžiantį naudoti geriausią įrankį kiekvienai sistemos daliai.
10. Atsargiai apsvarstykite lygiagretumą
Lygiagretumas yra atskyrimo strategija. Tai padeda mums atskirti, kas daroma, nuo to, kada tai daroma.
Supraskite lygiagrečių programavimo iššūkius. Lygiagretus programavimas įneša sudėtingumą ir potencialą subtilioms klaidoms. Dažniausios problemos apima:
- Varžybų sąlygas
- Užstrigimus
- Praleistus signalus
- Atminties matomumo problemas
Atskirkite lygiagrečių susirūpinimą. Laikykite savo lygiagrečių susijusių kodą atskirai nuo kito kodo. Tai palengvina mąstymą ir testavimą. Naudokite abstrakcijas, tokias kaip vykdytojai, ateities ir aktoriai, kad valdytumėte lygiagretumą, o ne dirbtumėte su žaliomis gijų.
Teikite pirmenybę nekintamumui ir švarioms funkcijoms. Nekintami objektai ir švarios funkcijos yra savaime saugios. Jos pašalina daugelį lygiagrečių problemų, vengdamos bendros kintamos būsenos. Kai
Paskutinį kartą atnaujinta:
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.
Atsiliepimai
Švarus kodas sulaukia daugiausia teigiamų atsiliepimų dėl savo principų, kaip rašyti skaitomą ir palaikomą kodą. Skaitytojai vertina praktiškus patarimus dėl pavadinimų, funkcijų ir testavimo. Knygos dėmesys Java kalbai ir kai kurios pernelyg griežtos gairės yra dažni kritikos taškai. Daugelis laiko ją būtina skaityti programuotojams, nors kai kurie mano, kad ji mažiau naudinga patyrusiems programuotojams. Atvejų analizės ir kodų pertvarkymo pavyzdžiai yra girti kai kurių, tačiau kiti juos kritikuoja kaip per daug išpūstus. Apskritai, recenzentai sutinka, kad knyga siūlo vertingų įžvalgų apie kodo kokybę, net jei ne visi pasiūlymai yra universaliai taikomi.
Similar Books








