Είναι κακή πρακτική να χρησιμοποιούμε continue; και break; στα προγράμματά μας;

Είναι κακή πρακτική να χρησιμοποιούμε continue και break στα προγράμματά μας;

Αποτελέσματα της δημοσκόπησης (Ψήφισαν 8)
  • Καλή πρακτική

    Ψήφοι: 4 50.0%
  • Κακή πρακτική

    Ψήφοι: 3 37.5%
  • ΔΞ/ΔΑ

    Ψήφοι: 1 12.5%

akikos

Επιφανές μέλος

Ο Ανδρέας αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Η.Μ.Μ.Υ. και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 11,780 μηνύματα.
Ποια είναι η αποψή σας;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Guest 875331

Επισκέπτης

αυτή τη στιγμή δεν είναι συνδεδεμέν. Δεν έχει γράψει κανένα μήνυμα.
Για μενα κανει τα πραγματα περιπλοκα εχω καιρο να χρησιμοποιησω σε κατι που δεν ειναι παρα πολυ απλο
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

akikos

Επιφανές μέλος

Ο Ανδρέας αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Η.Μ.Μ.Υ. και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 11,780 μηνύματα.
Πιστεύω ότι κάποιες φορές το break; κάνει το πρόγραμμα πιο ευανάγνωστο καθώς μας δίνει τη δίνει δυνατότητα να μην χρησιμοποήσουμε κάποιο flag που σε διαφορετικές συνθήκες θα χρησιμοποιπύσαμε και έχει την ίδια λογική με το return στα functions.

Aφού είναι αποδεκτό να χρησιμοποιούμε return μέσα στα loop στα functions (αν είναι) γιατί δεν είναι αποδεκτό και το break;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

fockos

Επιφανές μέλος

Ο fockos αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Νευρολόγος και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 15,088 μηνύματα.
ο καθηγητης στο σχολειο μας ελεγε να μη χρησιμοποιουμε break
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

GiorgosM

Νεοφερμένος

Ο GiorgosM αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται IT. Έχει γράψει 104 μηνύματα.
Εγω πιστευω ειναι καλο να υπαρχουν αλλα με περιορισμο.Μην γεμισει ολο το προγραμμα με αυτα.Βεβαια εξαρταται το προγραμμα και την περιπτωση.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

fretoe

Δραστήριο μέλος

Ο fretoe αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 29 ετών. Έχει γράψει 692 μηνύματα.
Εξαρτάται την περίπτωση. Εγώ συνηθίζω να χρησιμοποιώ την continue ώστε να αποφύγω deep indentations που προκύπτουν από ένα else branch.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Scandal

Διαχειριστής

Ο Πέτρος αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 34 ετών, επαγγέλεται Web developer και μας γράφει απο Περιστέρι (Αττική). Έχει γράψει 16,692 μηνύματα.
Εγώ (σε PHP) χρησιμοποιώ αρκετές φορές το continue; ενώ το break; δεν μου έχει χρειαστεί και ποτέ (ή τουλάχιστον εγώ δεν το βάζω στον κώδικά μου), πέραν από χρήση στη switch :P
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

αυγή όντος

Διάσημο μέλος

Ο Sniffing Joe αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Οδηγός ταξί και μας γράφει απο Ισλανδία (Ευρώπη). Έχει γράψει 2,006 μηνύματα.
Switch...Case statement χωρίς break δεν μπορώ να χρησιμοποιήσω.Είναι απλά too convenient.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

gademis

Τιμώμενο Μέλος

