geo1st487 Δημοσ. 2 Δεκεμβρίου 2013 Δημοσ. 2 Δεκεμβρίου 2013 Ποιος απο του δυο παρακατω κωδικες πιο σωστα γραμμενος; Οταν συνεχιζεται η γραμμη απο κατω πρεπει να ξεκιναει πιο μεσα ή ακριβως απο κατω; if (Asd(p.Left, p.Top) && pod < 0 && ppp == 5 && hal() == 0) { // mpla mpla return 2; } if (Asd(p.Left, p.Top) && pod < 0 && ppp == 5 && hal() == 0) { // mpla mpla return 2; }
Dr.Fuzzy Δημοσ. 2 Δεκεμβρίου 2013 Δημοσ. 2 Δεκεμβρίου 2013 Το πρώτο (το δεύτερο είναι άσχημο!). Είμαστε πολύ οι ψυχαναγκαστικοί τελικά...να κάνουμε κλαμπ!
albNik Δημοσ. 2 Δεκεμβρίου 2013 Δημοσ. 2 Δεκεμβρίου 2013 Πιο "ασχημο" μου φαίνεται το κενο μετα το if Tools->Options->Text Editor-->C#->Formatting->Spacing ->Insert Space after keywords in control flow statements (ξε-check)
bnvdarklord Δημοσ. 2 Δεκεμβρίου 2013 Δημοσ. 2 Δεκεμβρίου 2013 Σπάνια θα εσπαγα το if σε 2 γραμμές, αλλα αν για καποιο λόγο το εκανα, θα το έσπαγα τελειως if ( Asd(p.Left, p.Top) && pod < 0 && ppp == 5 && hal() == 0 ) { // mpla mpla return 2; }
geo1st487 Δημοσ. 2 Δεκεμβρίου 2013 Μέλος Δημοσ. 2 Δεκεμβρίου 2013 Πιο "ασχημο" μου φαίνεται το κενο μετα το if Tools->Options->Text Editor-->C#->Formatting->Spacing ->Insert Space after keywords in control flow statements (ξε-check) και μενα πιο "ασχημο" μου φαινεται.
ZAKKWYLDE Δημοσ. 3 Δεκεμβρίου 2013 Δημοσ. 3 Δεκεμβρίου 2013 Δεν ξέρω για ποιό όμορφο-άσχημο, πιο κατανοητό είναι το 1ο, αν και θα μπορούσες να έχεις γραμμή/συνθήκη για ακόμα καλύτερα.
ALLisCHAOS Δημοσ. 3 Δεκεμβρίου 2013 Δημοσ. 3 Δεκεμβρίου 2013 συμφωνώ με το φιλό που δεν θα το έσπαγε καθόλου το if ... πιο 'όμορφο' κ πιο κατανοητό νομίζω
nilosgr Δημοσ. 3 Δεκεμβρίου 2013 Δημοσ. 3 Δεκεμβρίου 2013 Εμένα μ αρέσει το 2ο και ναι θα είχα κάθε condition σε άλλη γραμμή και κάθε γραμμή θα άρχιζε με το && Αλλά είναι θέμα γούστου (όταν γράφεις κώδικα για εσένα). Αν δουλεύεις σε κάποιο project ή ομάδα, τότε ακολουθείς το στυλ της ομάδας
tsipouro Δημοσ. 3 Δεκεμβρίου 2013 Δημοσ. 3 Δεκεμβρίου 2013 private bool IsValid(){ return Asd(p.Left, p.Top) && pod < 0 && ppp == 5 && hal() == 0; } if (IsValid()){ return 2; }
nilosgr Δημοσ. 3 Δεκεμβρίου 2013 Δημοσ. 3 Δεκεμβρίου 2013 private bool IsValid(){ return Asd(p.Left, p.Top) && pod < 0 && ppp == 5 && hal() == 0; } if (IsValid()){ return 2; } Ώπα, εδώ ανοίγει άλλη κουβέντα... Αν ο συγκεκριμένος κώδικας χρησιμοποιείται μόνο μια φορά και δεν υπάρχει και παρόμοιο κομμάτι κώδικα (πχ με ppp == 9) θα τον βάζατε σε μέθοδο/συνάρτηση για να φαίνεται καλύτερα;
defacer Δημοσ. 3 Δεκεμβρίου 2013 Δημοσ. 3 Δεκεμβρίου 2013 Ώπα, εδώ ανοίγει άλλη κουβέντα... Αν ο συγκεκριμένος κώδικας χρησιμοποιείται μόνο μια φορά και δεν υπάρχει και παρόμοιο κομμάτι κώδικα (πχ με ppp == 9) θα τον βάζατε σε μέθοδο/συνάρτηση για να φαίνεται καλύτερα; Πιθανόν. Απλά το "για να φαίνεται καλύτερα" που λες, όχι τόσο με την έννοια ότι θα χρειαστεί λιγότερο χώρο στον editor. Να το πω με ένα παράδειγμα. Η μία περίπτωση να τραβήξει πολύ μακριά η γραμμή είναι αυτή: else if (!($relationGraphContext === false || $relationGraphContext instanceof ActiveRecordGraphContext)) { throw new \InvalidArgumentException("relationGraphContext"); } Εδώ το condition είναι προφανές το τι κάνει, ιδιαίτερα αν λάβει κανείς υπόψη και το τι γίνεται μέσα στο else if (το άφησα επίτηδες). Οπότε ναι μεν είναι μακρυνάρι αλλά σα λογική είναι πολύ πολύ απλό και άρα κατανοητό στον αναγνώστη (ο αναγνώστης φανταζόμαστε ότι ξέρει αλλά δεν έχει ξαναδιαβάσει το συγκεκριμένο κώδικα ποτέ -- δύσκολο όταν τον έχεις γράψει ο ίδιος, σίγουρα). Σ' αυτή την περίπτωση δε θα έκανα απαραίτητα κάτι. Από την άλλη, το παράδειγμα που συζητάμε τώρα είναι βέβαια επιτηδευμένο αλλά πολύ συχνά εμφανίζεται και στην πράξη: η συνθήκη είναι μεγάλη επειδή είναι περίπλοκη. Σ' αυτή την περίπτωση είναι πολύ καλή ιδέα να τη βάλεις σε function όχι για επαναχρησιμοποίηση αλλά α) για να τη "βαφτίσεις" και β) γιατί έτσι μειώνεις τη δυσκολία για τον αναγνώστη του αρχικού κώδικα εφόσον δεν τον ενδιαφέρει η λεπτομέρεια του τι θεωρείται "valid" (by the way προφανώς αυτό ήταν παράδειγμα και σκέτο IsValid είναι πολύ κακό όνομα στην πράξη). Για παράδειγμα σκέψου τι θα προτιμούσες να διαβάσεις από τα παρακάτω: if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) if (IsLeapYear(year))
migf1 Δημοσ. 3 Δεκεμβρίου 2013 Δημοσ. 3 Δεκεμβρίου 2013 Ποιος απο του δυο παρακατω κωδικες πιο σωστα γραμμενος; ... Όταν γράφεις μόνος σου, επιλέγεις όποιο θέλεις (ή και κάτι άλλο). Αλλιώς ότι έχετε συμφωνήσει με τους υπόλοιπους προγραμματιστές του πρότζεκτ. Προσωπικά προτιμώ μια παραλλαγή του 2ου... if ( something long && (something other long || another long something) || yet another something lοng ){ /* body of if */ } Ώπα, εδώ ανοίγει άλλη κουβέντα... Αν ο συγκεκριμένος κώδικας χρησιμοποιείται μόνο μια φορά και δεν υπάρχει και παρόμοιο κομμάτι κώδικα (πχ με ppp == 9) θα τον βάζατε σε μέθοδο/συνάρτηση για να φαίνεται καλύτερα; Εγώ προσωπικά όχι, εκτός από 2 περιπτώσεις: α) αν υποχρεούμαι να το κάνω όταν δουλεύω με άλλους β) αν το προτζεκτ είναι μεγάλο και αναβαθμίζεται συχνά. Βοηθάει και στο maintainability, αλλά κυρίως στο scalability. Π.χ. αν χρειαστεί μελλοντικά να μπει κι αλλού ο ίδιος έλεγχος, ή αν χρειαστεί μελλοντικά και να προστεθεί/αφαιρεθεί κάτι στους όρους του ελέγχου και να μπει ο έλεγχος και σε άλλα σημεία του κώδικα (αν το έχουμε macro/συνάρτηση αλλάζουμε μόνο το κώδικά της αντί να ψάχνουμε τον raw έλεγχο σε όλο τον κώδικα). 1
Portmaster Δημοσ. 4 Δεκεμβρίου 2013 Δημοσ. 4 Δεκεμβρίου 2013 Με έχει απασχολήσει πολύ αυτό το πρόβλημα! Έχω καταλήξει στο παρακάτω, Καταρχήν δεδομένου ότι το statement είναι μικρότερο από 80 columns δεν θα πρέπει να σπάσει καθόλου, δεύτερον και προφανές τα bracers στο ίδιο line...Πάμε στα "αμφιλεγόμενα", αν και εμένα αρχικά μου φαινόταν καλύτερο o operator να πηγαίνει στην από κάτω γραμμή λόγω allignment με όσα open source projects έχω ασχοληθεί και άρθρα έχω διαβάσει βάζουν / προτείνουν τον operator στο πάνω line.Σχετικά με το κενό της δεύτερης γραμμής ακολουθώ μια ενδιάμεση κατάσταση βάσει bsd style, μισό tab space. if (Asd(p.Left, p.Top) && pod < 0 && ppp == 5 && hal() == 0) { // mpla mpla return 2; } Κανονικά θα έπρεπε να είναι σε ενα line βέβαια. if (Asd(p.Left, p.Top) && pod < 0 && ppp == 5 && hal() == 0) { // mpla mpla return 2; } Γράφω 99% C#, σε πολύ σπάνιες περιπτώσεις να χρησιμοποιήσω ενα lambda variable (func) απο πάνω για να κάνω wrap το expression εαν είναι αρκετά complex.
bnvdarklord Δημοσ. 4 Δεκεμβρίου 2013 Δημοσ. 4 Δεκεμβρίου 2013 προφανές τα bracers στο ίδιο line... Γιατι προφανές; Το μισώ προσωπικά.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα