Monday, June 09, 2008

χαλαρές στιγμές!

Ώρα για code quality & review! Είναι οι μέρες που αυξάνει ο αριθμός των WTF καθως βλέπεις κώδικα δικό σου ή άλλων που γράφτηκε σε περιόδους πίεσης! Βέβαια είναι ένα λάθος το οποίο δεν το αντέχω, πονάει το μυαλό μου που λέει και συνάδελφος παοκσάκι.

try {

//code that throughs checked exception
//or could throw a runtime

}catch(Exception e){
// do nothing !
}


Όχι μην το κάνεις αυτό! Αν τα exception ειναι checked πάει να πει ότι ο μάγκας που έγραψε το API που χρησιμοποιείς θεωρείς ότι κάποιο λάθος είναι αρκετά πιθανό να γίνει και θα ήθελα τουλάχιστον να σε πληροφορήσει να κάνεις κάτι! Αν νομίζεις ότι δεν μπορείς να το διαχειριστείς throw it, άστο να το πιάσει ο caller σου!

Μην πνίγεται τα exceptions μάγκες...κάνει κακό στην υγεία του project σας!

3 comments:

  1. δηλαδή που είναι το πρόβλημα; Επειδή δε διαχειρίζεται το exception?

    Ή επειδή "πιάνει" ένα γενικό exception και δεν μας λέει τι μπορεί να είναι, και έτσι δε μας βοηθάει να καταλάβουμε τι έχει στο μυαλό του.

    Γενικά πάντως (με όλο το σεβασμό) η 2η παράγραφος δεν είναι πολύ κατανοητή (τουλάχιστον σε μένα).

    ReplyDelete
  2. με σεβασμό no prob τι δεν καταλαβαίνεις!

    1. καταρχην ειναι λάθος να πιάνεις ένα γενικο exception - απλά επειδη βαριέσαι να κάνεις exception handling - και μέσα στον κουβά των checked και unchecked να υπαρχει περίπτωση να σκάει το συστημα σου - απο κάποιο run time.

    το checked exception εχει οριστει απο τον API writer για να σε ωθήσει να κάνεις exception handling ..πρόσεξε handling όχι να το πιάσεις απλά και να του πεις βούλωσε το - δεν υπάρχεις.Ειναι εκει για να σου δειξει οτι κατα την διάρκεια της κλησης ναι ειναι π0ιθανό να συμβει κάποιο λάθος και μάλιστα ο API provider το εχει προβλέψει

    Το runtime exception ειναι εκεί για να σου πει οτι πράγματι κάτι πηγε λάθος και δεν μπορουσε να το προβλέψει κανεις - άρα κάτι ακόμα πιο σημαντικό εχει πάει στραβά που κατα πάσα πιθανότητα θα συμβαλει αρνητικά στην ολη λειτουργία του συστηματος σου!

    Και στις 2 περιπτώσεις και ιδιαίτερα στην πρώτη όταν εσυ ως caller παίρνεις την ευθύνη να κάνεις catch το exception δηλώνεις την πρόθεση σου - ειτε να το διαχειριστείς είτε να το διαβάσεις να log-αρεις και μετά αν δεν εισαι σε θέση να γράψεις λογικη που θα βοηθήσει το συστημα να κάνει recover να το πετάξεις ακόμα πιο πάνω σε καποιο κώδικα που θα μπορεί να το διαχειριστεί!

    Η ουσία των exception δεν ειναι να τα πιάνεις απλά για να σου κάνει compile ο κώδικας ειναι ..το να μπορείς να τα διαχειριστείς και με το να γράφεις παντου do nothing μέσα στο handling construct τοτε βάζεις μικρες καταστροφικές βομβες στο πρόγραμμα σου!

    κατανοητός τώρα;

    ReplyDelete
  3. Οκ, προφανώς όποιος γράφει τον παραπάνω κώδικα δεν ξέρει τι σημαίνει προγραμματισμός. Άλλο χτίστης και άλλο αρχιτέκτονας. Εγώ ως Java Dev και ως εραστής του προγραμματισμού έχω συναντήσει άπειρο κακό κώδικα, απλά ίσως είμαι πιο συμβιβασμένος απο σένα, πλέον.

    Απλά δεν κατάλαβα τι εννοούσες ακριβώς ώστε να σχολιάσω. Προφανώς ο κώδικας που έφερες σαν παράδειγμα είναι φτωχός και τα σχόλιά σου είναι εύστοχα.

    ReplyDelete