Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Ζει το GOTO ?! Ζει!

Îåêßíçóå áðü ôï ìÝëïò KelMan. Τελευταία δημοσίευση από το μέλος elam στις 26-09-2006, 11:50. Υπάρχουν 19 απαντήσεις.
Σελίδα 1 από 2 (20 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-07-2006, 17:21 15234

    Ζει το GOTO ?! Ζει!

    Θυμάστε τη GW-Basic; Την Basic του ZX Spectrum; Του Amstrad; Έχετε γράψει ποτέ κώδικα σε αυτές τις εκδόσεις της BASIC; Έχετε χρησιμοποιήσει το απεχθές "GOTO" statement; Ναι ε; Τς, τς, τς... Αλλά εδώ και καμιά δεκαριά χρόνια έχετε αποβάλει τέτοιες κακές συνήθειες και πλεόν ακολουθείτε θρησκευτικά το structured programming και σχεδόν το είχατε ξεχάσει μέχρι που σας το θύμισα τώρα ε;

    Ε λοιπόν, μάλλον δεν το έχουν ξεχάσει όλοι! Κοιτάχτε αυτό το δείγμα κώδικα:



                                  ...
                                  ...
                                  ...
                                  Return
                            End If
                            goto Label_012A
                      End If
                      Select Case keys1
                            Case Keys.A, Keys.C, Keys.NumPad0, Keys.F2
                                  goto Label_012A
                            Case Keys.B
                                  Return
                      End Select
                End If
          End If
          Return
    Label_012A:
          e.Handled = Me.ProcessDataGridViewKey(e)
    End Sub

    Στην πυρά! Στην πυρά! Ποιανού είναι αυτός ο κώδικας?!? Ε?! Ποιανού?! Πως τόλμησε ο αθεόφοβος;!

    Λοιπόν, εεεεε... αυτόν τον κώδικα, τον βρήκα καθώς έψαχνα να βρω πως δουλεύει το DataGridView (βλ. http://www.dotnetzone.gr/cs/forums/14838/ShowPost.aspx) και ΝΑΙ, ΕΙΝΑΙ ΤΗΣ MICROSOFT!!! Big SmileBig SmileBig SmileBig Smile

     

     


    Vir prudens non contra ventum mingit
  •  26-07-2006, 17:52 15237 σε απάντηση της 15234

    Απ: Ζει το GOTO ?! Ζει!

    Φοβερό! Spaghetti κώδικα από σήμερα!
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  26-07-2006, 18:09 15238 σε απάντηση της 15234

    Απ: Ζει το GOTO ?! Ζει!

    Πώς έφτασε στα χέρια σου ο κώδικας; Βρήκες το πραγματικό source ή προέκυψε από κάποιον decompiler; Γιατί στη δεύτερη περίπτωση, το αποτέλεσμα του decompile δε συμπίπτει πάντα με τον αρχικό κώδικα. Και με έβαλε σε υποψία το Label_012A, το οποίο "μυρίζει" decompilation.
    Όχι τίποτα άλλο, να μη ρίξουμε στην πυρά και κανέναν αθώο άνθρωπο και το έχουμε μετά βάρος στη συνείδησή μας Wink


    Νατάσα Μανουσοπούλου
  •  26-07-2006, 18:47 15239 σε απάντηση της 15238

    Απ: Ζει το GOTO ?! Ζει!

    Χε χε χε, με τον Reflector το είδα... Κι εγώ το σκέφτηκα αυτό αλλά μου προκαλεί μεγάλη εντύπωση πως θα μπορούσε να γίνει κώδικας decompiled και να έχει GOTOs...
    Vir prudens non contra ventum mingit
  •  26-07-2006, 19:42 15240 σε απάντηση της 15239

    Απ: Ζει το GOTO ?! Ζει!

    Βέβαια, τώρα που το σκέφτομαι, θα μπορούσε να έχει το GOTO και κατά το decompilation να μην έχει κρατήσει το πραγματικό όνομα του label και γι αυτό να βάζει Label_XXXX
    Vir prudens non contra ventum mingit
  •  26-07-2006, 22:03 15242 σε απάντηση της 15238

    Απ: Ζει το GOTO ?! Ζει!

    αν κάνεις decompile σε C# τι σου βγάζει;
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  26-07-2006, 22:27 15244 σε απάντηση της 15234

    Απ: Ζει το GOTO ?! Ζει!

    Χμ, γιατί το goto δεν ακολουθεί το σωστό casing? Μήπως είναι κάποιου είδους αστειάκι από την πλευρά του αρθρογράφου;
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  27-07-2006, 10:40 15251 σε απάντηση της 15239

    Απ: Ζει το GOTO ?! Ζει!

    Η goto είναι μέσα σε όλα τα instruction sets των επεξεργαστών και η χρήση της είναι ευρύτατη. Πάρα πολλές εντολές των γλωσσών όταν μεταφράζονται παράγουν κώδικα που περιέχει την goto. Για παράδειγμα η for, η switch και άλλες είναι αδύνατο να υλοποιηθούν χωρίς την goto.

    Στην συγκεκριμένη περίπτωση η goto Υλοποιεί το break που έβαλε ο προγραμματιστής στο case

     

  •  27-07-2006, 11:49 15254 σε απάντηση της 15251

    Απ: Ζει το GOTO ?! Ζει!

    Σωστά, αλλά δεν θα έπρεπε να έχει κώδικα πριν το break? Ή μήπως για κάθε break βάζει διαφορετικό label? Και μετά, αν έχει πολλά breaks, θα έχει πολλά labels;

    Οπότε, τι χρειάζεσαι τον Obfuscator? Big Smile
    Vir prudens non contra ventum mingit
  •  27-07-2006, 12:11 15255 σε απάντηση της 15254

    Απ: Ζει το GOTO ?! Ζει!

    Τελικά, βρήκα άκρη... Αθώος ο developer!

    Αν λάβουμε υπόψην μας αυτό: http://msdn.microsoft.com/vcsharp/programming/language/ask/switch/

    Βλέπουμε ότι το παράδειγμα του MSDN για την switch



            public static void Main()
            {
                Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
                Console.Write("Please enter your selection: ");
                string s = Console.ReadLine();
                int n = int.Parse(s);
                int cost = 0;
                switch (n)
                {
                    case 1:
                        cost += 25;
                        break;
                    case 2:
                        cost += 25;
                        goto case 1;
                    case 3:
                        cost += 50;
                        goto case 1;
                    default:
                        Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
                        break;
                }
                if (cost != 0)
                    Console.WriteLine("Please insert {0} cents.", cost);
                Console.WriteLine("Thank you for your business.");
            }

    Γίνεται decompiled έτσι:



    public static void Main()
    {
          Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
          Console.Write("Please enter your selection: ");
          string text1 = Console.ReadLine();
          int num1 = int.Parse(text1);
          int num2 = 0;
          switch (num1)
          {
                case 1:
                      break;

                case 2:
                      num2 += 0x19;
                      break;

                case 3:
                      num2 += 50;
                      break;

                default:
                      Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
                      goto Label_0060;
          }
          num2 += 0x19;
    Label_0060:
          if (num2 != 0)
          {
                Console.WriteLine("Please insert {0} cents.", num2);
          }
          Console.WriteLine("Thank you for your business.");
    }

     


    Vir prudens non contra ventum mingit
  •  27-07-2006, 13:11 15256 σε απάντηση της 15234

    Απ: Ζει το GOTO ?! Ζει!

    τώρα που ξεκαθάρισε το θέμα νομίζω ότι:

    1. Είναι άδικο να κρίνεις έναν προγραμματιστή από τον decompiled κώδικα αφού παρεμβάλεται και ο compiler και ο decompiler.

    2. H goto είναι είναι μια χρησιμότατη εντολή χωρίς την οποία δεν μπορούμε να κάνουμε βήμα, απλά είναι δυσανάγνωστη και γι αυτό οι γλώσσες την αποφεύγουν. Σε low level προγραμματισμό πραγματικά πετάει.
  •  27-07-2006, 13:30 15258 σε απάντηση της 15256

    Απ: Ζει το GOTO ?! Ζει!

    Ως προς το #1 να πω ότι το post ήταν fun oriented (γι αυτό άλλωστε το στόλισα με μπόλικα smileys) και φυσικά δεν τίθεται θέμα κρίσης του άγνωστου developer. Ακόμα και το πραγματικό source να είχα, το να κρίνεις κώδικα out-of-context (χρόνος, χρήμα, κλπ) δεν είναι τίποτε άλλα παρά ακαδημαϊκή άσκηση...
    Vir prudens non contra ventum mingit
  •  27-07-2006, 13:40 15261 σε απάντηση της 15234

    Απ: Ζει το GOTO ?! Ζει!

     KelMan wrote:

    Θυμάστε τη GW-Basic; Την Basic του ZX Spectrum; Του Amstrad; Έχετε γράψει ποτέ κώδικα σε αυτές τις εκδόσεις της BASIC; Έχετε χρησιμοποιήσει το απεχθές "GOTO" statement; Ναι ε; Τς, τς, τς... Αλλά εδώ και καμιά δεκαριά χρόνια έχετε αποβάλει τέτοιες κακές συνήθειες και πλεόν ακολουθείτε θρησκευτικά το structured programming και σχεδόν το είχατε ξεχάσει μέχρι που σας το θύμισα τώρα ε;

     

    Και μόνο η χθεσινή ανάγνωση του topic έφτασε για να έχω εφιάλτες όλο το βράδυ.Crying

    Ειλικρινά δεν νοσταλγώ την εποχή, που έκανα insert ή alter μια γραμμή κώδικα σε GWBASIC και έπειτα άλλαζα (μετά κόπου και ιδρώτα) καμιά 50αριά GOTO.

    Φτού απαταξάμην. (και το σημάδι του σταυρού τρείς φορές απαγγέλοντάς το)

  •  27-07-2006, 14:47 15263 σε απάντηση της 15234

    Απ: Ζει το GOTO ?! Ζει!

    Σε προκαλώ να αναλάβεις VB6 project, γεμάτο με GOTO και On Error GOTO's... (ευτυχώς το project αυτό εγκαταλείφθηκε από τον πελάτη, αν και πληρώθηκε).
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  27-07-2006, 15:28 15265 σε απάντηση της 15234

    Απ: Ζει το GOTO ?! Ζει!

    Ας είναι καλά το Spectrumάκι και ο θείος Clive (όπου και να βρίσκεται αυτή τη στιγμή) που μας έβαλε από το δημοτικό στη λογική του προγραμματισμού, αλλά η αλήθεια είναι ότι με τα πολλά Goto's η όλη φάση ήταν κάπως έτσι:

     


    Μισώ τα ξυπνητήρια!!!!!!
Σελίδα 1 από 2 (20 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems