Τα βασικά του Καθαρού Κώδικα

Είναι εξαιρετικά σημαντικό, γι όλους εμάς που γράφουμε κώδικα, να μπορούμε, εκτός από το να εκτελεί σωστά τους αλγορίθμους ο κώδικας μας, να επικοινωνεί τις προθέσεις του κώδικα μας. Αυτό, το να γράφουμε τον κώδικα μας με τέτοιο τρόπο ώστε να επικοινωνεί τις προθέσεις μας, το ονομάζουμε καθαρό κώδικα και υπάρχουν τεχνικές που μπορούμε να χρησιμοποιήσουμε για να πετύχουμε αυτό το σκοπό.

Όνομα μεταβλητών: Πολλές φορές, για όλους ευκολίας, γράφουμε ονόματα μεταβλητών με ένα απλό x ή y ή ακόμα και metavliti. Αυτό μπορεί για εμάς που γράφουμε τον κώδικα εκείνη τη στιγμή να είναι κατανοητό πως π.χ. το x είναι ο μέσος όρος αλλά για κάποιον άλλον προγραμματιστή ή ακόμα και τον μελλοντικό εαυτό μας (ο οποίας φιλοσοφικά είναι κι αυτός ένας άλλος προγραμματιστής) το x είναι κάτι άγνωστο. 

Θα βοηθούσε όμως αν ονομάζαμε τη μεταβλητή avg ή ακόμα καλύτερα average. Αυτό επικοινωνεί καλύτερα τι θέλουμε να κάνουμε με τη μεταβλητή αυτή.

Μια περίπτωση που θα μπορούσαμε να αγνοήσουμε αυτόν τον κανόνα είναι αν η μεταβλητή μας έχει περιορισμένο scope όπως για παράδειγμα σε μια for. Ακόμα κι εκεί όμως ίσως θα είχε νόημα να έχουμε καλύτερο όνομα στη μεταβλητή μας αν για παράδειγμα το i ήταν το index κάποιου πίνακα.

Καλό είναι να είμαστε καθαροί με τα ονόματα μας ώστε να μην αφήνουμε τον αναγνώστη του κώδικα να μπερδευτεί μεταξύ των ονομάτων των μεταβλητών. Θα μπορούσαμε να μπερδέψουμε τον αναγνώστη για παράδειγμα με το να ονομάζουμε τη μεταβλητή tmp και να εννοούμε τη θερμοκρασία και μια μεταβλητή temp και να εννοούμε μια προσωρινή μεταβλητή. Για να μπορέσει ο αναγνώστης να διαβάσει τον κώδικα θα πρέπει να καταβάλλει έξτρα πνευματική προσπάθεια ώστε να θυμάται στη συνέχεια του κώδικα τι σημαίνει η κάθε μεταβλητή. Το πρόβλημα θα μπορούσε να λυθεί αν με το temperature εννοούμε τη θερμοκρασία και με το temporary την προσωρινή μεταβλητή.


Συναρτήσεις (functions): Το βασικότερο λάθος που κάνουμε όταν συγγράφουμε μια συνάρτηση είναι να της δίνουμε πάνω από μια αρμοδιότητες. Ένα παράδειγμα λάθους συγγραφής μιας συνάρτησης θα ήταν να έχουμε μια function η οποία κάνει τον υπολογισμό του εμβαδό ενός τετραγώνου και ταυτόχρονα εμφανίζει στην κονσόλα το μήνυμα. Γιατί όμως είναι λάθος;

Το λάθος σε αυτή την περίπτωση θα μπορούσε να εμφανιστεί αν θέλαμε να υπολογίσουμε το εμβαδό του τετραγώνου σε ένα άλλο σημείο του κώδικα αλλά να μην το εμφανίσουμε στην κονσόλα. Με το να σπάσουμε αυτές τις δύο ενέργειας (υπολογισμός και log) σε δύο διαφορετικές function δίνουμε τη δυνατότητα στους εαυτούς μας να χρησιμοποιήσουμε την ενέργεια που θέλουμε ανάλογα με τις απαιτήσεις.

Ταυτόχρονα, θα πρέπει να σημειώσουμε πως ένας τρόπος να καταλάβουμε πως μια function κάνει περισσότερα από μια ενέργειες, είναι το όνομα της. Όταν στη συνάρτηση χρησιμοποιούμε τον σύνδεσμο and στο όνομα της μεθόδου τότα μάλλον (σίγουρα) πρέπει να σπάσουμε τη συνάρτηση σε τμήματα.

Τέλος, σημαντικό είναι να αναφέρουμε πως μια συνάρτηση πρέπει να ξεκινάει με ένα ρήμα ώστε να δείχνει ενέργεια πχ calculate, get, write, delete ενώ μια μεταβλητή θα πρέπει να είναι ουσιαστικό όπως index, area, cost, file κλπ.

Σχόλια: Τα σχόλια είναι βασικά ώστε να εξηγείς τι κάνει μια συνάρτηση αλλά όχι να εξηγεί πως το κάνει. Μάλιστα σε κάποιες περιπτώσεις το να βάλεις σχόλια στην κορυφή μιας συνάρτησης είναι μάλλον χωρίς ιδιαίτερο νόημα αφού το όνομα της συνάρτησης θα μπορούσε να εξηγεί τι κάνει πχ updateDatabase. Είναι σημαντικό να μη γράφουμε σχόλια χωρίς ουσία γιατί ο κώδικας μπορεί να αλλάξει και η εμπειρία έχει δείξει πως τα σχόλια μένουν ίδια με αποτέλεσμα να μην εξηγούν τίποτα ή ακόμα και να κάνουν τη κατανόηση του κώδικα ακόμα πιο δύσκολη.

Μαγικά νούμερα: Εκεί λοιπόν που διαβάζεις το κώδικα βλέπεις πως ο προηγούμενος συγγραφέας πολλαπλασίασε το τελικό ποσό με το 0.5. Σχόλια δεν έχει γράψει πουθενά απλά βλέπεις αυτόν τον πολλαπλασιασμό από το πουθενά. Ίσως, γιατί ο προηγούμενος συγγραφέας δεν ήξερε πως θα επικοινωνήσει τη 50% έκπτωση.

Αυτό που μπορούμε να κάνουμε είναι να έχουμε μια μεταβλητή με ένα κατανοητό όνομα, για παράδειγμα discount έτσι ώστε και να μπορεί να καταλάβει αυτός που διαβάζει το κώδικα τι συμβαίνει αλλά και να μπορούμε εύκολα να αλλάξουμε και εύκολα το ποσοστό της έκπτωσης.

Συμπεράσματα: Για να μπορούμε να γράφουμε έναν καθαρό κώδικα, τουλάχιστον σε βασικό στάδιο, μας αναγκάζει να σκεφτόμαστε περισσότερο την ονομασία των μεταβλητών και των συναρτήσεων μας, τη δομή και τις λειτουργίες τους αλλά και το πότε και που πρέπει να γράφουμε σχόλια ώστε να μην καταλήξουν χωρίς νόημα. Είναι καλό να προσπαθούμε τουλάχιστον να γράφουμε πιο καθαρό κώδικα τόσο για τον μελλοντικό εαυτό μας τόσο και για κάποιον άλλον που θα αναγκαστεί να διαβάσει και - κυρίως - να καταλάβει τον κώδικα μας, ώστε να μπορούν να γίνουν πιο γρήγορα πιθανές αλλαγές και με λιγότερα bugs.