Fat4Life Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Senior dev στην ομάδα μου είχε πετάξει μέσα σε ένα class μου το παρακάτω function. Τι του κάνεις? Το άλλαξα σε αυτο:
Tmark Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Με Switch snippet θα έβγαινε ακόμα καλύτερα νομίζω. 2
_Gikoskos_ Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Πως γινεται να γραψεις αυτον τον κωδικα με switch;
Fat4Life Δημοσ. 23 Νοεμβρίου 2016 Μέλος Δημοσ. 23 Νοεμβρίου 2016 Το switch θα ήταν πιο καθαρό ναι αλλά δε γίνεται με switch γιατι καλείς διαφορετικά functions σε κάθε condition. Το θέμα είναι γιατί έκανε typecasting to enum σε Int????????? και γιατι δε χρησιμοποιεί if-else. Επισης το || στο δευτερο if δεν θα εκτελεστεί ποτέ.
Papakaliati Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Switch με method invocation δεν νομιζω οτι γινεται.
Tmark Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Το switch θα ήταν πιο καθαρό ναι αλλά δε γίνεται με switch γιατι καλείς διαφορετικά functions σε κάθε condition. Το θέμα είναι γιατί έκανε typecasting to enum σε Int????????? και γιατι δε χρησιμοποιεί if-else. Έχεις δίκιο, δεν είδα ότι έκανε invoke διαφορετικές methods σε κάθε if. Το typecasting νομίζω το κάνει για να πάρει το underlying value του enum.
Papakaliati Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Το switch θα ήταν πιο καθαρό ναι αλλά δε γίνεται με switch γιατι καλείς διαφορετικά functions σε κάθε condition. Το θέμα είναι γιατί έκανε typecasting to enum σε Int????????? και γιατι δε χρησιμοποιεί if-else. Πολλα return και στην δικια σου περιπτωση. public DocumentAccessType CheckAccessLevel(int id) { var documentAcceptType = DocumentAccessType.Everyone; if (IsFundraisingLeadOrAbove(id)) documentAcceptType = DocumentAccessType.FundraisingLeadOnly; .... else if () .... else return documentAcceptType; } Ωστε αμα θελεις στο μελλον να το κανεις debug να μπορεις απλα με ενα breakpoint να εχεις το αποτελεσμα, και γενικως ειναι πολυ πιο καθαρη λυση. 4
παπι Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Το switch θα ήταν πιο καθαρό ναι αλλά δε γίνεται με switch γιατι καλείς διαφορετικά functions σε κάθε condition. Το θέμα είναι γιατί έκανε typecasting to enum σε Int????????? και γιατι δε χρησιμοποιεί if-else. Επισης το || στο δευτερο if δεν θα εκτελεστεί ποτέ. else με return/break/continue, δεν υπαρχει λογος να το βαλεις. Το καστ και το or, δεν ξερω.
albNik Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Δεν είμαι περήφανος γιαυτό return IsA() ? Doc.Type1 : IsB() ? Doc.Type2 : IsC() ? Doc.Type3 : Doc.Type4; 1
παπι Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Δεν είμαι περήφανος γιαυτό return IsA() ? Doc.Type1 : IsB() ? Doc.Type2 : IsC() ? Doc.Type3 : Doc.Type4; μαυτο, το πιο πιθανο ειναι να σου ζητησει τον κωδικο του obfuscator 1
albNik Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 μαυτο, το πιο πιθανο ειναι να σου ζητησει τον κωδικο του obfuscator Αν το δεις για αρκετή ώρα το συνηθίζεις και δεν φαίνεται τόσο άσχημο
k33theod Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Εγώ πάλι νομίζω ότι χωρίς το elif με σκέτο if είναι πιό καθαρό Αν η συνθήκη ελέγχου η συνάρτηση δηλαδή στα if, elif ήταν η ίδια ή παίζει ρόλο η σειρά εκτέλεσης των ελέγχων είναι οκ το elif
NickSym Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Ο κωδικας ειναι αθλιος και στις δυο περιπτωσεις. Τοσο το format οσο και τα ονοματα-ουρες του enum και των μεθοδων. Επισης αυτες οι μεθοδοι τι ελεγχο κανουν; Υπαρχει ελεγχος οριων της παραμετρου; Αν ναι, απλα διεγραψε αυτες τις μεθοδους και αλλαξε αυτην με ελεγχους σε ακρα και switch. Δεν είμαι περήφανος γιαυτό return IsA() ? Doc.Type1 : IsB() ? Doc.Type2 : IsC() ? Doc.Type3 : Doc.Type4; Νομιζω πως θα ηταν πιο "καθαρο" ως return IsA() ? Doc.Type1 : IsB() ? Doc.Type2 : IsC() ? Doc.Type3 : Doc.Type4;
Papakaliati Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Ο κωδικας ειναι αθλιος και στις δυο περιπτωσεις. Τοσο το format οσο και τα ονοματα-ουρες του enum και των μεθοδων. Επισης αυτες οι μεθοδοι τι ελεγχο κανουν; Υπαρχει ελεγχος οριων της παραμετρου; Αν ναι, απλα διεγραψε αυτες τις μεθοδους και αλλαξε αυτην με ελεγχους σε ακρα και switch. Η νομεκλατουρα της μεθολου ειναι υποδειγματικη βασικα. Και επιπλεον σοβαρα προτεινεις να παρει ενα κομματι κωδικα που τηρει το Single responsibility principle και και να το καταστρεψει; Επιπλεον θεωρω οτι ειναι σχεδον σιγουρο οτι οι μεθοδοι αυτοι χρησιμοποιουνται και σε αλλους ελεγχους, μηπως θελεις να κανεις copy paste τον ελεγχο σε ακρα παντου; Και τριτον ( η μαλλον πρωτο σε σειρα πρωτεραιοτητας ) δεν ξερεις ποσο πολυπλοκος ειναι ο ελεγχος της καθε μεθοδου. Μπορουμε να υποθεσουμε οτι δεν περικλυει απλα 1=διευθυντης... Bεβαια θα ειχε νοημα να ειναι η μεθοδος στο στυλ ... { var userType= GetUserType(id); var accessType = GetAccessTypeForUser(userType) return accessType; }
albNik Δημοσ. 23 Νοεμβρίου 2016 Δημοσ. 23 Νοεμβρίου 2016 Υπάρχει και ένα θέμα efficiency. Πάει στη βάση 4 φορές και αναζητεί την ίδια εγγραφή με βάση το id. 2
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα