Monday, November 05, 2007

Μια μικρή συμβουλή σε νέους Java Developers..και μή

Όσο περνάνε τα χρόνια, μου αρέσει ο κώδικα να είναι απλός όσο δεν πάει, λιγότερα inline statement, αρκετό dot notation, και μερικές συνήθειες που παίζουν στο μάτι ωραία! Ένα συγκεκριμένο code practice που ακολουθώ πάντα έχει να κάνει με τον ορισμό local variable στο scope της μεθόδου και την επιστροφή της στο return statement. Λοιπόν από την δική μου εμπειρία πολλές φορές ξεκινούσα να γράψω την υλοποίηση μιας μεθόδου! Έστω ότι ξέραμε ότι η μέθοδος αυτή ξέραμε ότι θα επιστρέφει String. Λοιπόν αν είχα να υλοποιήσω κάτι πολύπλοκο πολλές φορές -έλεγα - ΟΚ άστην για την τώρα να επιστρέψει null μιας και δεν έχω ολοκληρωμένη εικόνα! Ή ακόμα χειρότερα κάτσε να καλέσω την τάδε να μου επιστρέψει το String κτλ κτλ! Πολλές φορές έχω οδηγηθεί σε λάθη με null να έχουν ξεμείνει ή κλήσεις σε άσχετες μεθόδους που χτυπάνε Exception με το κιλό! Πάντα μου αρέσει να χρησιμοποιώ το εξής στυλ - και βλέπω ότι πολλοί νέοι προγραμματιστές δεν το σκέφτονται καν!

public String doSomething( ) {

String result = null ;

//the real code now!
result = MyClassOBj.MyMethod();

return result;
}
Μπορώ αν θέλω και ανάλογα με την περίπτωση να αρχικοποιήσω το result , και έτσι αν πρέπει να κάνω κάποιο if πάνω στην τιμή του (καλυτερο παράδειγμα είναι τα boolean) να το γλιτώσω!

Δεν ξέρω, πόσοι από εσάς χρησιμοποιείται αυτό το στυλ, με το local variable result! Το βρίσκω αρκετά καθαρό και ευέλικτο σε methods τα οποία δεν είναι 1-2 γραμμές αλλά έχουν ένα σεβαστό body!

2 comments:

  1. H μέθοδος που περιγραφεις είναι πολύ δημοφιλής στη vbscript όπου δεν υπαρχει return statement αλλά χρησιμοποιειται το όνομα της function, π.χ.

    function multiply(n1,n2)
    multiply=n1*n2
    end function

    οπότε σε μεγάλες functions αν ήθελες να αλλάξεις π.χ το όνομα της function έπρεπε να το αλλάξεις σε όλα τα σημεία της function.

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

    Σε έχασα στην παράγραφο με το "if πανω στην τιμη του".

    ReplyDelete
  2. Μια που μιλάμε για best practices... στην μέθοδο που περιέγραψες, έστω ότι ήρθε η ώρα να επιστρέψεις κάπου το string και ανάλογα με ένα if πρέπει να επιστραφεί άλλο string.

    Μην το κάνεις έτσι:
    if(something) {
    return "something";
    } else {
    return "something else";
    }

    αλλά έτσι:
    if(something) {
    result = "something"
    } else {
    result = "something else";
    }
    return result;

    Single point of exit από μεθόδους. Έχω δει κόσμο να το υποτιμά και μάλιστα να θεωρεί πιο μαγκιά το πρώτο.

    ReplyDelete