Ο Δημήτρης αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 46 ετών και επαγγέλεται Η.Μ.Μ.Υ.. Έχει γράψει 1,634 μηνύματα.
Κι εμένα δεν μου αρέσει η χρήση continue / break. Θεωρώ ότι καταλαβαίνω καλύτερα τι γράφω αν γράψω ο ίδιος τον escape mechanism, φτιάχνοντας καλύτερα το loop η βάζοντας ένα if παραπάνω. Ακόμα και τα return στη μέση της συνάρτησης μου ξινίζουν λίγο. Είναι καθαρά preference γιατί έχω δει να τα χρησιμοποιούν, αλλά εγώ έχω στο μυαλό μου αυτό το μοντέλο με το exit condition του loop που περιμένω να ισχύει όταν φύγω από εκεί, και ειδικά το break μου το σπάει.
(Επίσης μόνο σ' εμένα ενοχλεί το OCD μου το "έτρεξε τεσσερσίμισι φορές το Loop"?)

Εξαίρεση αποτελούν πράγματι τα case / switch που σε πολλές περιπτώσεις τα απαιτούν, αλλά τότε ο εγκέφαλός μου τα θεωρεί απλά μέρος της σύνταξης του case.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

akikos

Επιφανές μέλος

Ο Ανδρέας αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Η.Μ.Μ.Υ. και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 11,780 μηνύματα.
Για μενα κανει τα πραγματα περιπλοκα εχω καιρο να χρησιμοποιησω σε κατι που δεν ειναι παρα πολυ απλο


Έτσι μας μάθαιναν στις σχολές αλλά βλέπω αρκετοί χρησιμοποιύν τα beaκ και continue για να δουν αν ικανοποιούνται οι συνθήκες για να προχωρήσουμε στη συνέχεια.

Παράδειγμα
Code:
for (int i = 0; i < count(eStekiUsers) ; i++){
  if (eStekiUsers[i]->age < 25) continue; 
  if (strcmp(eStekiUsers[i]->name,"Fockos")) continue;
  if (strcmp(eStekiUsers[i]->sxoli,"ΠΛΗΡΟΦΟΡΙΚΗ") || strcmp(eStekiUsers[i]->sxoli,"HMMY")) continue;
  if (eStekiUsers[i]->postCount <= 500 continue;
  if (time_exec = 600) break;

  eStekiUsers[i]->poiotikosXristis = true;
}

Μπορεί να κάνει κάποιος αυτό χωρίς continue; και break; και να ναι εξίσου ευανάγνωστο;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Τελευταία επεξεργασία:

fretoe

Δραστήριο μέλος

Ο fretoe αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 29 ετών. Έχει γράψει 692 μηνύματα.
Έτσι μας μάθαιναν στις σχολές αλλά βλέπω αρκετοί χρησιμοποιύν τα beaκ και continue για να δουν αν ικανοποιούνται οι συνθήκες για να προχωρήσουμε στη συνέχεια.

Παράδειγμα
Code:
for (int i = 0; i < count(eStekiUsers) ; i++){
  if (eStekiUsers[i]->age < 25) continue; 
  if (strcmp(eStekiUsers[i]->name,"Fockos")) continue;
  if (strcmp(eStekiUsers[i]->sxoli,"ΠΛΗΡΟΦΟΡΙΚΗ") || strcmp(eStekiUsers[i]->sxoli,"HMMY")) continue;
  if (eStekiUsers[i]->postCount <= 500 continue;
  if (time_exec = 600) break;

  eStekiUsers[i]->poiotikosXristis = true;
}

Μπορεί να κάνει κάποιος αυτό χωρίς continue; και break; και να ναι εξίσου ευανάγνωστο;


Ενδεχομένως να έκανα κάτι τετοιο αν ήθελα να αποφύγω continue/break;
Code:
int i = 0;
while (time_exec != 600 && i <  count(eStekiUsers)) {
  bool isPoiotikosXristis = !(
                               (eStekiUsers[i]->age < 25) &&
                               (strcmp(eStekiUsers[i]->name,"Fockos")) &&
                               (strcmp(eStekiUsers[i]->sxoli,"ΠΛΗΡΟΦΟΡΙΚΗ") || strcmp(eStekiUsers[i]->sxoli,"HMMY")) &&
                               (eStekiUsers[i]->postCount <= 500)
                             );
  eStekiUsers[i]->poiotikosXristis = isPoiotikosXristis;
  i++;
}
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

akikos

Επιφανές μέλος

Ο Ανδρέας αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Η.Μ.Μ.Υ. και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 11,780 μηνύματα.
Μικρή διαφορά η συνάρτηση μου δεν αναφέρει ότι όποιος δεν ικανοποιεί τις παραπάνω συνθήκες αυτομάτως δεν είναι και μη ποιοτικός. Συνεπώς λείπει ένα if. Στο παράδειγμά μας το body του if (που δεν έβαλες) θα ναι μικρό αλλά σε πραγματικά project μπορεί να είναι μεγάλο κάτι που κάνει τον κώδικα δυσανάγνωστο.

Ας σουλουπώσω και το δικό μου.
Code:
for (int i = 0; i < count(eStekiUsers) ; i++){
  if (eStekiUsers[i]->age < 25  || strcmp(eStekiUsers[i]->name,"Fockos")  || strcmp(eStekiUsers[i]->sxoli,"ΠΛΗΡΟΦΟΡΙΚΗ") || strcmp(eStekiUsers[i]->sxoli,"HMMY") || (eStekiUsers[i]->postCount <= 500 )) continue; 
  if (time_exec = 600) break;
  eStekiUsers[i]->poiotikosXristis = true;
}

Υπάρχει κανένας που θεωρεί το κώδικα του post πάνω πιο ευανάγνωστο από αυτό που έγραψα εγώ εδώ.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 5 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 1 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Top