Σύγκριση με βάση το αριστερό μέλος ([1],[2], [3])

Στις γλώσσες προγραμματισμού που χρησιμοποιούν διαφορετικά σύμβολα για την ανάθεση τιμής (συνήθως ένα σύμβολο ίσον (=) ) και για την σύγκριση (συνήθως δύο ίσον (==) ) (π.χ. C/C++, Java και η πλειοψηφία των γλωσσών τα τελευταία 15 χρόνια), και όπου οι αναθέσεις τιμών είναι συντακτικά σωστές μέσα σε δομές ελέγχου ή επαναληπτικούς βρόχους υπάρχει ένα πλεονέκτημα στην υιοθέτηση της σύγκρισης με βάσης το αριστερό μέρος και την τοποθέτηση των σταθερών ή των εκφράσεων προς τα αριστερά σε κάθε σύγκριση.

Στα επόμενα προγράμματα φαίνονται τα πλεονεκτήματα της υιοθέτησης της σύγκρισης με βάση το αριστερό μέλος. Και στις δύο περιπτώσεις θέλουμε να συγκρίνουμε την τιμή του a με το 42. Στο πρώτο πρόγραμμα δεν υπάρχει κάποια διαφορά μιας και στις δύο περιπτώσεις η σύγκριση πραγματοποιείται σωστά.

if (a == 42) { ... } // A right-hand comparison checking if a equals 42. if (42 == a) { ... } // Recast, using the left-hand comparison style.

Η διαφορά και το πλεονέκτημα της σύγκρισης με βάση το αριστερό μέρος προκύπτει όταν ένας προγραμματιστής πληκτρολογήσει = αντί για ==.

if (a = 42) { ... } // Inadvertent assignment which is often hard to debug if (42 = a) { ... } // Compile time error indicates source of error

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

1Wikibooks, Computer Programming/Coding Style,
2Deitel, P.J. and Deitel, H.M., C++: How to Program, Prentice Hall PTR, 2011.
3Programming Research Group and others, High-Integrity C++ Coding Standard Manual: Version 3.3, 2013.





results matching ""

    No results matching ""