Key Takeaways
1. Γράψτε καθαρό κώδικα που είναι αναγνώσιμος και συντηρήσιμος
Η μόνη έγκυρη μέτρηση της ποιότητας του κώδικα: WTFs/λεπτό
Η αναγνωσιμότητα είναι πρωταρχικής σημασίας. Ο καθαρός κώδικας θα πρέπει να είναι εύκολα κατανοητός από άλλους προγραμματιστές. Πρέπει να είναι απλός, κομψός και απαλλαγμένος από περιττά στοιχεία. Στοχεύστε να γράφετε κώδικα που εκφράζει καθαρά την πρόθεσή του χωρίς την ανάγκη εκτενών σχολίων. Χρησιμοποιήστε κατανοητά ονόματα μεταβλητών και συναρτήσεων, κρατήστε τις συναρτήσεις μικρές και εστιασμένες, και οργανώστε τον κώδικα λογικά.
Η συντηρησιμότητα επιτρέπει την εξέλιξη. Ο κώδικας που είναι δύσκολο να αλλάξει γίνεται βάρος. Σχεδιάστε τον κώδικά σας ώστε να είναι ευέλικτος και αρθρωτός, ώστε να μπορεί να προσαρμοστεί σε μεταβαλλόμενες απαιτήσεις. Ακολουθήστε αρχές όπως το DRY (Don't Repeat Yourself) και το SOLID για να δημιουργήσετε χαλαρά συνδεδεμένα, υψηλής συνοχής συστήματα. Αναδιαρθρώστε αλύπητα για να βελτιώσετε τη δομή του κώδικα χωρίς να αλλάξετε τη συμπεριφορά.
Ο καθαρός κώδικας αποδίδει. Ενώ η συγγραφή καθαρού κώδικα απαιτεί περισσότερη αρχική προσπάθεια, εξοικονομεί σημαντικό χρόνο και πονοκεφάλους μακροπρόθεσμα. Ο καθαρός κώδικας είναι πιο εύκολος στην αποσφαλμάτωση, την επέκταση και τη συντήρηση. Επιτρέπει στους προγραμματιστές να εργάζονται πιο αποτελεσματικά και μειώνει τον κίνδυνο εισαγωγής σφαλμάτων κατά τις αλλαγές. Κάντε τον καθαρό κώδικα βασικό μέρος της πρακτικής ανάπτυξής σας.
2. Ακολουθήστε σημαντικές συμβάσεις ονοματοδοσίας
Το όνομα μιας μεταβλητής, συνάρτησης ή κλάσης θα πρέπει να απαντά σε όλες τις μεγάλες ερωτήσεις. Πρέπει να σας λέει γιατί υπάρχει, τι κάνει και πώς χρησιμοποιείται.
Χρησιμοποιήστε ονόματα που αποκαλύπτουν την πρόθεση. Επιλέξτε ονόματα που εκφράζουν καθαρά τον σκοπό και τη συμπεριφορά των μεταβλητών, συναρτήσεων και κλάσεων. Αποφύγετε τα ονόματα ενός γράμματος ή τις κρυπτικές συντομογραφίες. Χρησιμοποιήστε προφορικά ονόματα που μπορούν να αναζητηθούν εύκολα. Για παράδειγμα:
- Κακό: d (χρόνος που έχει περάσει σε ημέρες)
- Καλό: elapsedTimeInDays
Να είστε συνεπείς και ακριβείς. Χρησιμοποιήστε συνεπείς συμβάσεις ονοματοδοσίας σε όλη τη βάση κώδικα. Να είστε ακριβείς για να αποφύγετε την αμφισημία - για παράδειγμα, χρησιμοποιήστε σημαντικές διακρίσεις όπως getActiveAccounts() και getActiveAccountInfo(). Αποφύγετε κωδικοποιήσεις ή προθέματα που προσθέτουν θόρυβο χωρίς αξία. Τα ονόματα κλάσεων θα πρέπει να είναι ουσιαστικά, τα ονόματα μεθόδων θα πρέπει να είναι ρήματα.
Το μήκος του ονόματος θα πρέπει να ταιριάζει με την έκταση. Χρησιμοποιήστε μεγαλύτερα, πιο περιγραφικά ονόματα για μεταβλητές και συναρτήσεις με μεγαλύτερες εκτάσεις. Τα σύντομα ονόματα είναι αποδεκτά για μικρές, τοπικές εκτάσεις. Το μήκος ενός ονόματος θα πρέπει να είναι ανάλογο με την έκταση χρήσης του. Βελτιστοποιήστε για αναγνωσιμότητα και κατανόηση στο πλαίσιο όπου χρησιμοποιείται το όνομα.
3. Κρατήστε τις συναρτήσεις μικρές και εστιασμένες
Οι συναρτήσεις θα πρέπει να κάνουν ένα πράγμα. Θα πρέπει να το κάνουν καλά. Θα πρέπει να το κάνουν μόνο.
Το μικρό είναι όμορφο. Οι συναρτήσεις θα πρέπει να είναι μικρές - συνήθως 5-10 γραμμές. Θα πρέπει να χωρούν σε μία οθόνη και να είναι άμεσα κατανοητές. Εξαγάγετε τον κώδικα σε καλά ονομασμένες βοηθητικές συναρτήσεις αντί να γράφετε μεγάλες, πολύπλοκες συναρτήσεις. Οι μικρές συναρτήσεις είναι πιο εύκολες στην κατανόηση, τη δοκιμή και τη συντήρηση.
Κάντε ένα πράγμα καλά. Κάθε συνάρτηση θα πρέπει να έχει έναν μόνο, σαφή σκοπό. Αν μια συνάρτηση κάνει πολλά πράγματα, εξαγάγετε αυτά σε ξεχωριστές συναρτήσεις. Σημάδια ότι μια συνάρτηση κάνει πάρα πολλά περιλαμβάνουν:
- Πολλαπλά επίπεδα αφαίρεσης
- Πολλαπλές ενότητες ή μπλοκ κώδικα
- Πολλές παραμέτρους
Διατηρήστε ένα επίπεδο αφαίρεσης. Οι δηλώσεις μέσα σε μια συνάρτηση θα πρέπει να είναι όλες στο ίδιο επίπεδο αφαίρεσης. Μην αναμειγνύετε λογική υψηλού επιπέδου με λεπτομέρειες χαμηλού επιπέδου. Εξαγάγετε τις χαμηλού επιπέδου λειτουργίες σε ξεχωριστές συναρτήσεις. Αυτό βελτιώνει την αναγνωσιμότητα διατηρώντας τις συναρτήσεις εστιασμένες και εννοιολογικά απλές.
4. Εφαρμόστε σωστή μορφοποίηση και οργάνωση
Η μορφοποίηση του κώδικα αφορά την επικοινωνία, και η επικοινωνία είναι η πρώτη προτεραιότητα του επαγγελματία προγραμματιστή.
Η συνεπής μορφοποίηση έχει σημασία. Χρησιμοποιήστε συνεπή εσοχή, διαλείμματα γραμμών και κενά σε όλο τον κώδικα σας. Αυτό βελτιώνει την αναγνωσιμότητα και μειώνει το γνωστικό φορτίο. Συμφωνήστε σε πρότυπα μορφοποίησης με την ομάδα σας και χρησιμοποιήστε αυτοματοποιημένα εργαλεία για να τα επιβάλετε. Κύριες κατευθυντήριες γραμμές μορφοποίησης περιλαμβάνουν:
- Σωστή εσοχή
- Συνεπής τοποθέτηση αγκύλης
- Λογικά διαλείμματα γραμμών
- Κατάλληλος χώρος
Οργανώστε τον κώδικα λογικά. Ομαδοποιήστε σχετικό κώδικα μαζί και χωρίστε τον άσχετο κώδικα. Χρησιμοποιήστε κενές γραμμές για να δημιουργήσετε "παραγράφους" ανάμεσα σε λογικές ενότητες. Τοποθετήστε σχετικές συναρτήσεις κοντά η μία στην άλλη. Κρατήστε τα αρχεία εστιασμένα σε μια μόνο έννοια ή συστατικό. Σπάστε μεγάλα αρχεία σε μικρότερα, πιο εστιασμένα όταν είναι κατάλληλο.
Ακολουθήστε τις τυπικές συμβάσεις. Τηρήστε τις τυπικές συμβάσεις για τη γλώσσα και την κοινότητά σας. Αυτό καθιστά τον κώδικά σας πιο οικείο και προσβάσιμο σε άλλους προγραμματιστές. Για παράδειγμα, στη Java:
- Τα ονόματα κλάσεων χρησιμοποιούν PascalCase
- Τα ονόματα μεθόδων χρησιμοποιούν camelCase
- Οι σταθερές χρησιμοποιούν ALL_CAPS
5. Διαχειριστείτε τις εξαρτήσεις και αποφύγετε την επανάληψη
Η επανάληψη μπορεί να είναι η ρίζα όλων των κακών στο λογισμικό.
Εξαλείψτε την επανάληψη. Ο επαναλαμβανόμενος κώδικας είναι μια χαμένη ευκαιρία για αφαίρεση. Όταν βλέπετε επανάληψη, εξαγάγετε τον κοινό κώδικα σε μια επαναχρησιμοποιήσιμη συνάρτηση ή κλάση. Αυτό βελτιώνει τη συντηρησιμότητα κεντρικοποιώντας τη λογική και μειώνοντας τον κίνδυνο ασυνεπών αλλαγών. Τύποι επανάληψης που πρέπει να προσέξετε:
- Ταυτόσημα μπλοκ κώδικα
- Παρόμοιοι αλγόριθμοι με ελαφρές παραλλαγές
- Επαναλαμβανόμενες αλυσίδες switch/case ή if/else
Διαχειριστείτε τις εξαρτήσεις προσεκτικά. Ελαχιστοποιήστε τις εξαρτήσεις μεταξύ των μονάδων για να μειώσετε τη σύνδεση. Χρησιμοποιήστε την έγχυση εξάρτησης και την αναστροφή ελέγχου για να κάνετε τον κώδικα πιο αρθρωτό και δοκιμάσιμο. Ακολουθήστε την Αρχή Αναστροφής Εξάρτησης - εξαρτηθείτε από αφαιρέσεις, όχι από συγκεκριμένα. Αυτό καθιστά τον κώδικά σας πιο ευέλικτο και πιο εύκολο να αλλάξει.
Χρησιμοποιήστε την αρχή της ελάχιστης γνώσης. Μια μονάδα δεν θα πρέπει να γνωρίζει τα εσωτερικά των αντικειμένων που χειρίζεται. Αυτό μειώνει τη σύνδεση μεταξύ των μονάδων. Για παράδειγμα, χρησιμοποιήστε τον Νόμο του Demeter - μια μέθοδος θα πρέπει να καλεί μόνο μεθόδους σε:
- Το δικό της αντικείμενο
- Αντικείμενα που περνούν ως παράμετροι
- Αντικείμενα που δημιουργεί
- Τα άμεσα συστατικά αντικείμενα της
6. Διαχειριστείτε τα σφάλματα με χάρη
Η διαχείριση σφαλμάτων είναι σημαντική, αλλά αν θολώνει τη λογική, είναι λάθος.
Χρησιμοποιήστε εξαιρέσεις αντί για κωδικούς σφάλματος. Οι εξαιρέσεις είναι πιο καθαρές και δεν θολώνουν τη βασική λογική του κώδικα σας. Επιτρέπουν τη διαχείριση σφαλμάτων να διαχωρίζεται από την ευχάριστη διαδρομή. Όταν χρησιμοποιείτε εξαιρέσεις:
- Δημιουργήστε ενημερωτικά μηνύματα σφάλματος
- Παρέχετε συμφραζόμενα με τις εξαιρέσεις
- Ορίστε κλάσεις εξαιρέσεων με βάση τις ανάγκες του καλούντος
Μην επιστρέφετε null. Η επιστροφή null οδηγεί σε εξαιρέσεις δείκτη null και θολώνει τον κώδικα με ελέγχους null. Αντί αυτού:
- Επιστρέψτε κενές συλλογές αντί για null για λίστες
- Χρησιμοποιήστε το πρότυπο Null Object
- Χρησιμοποιήστε Optional στη Java ή Maybe σε λειτουργικές γλώσσες
Γράψτε πρώτα τις δηλώσεις try-catch-finally. Ξεκινήστε με το try-catch-finally όταν γράφετε κώδικα που θα μπορούσε να ρίξει εξαιρέσεις. Αυτό βοηθά στον καθορισμό της έκτασης και των προσδοκιών για τον καλούντα κώδικα. Διασφαλίζει ότι οι πόροι διαχειρίζονται και απελευθερώνονται σωστά, ακόμη και σε σενάρια σφάλματος.
7. Γράψτε λεπτομερείς μονάδες δοκιμών
Ο κώδικας δοκιμών είναι εξίσου σημαντικός με τον κώδικα παραγωγής.
Ακολουθήστε τους τρεις νόμους του TDD. Η Ανάπτυξη Κατευθυνόμενη από Δοκιμές (TDD) βελτιώνει την ποιότητα και το σχεδιασμό του κώδικα:
- Γράψτε μια αποτυχημένη δοκιμή πριν γράψετε οποιονδήποτε κώδικα παραγωγής
- Γράψτε μόνο αρκετό από μια δοκιμή για να αποδείξετε μια αποτυχία
- Γράψτε μόνο αρκετό κώδικα παραγωγής για να περάσει τη δοκιμή
Διατηρήστε τις δοκιμές καθαρές και συντηρήσιμες. Εφαρμόστε τα ίδια πρότυπα ποιότητας κώδικα στις δοκιμές σας όπως και στον κώδικα παραγωγής σας. Αναδιαρθρώστε και βελτιώστε τον κώδικα δοκιμών τακτικά. Οι καλά δομημένες δοκιμές χρησιμεύουν ως τεκμηρίωση και επιτρέπουν την ατρόμητη αναδιάρθρωση του κώδικα παραγωγής.
Στοχεύστε σε εκτενή κάλυψη δοκιμών. Γράψτε δοκιμές που καλύπτουν ακραίες περιπτώσεις, οριακές συνθήκες και σενάρια σφαλμάτων - όχι μόνο την ευχάριστη διαδρομή. Χρησιμοποιήστε εργαλεία κάλυψης κώδικα για να εντοπίσετε κενά στην κάλυψη δοκιμών. Θυμηθείτε ότι η 100% κάλυψη δεν εγγυάται κώδικα χωρίς σφάλματα, αλλά παρέχει εμπιστοσύνη στην αναδιάρθρωση και τις αλλαγές.
8. Αναδιαρθρώστε τον κώδικα συνεχώς
Αφήστε το κάμπινγκ καθαρότερο από ό,τι το βρήκατε.
Αναδιαρθρώστε ευκαιριακά. Βελτιώστε τη δομή του κώδικα όποτε εργάζεστε σε ένα κομμάτι κώδικα. Ακολουθήστε τον Κανόνα του Σκηνίτη: αφήστε τον κώδικα καλύτερο από ό,τι τον βρήκατε. Μικρές, σταδιακές βελτιώσεις προστίθενται με την πάροδο του χρόνου και αποτρέπουν την αποσύνθεση του κώδικα. Κοινές τεχνικές αναδιάρθρωσης περιλαμβάνουν:
- Εξαγωγή μεθόδων ή κλάσεων
- Μετονομασία για σαφήνεια
- Απλοποίηση πολύπλοκων συνθηκών
- Αφαίρεση επανάληψης
Αναδιαρθρώστε με ασφάλεια με δοκιμές. Έχετε πάντα μια σταθερή σουίτα δοκιμών πριν από την αναδιάρθρωση. Κάντε μικρές, σταδιακές αλλαγές και εκτελέστε δοκιμές συχνά. Αυτό σας δίνει εμπιστοσύνη ότι οι αλλαγές σας δεν σπάνε τη υπάρχουσα λειτουργικότητα. Χρησιμοποιήστε αυτοματοποιημένα εργαλεία αναδιάρθρωσης όταν είναι διαθέσιμα για να μειώσετε τον κίνδυνο εισαγωγής σφαλμάτων.
Ισορροπήστε την αναδιάρθρωση με την παροχή αξίας. Ενώ η συνεχής αναδιάρθρωση είναι σημαντική, μην την αφήνετε να παραλύει την πρόοδο. Στοχεύστε στο "αρκετά καλό" αντί για την τελειότητα. Επικεντρωθείτε στις περιοχές του κώδικα που είναι πιο προβληματικές ή αλλάζουν συχνά. Επικοινωνήστε την αξία της αναδιάρθρωσης στους ενδιαφερόμενους για να εξασφαλίσετε υποστήριξη για τη συνεχιζόμενη βελτίωση του κώδικα.
9. Εφαρμόστε αρχές αντικειμενοστραφούς και λειτουργικού προγραμματισμού
Τα αντικείμενα κρύβουν τα δεδομένα τους πίσω από αφαιρέσεις και εκθέτουν συναρτήσεις που λειτουργούν σε αυτά τα δεδομένα. Οι δομές δεδομένων εκθέτουν τα δεδομένα τους και δεν έχουν σημαντικές συναρτήσεις.
Χρησιμοποιήστε τις αρχές αντικειμενοστραφούς προγραμματισμού με σύνεση. Εφαρμόστε αρχές όπως η ενσωμάτωση, η κληρονομικότητα και η πολυμορφία για να δημιουργήσετε ευέλικτους, αρθρωτούς σχεδιασμούς. Ακολουθήστε τις αρχές SOLID:
- Αρχή Μοναδικής Ευθύνης
- Αρχή Ανοιχτού-Κλειστού
- Αρχή Υποκατάστασης Liskov
- Αρχή Διαχωρισμού Διεπαφών
- Αρχή Αναστροφής Εξάρτησης
Εκμεταλλευτείτε τις έννοιες του λειτουργικού προγραμματισμού. Ακόμη και σε αντικει
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
Καθαρός Κώδικας λαμβάνει κυρίως θετικές κριτικές για τις αρχές του σχετικά με τη συγγραφή αναγνώσιμου και συντηρήσιμου κώδικα. Οι αναγνώστες εκτιμούν τις πρακτικές συμβουλές για την ονοματολογία, τις συναρτήσεις και τη δοκιμή. Η εστίαση της βιβλίου στη γλώσσα Java και ορισμένες υπερβολικά αυστηρές κατευθυντήριες γραμμές είναι κοινές κριτικές. Πολλοί το θεωρούν απαραίτητο ανάγνωσμα για τους προγραμματιστές, αν και κάποιοι το βρίσκουν λιγότερο χρήσιμο για έμπειρους προγραμματιστές. Οι μελέτες περιπτώσεων και τα παραδείγματα αναδιάρθρωσης επαινούνται από κάποιους, αλλά επικρίνονται από άλλους ως υπερβολικά. Συνολικά, οι κριτές συμφωνούν ότι το βιβλίο προσφέρει πολύτιμες γνώσεις σχετικά με την ποιότητα του κώδικα, ακόμη και αν δεν είναι όλες οι προτάσεις καθολικά εφαρμόσιμες.
Similar Books








