PDA

View Full Version : Ερώτηση για προγραμματιστές



minus6
01-12-2004, 13:03
Αφορμή στάθηκε η συζήτηση στο poll με το ξύρισμα.

Άποψή μου...
Σίγουρα κώδικας με πολλά gotos sux, αλλά
τα break και continue (που χρησιμοποιώ συχνά) δεν είναι μία μορφή goto; Κάτι μου λέει ότι επίτηδες τα ονόμασαν έτσι για να μη λέγονται goto και τους κράζουν.

Επίσης...
Αν υπάρχει κώδικας της μορφής:

if (κάτι) {...}
...
κώδικας
...
πολύς κώδικας
...
μα πάρα πολύς κώδικας
...

και αν δεν ισχύει το "κάτι", δε θέλουμε να τρέξει ο αποκάτω κώδικας; Δεν πετάμε εκεί ένα goto να ξεμπερδεύουμε; Το έχω δει αυτό να γίνεται σε προγράμματα. Και ναι, ήταν σοβαρά προγράμματα (Linux kernel).

Επειδή και γω δεν είμαι σίγουρος θα περιμένω τις απαντήσεις πριν ψηφίσω. Πάντως σίγουρα δε θα 'ναι το 2.

BLiTzER
01-12-2004, 13:18
και αν δεν ισχύει το "κάτι", δε θέλουμε να τρέξει ο αποκάτω κώδικας;

An de thes na treksei o "apokato kodikas" xrhsimopoieis kalytera tis synthikes sou :P

Deggial
01-12-2004, 13:26
Υπάρχει η καταπληκτική ανακάλυψη που λέγεται "δομημένος προγραμματισμός". Και, αποδεδειγμένα, μπορείς να γράψεις ισοδύναμους επαναληπτικούς βρόγχους χωρίς break και continue.

Εν πάση περιπτώσει, τα break και continue (παρά το γεγονός πως ξεφεύγουν απ΄το δομημένο προγραμματισμό) δε δημιουργούν την ίδια σύγχηση με το GOTO.

Το δεύτερο παράδειγμα είναι αφελές. Μπορείς να γράψεις πολύ κομψότερους κώδικες αν μεγάλα τμήματα του κώδικα γίνουν αυτόνομες συναρτήσεις και απλώς τις καλείς μέσα σε μία γραμμή.

ari-m
01-12-2004, 13:34
minus6 skase. den exeis idea apo programmatismo. to goto sucks. kanei mono gia l/s jumps stin assembly.

:D :D :D :D :D :D :D :D :D


RE DOMHMENOS PROGRAMMATISMOS LEME
i8ela na ksera pws perases arxes glwsswn kai c kai ergastirio c kai java kai .........
akou kei goto


:D :D :D :D :D :D :D :D

mallon 8a psifisw to deytero etsi gia spasimo se olous tous programmatistarades guru :D :D :D ;)

katwrimos
01-12-2004, 14:42
nai

amma pikso sta goto arxizo kai kratao simioseis

minus6
01-12-2004, 15:03
Υπάρχει η καταπληκτική ανακάλυψη που λέγεται "δομημένος προγραμματισμός". Και, αποδεδειγμένα, μπορείς να γράψεις ισοδύναμους επαναληπτικούς βρόγχους χωρίς break και continue.

Εντάξει, το θέμα όμως είναι να κάνουμε τη ζωή τόσο τη δικιά μας, όσο και αυτού που θα τύχει να δει τον κώδικά μας, εύκολη. Αποδεδειγμένα ούτε for loops χρειάζεσαι, τα κάνεις όλα με Turing Machines.



Εν πάση περιπτώσει, τα break και continue (παρά το γεγονός πως ξεφεύγουν απ΄το δομημένο προγραμματισμό) δε δημιουργούν την ίδια σύγχηση με το GOTO.

Σύμφωνοι.



Το δεύτερο παράδειγμα είναι αφελές. Μπορείς να γράψεις πολύ κομψότερους κώδικες αν μεγάλα τμήματα του κώδικα γίνουν αυτόνομες συναρτήσεις και απλώς τις καλείς μέσα σε μία γραμμή.
Όχι δεν είναι. Και μακάρι να είχα πρόχειρο τον κώδικα να τον έκανα paste. Ήταν πάντως απ' ότι θυμάμαι σε κλήση συστήματος του kernel που είχε να κάνει με memory allocation (v 2.0.κάτι).
Υπήρχε ένα πρώτο if στο οποίο ελέγχονταν πολύ βασικά πράγματα. Σε μετέπειτα ifs (τα οποία βρισκόντουσαν σε πολύ βαθιές "εσοχές") ελέγχοταν κάποιες άλλες συνθήκες, οι οποίες όμως αν δεν ίσχυαν σε συνδυασμό με τα πρώτα ifs, ο κώδικας δεν είχε νόημα να συνεχίσει. Αυτά που έπρεπε να γίνουν μετά ήταν αρκετά πιο "κάτω".
Εννοείται βέβαια ότι ο κώδικας μπορούσε να γίνει χωρίς goto. Αλλά θα έπρεπε να συνδυάσεις πάαααρα πολλά ifs και το αποτέλεσμα αμφιβάλλω αν θα ήταν πιο ευανάγνωστο από αυτό που είχα μπροστά μου, και το οποίο απλά είχε 2-3 goto σε κάποια "βαθιά" σημεία.

Αν θες να το δεις πάντως μπορώ να ψάξω να βρω τον κώδικα. Εγώ ποτέ μου δεν έχω χρησιμοποιήσει goto, αλλά για τέτοιες περιπτώσεις πραγματικά δεν είμαι σίγουρος αν τελικά πρέπει ή όχι.

Ingolemo
02-12-2004, 04:03
S'oles tis periptwseis pou mporw na skeftw pou h xrhsh goto tha dieukolune kai den tha gamouse th katanohsh tou kwdika, ama valeis synarthseis ginetai polu pio eukola kai katanohta.

1-2 goto den nomizw na epirreasoun kai polu to kwdika, alla kallitera na apofeygetai giati mporei na ginei mpleksimo.