Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. When I say "goto", my parrot says "Spaghetti Code"

When I say "goto", my parrot says "Spaghetti Code"

Scheduled Pinned Locked Moved The Lounge
questiondiscussionannouncementlearning
45 Posts 29 Posters 3 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R RandyBuchholz

    Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

    L Offline
    L Offline
    Lost User
    wrote on last edited by
    #19

    RandyBuchholz wrote:

    Have we developed an irrational fear of goto born out of ancient coding dogma? Or is goto inherently and absolutely evil? :)

    Are we asking annoying questions, just for the sake of asking? Jumping to a label was once an improvement ovr jumping to a specific linenumber. You are doing as if using a "GOTO 40" still has a place in modern C# coding. It doesn't. No, it's not a dogma; you don't have to believe me and can feel free to GOTO anywhere in your code - it will be your problem, not mine :)

    Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

    R 1 Reply Last reply
    0
    • L Lost User

      RandyBuchholz wrote:

      Have we developed an irrational fear of goto born out of ancient coding dogma? Or is goto inherently and absolutely evil? :)

      Are we asking annoying questions, just for the sake of asking? Jumping to a label was once an improvement ovr jumping to a specific linenumber. You are doing as if using a "GOTO 40" still has a place in modern C# coding. It doesn't. No, it's not a dogma; you don't have to believe me and can feel free to GOTO anywhere in your code - it will be your problem, not mine :)

      Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

      R Offline
      R Offline
      RandyBuchholz
      wrote on last edited by
      #20

      Quote:

      Are we asking annoying questions, just for the sake of asking?

      No, not just for the sake of asking, just for the sake of annoying. :) Also to see how many mind readers would jump on me for using them - even though I didn't say I used them. :) And don't, except in rare, low-level performance cases. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

      L E 2 Replies Last reply
      0
      • G GuyThiebaut

        Back in 1988 when I went to university to study computer science we were taught that we were never to use goto except in one particular circumstance with COBOL. We were strictly taught structured programming and in the first year had 2 hours of computer time each week. Most of our work was done on paper. Fast forward to now and I am quite happy to use a return statement in code which in essence is a goto. I think in principle it's good to learn the rules of structured programming to know when it is ok to break those rules.

        “That which can be asserted without evidence, can be dismissed without evidence.”

        ― Christopher Hitchens

        C Offline
        C Offline
        CodeWraith
        wrote on last edited by
        #21

        GuyThiebaut wrote:

        use a return statement in code which in essence is a goto.

        No, it's that other thing, calling and returning from subroutines. A totally different animal, down to the machine code of the processor.

        I have lived with several Zen masters - all of them were cats. His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.

        1 Reply Last reply
        0
        • G GuyThiebaut

          Back in 1988 when I went to university to study computer science we were taught that we were never to use goto except in one particular circumstance with COBOL. We were strictly taught structured programming and in the first year had 2 hours of computer time each week. Most of our work was done on paper. Fast forward to now and I am quite happy to use a return statement in code which in essence is a goto. I think in principle it's good to learn the rules of structured programming to know when it is ok to break those rules.

          “That which can be asserted without evidence, can be dismissed without evidence.”

          ― Christopher Hitchens

          K Offline
          K Offline
          kmoorevs
          wrote on last edited by
          #22

          GuyThiebaut wrote:

          Back in 1988

          GuyThiebaut wrote:

          the first year had 2 hours of computer time each week. Most of our work was done on paper.

          I remember those days well!...being a CS major from around '87 to '89 when my part-time afternoon job turned into full-time, which meant almost no lab time. I quit school for 10 years and finally went back and finished. During my 10 year hiatus, I had very little contact with computers so coming back to it after a decade I was more than a little pleased to find that I could finally do homework at home...even in the wee hours of the morning! :-D :-D Somewhere in a box, in a closet, are notebooks with handwritten C, Pascal, and Fortran homework assignments. I also have some greenbar printouts with notes/grade. Deliverables for an assignment were typically handwritten pseudo-code and/or flowchart and the printout which contained source code and results. That junk probably won't make the next move! :laugh: It amazes me now to think about how different it was to learn programming back then. Nowadays, an answer to a question is usually just a few clicks away, back then we relied on books, our own wits, and occasionally teachers/aides who sometimes knew little more than we did. :) Thanks for the memories! :)

          "Go forth into the source" - Neal Morse

          G 1 Reply Last reply
          0
          • R RandyBuchholz

            Quote:

            Are we asking annoying questions, just for the sake of asking?

            No, not just for the sake of asking, just for the sake of annoying. :) Also to see how many mind readers would jump on me for using them - even though I didn't say I used them. :) And don't, except in rare, low-level performance cases. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #23

            RandyBuchholz wrote:

            even though I didn't say I used them. :)

            That's not relevant to me, you're implying they may not be bad.

            RandyBuchholz wrote:

            This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

            No, it hasn't. We have simple rules for the monkeys to follow; anyone who can actually think doesn't need them. So we can't do without that faith, since some people continously ignore everything in the manual. While I agree that a single goto won't kill anyone, I also haven't seen any practical C# example where using one would be justified.

            Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

            1 Reply Last reply
            0
            • R RandyBuchholz

              Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

              M Offline
              M Offline
              Mycroft Holmes
              wrote on last edited by
              #24

              This old chestnut again :sigh: there are better constructs available with less risk of abuse. I've not used a goto in well over 20 years and am quite happy to leave it that way.

              Never underestimate the power of human stupidity RAH

              1 Reply Last reply
              0
              • R RandyBuchholz

                Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                C Offline
                C Offline
                CarelAgain
                wrote on last edited by
                #25

                'the imperative goto == the object oriented if', both have their uses and allow misuse. The degree of misuse is telling ...

                1 Reply Last reply
                0
                • K kmoorevs

                  GuyThiebaut wrote:

                  Back in 1988

                  GuyThiebaut wrote:

                  the first year had 2 hours of computer time each week. Most of our work was done on paper.

                  I remember those days well!...being a CS major from around '87 to '89 when my part-time afternoon job turned into full-time, which meant almost no lab time. I quit school for 10 years and finally went back and finished. During my 10 year hiatus, I had very little contact with computers so coming back to it after a decade I was more than a little pleased to find that I could finally do homework at home...even in the wee hours of the morning! :-D :-D Somewhere in a box, in a closet, are notebooks with handwritten C, Pascal, and Fortran homework assignments. I also have some greenbar printouts with notes/grade. Deliverables for an assignment were typically handwritten pseudo-code and/or flowchart and the printout which contained source code and results. That junk probably won't make the next move! :laugh: It amazes me now to think about how different it was to learn programming back then. Nowadays, an answer to a question is usually just a few clicks away, back then we relied on books, our own wits, and occasionally teachers/aides who sometimes knew little more than we did. :) Thanks for the memories! :)

                  "Go forth into the source" - Neal Morse

                  G Offline
                  G Offline
                  GuyThiebaut
                  wrote on last edited by
                  #26

                  Thanks for the post! I am ambivalent as to whether I would rather learn CS now or back in the 80's. Back in the 80's there was no WWW or everything that came with it(given the internet did exist with JANET being the network we had access to). In some ways I think people have it harder nowadays because there is so much more to learn. On the other hand a kid with a laptop and network connection can easily educate themselves, to the same level I was at when I graduated, before they even start their course in CS. I think we expect more of graduates nowadays than we did back in the 90's when it was a given that your first few years would be on the job training and you understood that when you graduated that you basically knew very little.

                  “That which can be asserted without evidence, can be dismissed without evidence.”

                  ― Christopher Hitchens

                  1 Reply Last reply
                  0
                  • R RandyBuchholz

                    I would say your examples are good examples of misuse, and not problems with `goto` itself. I don't use `goto` myself, except in rare cases to short-circuit a function.

                    D Offline
                    D Offline
                    den2k88
                    wrote on last edited by
                    #27

                    That's a nice spot to use goto, I have used it twice in my life precisely for that: later I ended up removing them due to a refactor that improved every aspect of those functions (performance, readability, debuggability). That said, I don't discard it out of hand as it is a powerful tool. As TNCaver said "You think goto is evil: try writing Assembly programs without JMP" (it has been in my signature for years... and I do also write Assembly code so it was really appropriate).

                    GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                    1 Reply Last reply
                    0
                    • R RandyBuchholz

                      I would say your examples are good examples of misuse, and not problems with `goto` itself. I don't use `goto` myself, except in rare cases to short-circuit a function.

                      K Offline
                      K Offline
                      KBZX5000
                      wrote on last edited by
                      #28

                      You can use goto to short-circuit time-constrained algorithms for academic or scientific purposes. Don't use it anywhere else, especially not in a professional setting, or people will be strongly compelled to gut, rape and murder your code the first chance they get. And can you really blame them for it?

                      1 Reply Last reply
                      0
                      • R RandyBuchholz

                        Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                        D Offline
                        D Offline
                        DKWatson
                        wrote on last edited by
                        #29

                        As with any instruction in any language, improper use will get you into trouble. There are some 470,000 words in Webster's dictionary. Day-to-day we typically use less than 500. The others are there just in case but that doesn't mean we have to use them. The closer to bare metal you get, the more the higher level languages simply carry too much overhead to be practical. In resource-constrained environments you don't have the luxury of being elegant. On a 32K platform you're limited to about 3-5,000 lines of (C) code, you need to be creative and shortcuts save program space. When the need arises for an assembly stub, branches and jumps (assembly level GOTOs) are a way of life. The GOTO instruction is a tool and like any tool, use it if you need it, but don't use it just because it's there. As it is said, if the only tool in your box is a hammer, you're constrained to build everything with nails, but if you need to nail something, it's useful (not necessary) to have a hammer.

                        1 Reply Last reply
                        0
                        • D den2k88

                          It creates functions which are strictly monolithic. It's not bad but it create impediments in further expansions or refactorizations of the function that uses it. Goto to code outside the function containing it is problematic for the compilers, breaks modularity in C code as much as global variables do, and is completely undoable in OOP due to context changes. All in all it may be a good solution but ultimately not worth the delayed troubles if not under very constrained circumstances.

                          GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                          P Offline
                          P Offline
                          Plamen Dragiyski
                          wrote on last edited by
                          #30

                          den2k88 wrote:

                          breaks modularity in C code

                          That is true for C, but not so much for C++. goto is context dependent in C++, it will call appropriate constructors/destructors. When used in local context it will not make the function/method monolithic. So if goto is so bad, you might be using a badly outdated language?

                          D 1 Reply Last reply
                          0
                          • P Plamen Dragiyski

                            den2k88 wrote:

                            breaks modularity in C code

                            That is true for C, but not so much for C++. goto is context dependent in C++, it will call appropriate constructors/destructors. When used in local context it will not make the function/method monolithic. So if goto is so bad, you might be using a badly outdated language?

                            D Offline
                            D Offline
                            den2k88
                            wrote on last edited by
                            #31

                            Plamen Dragiyski wrote:

                            goto is context dependent in C++, it will call appropriate constructors/destructors.

                            Which is an Access Violation waiting to happen when the code changes.

                            Plamen Dragiyski wrote:

                            So if goto is so bad, you might be using a badly outdated language?

                            And that would be?

                            GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                            P J 2 Replies Last reply
                            0
                            • R RandyBuchholz

                              Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                              S Offline
                              S Offline
                              soulesurfer
                              wrote on last edited by
                              #32

                              This question has received lots of humorous responses, now for a slightly more serious one ;) Yes, we used to use gotos a lot in the old days (and I'm actually old enough to say that :)). But my feeling now is that any language where I ever feel the need to use a goto is a flawed language. But seriously, the original "Go To Considered Harmful" [https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf\] was a brilliant step in providing discipline to coding to narrow the gap between algorithm design and implementation. A main idea being that gotos break the provability of correctness. Anybody can tell you that extensive use of gotos was involved in large numbers of defects (thus quite costly). One other point I'd like to make is that gotos can interfere with optimizers.

                              1 Reply Last reply
                              0
                              • D den2k88

                                Plamen Dragiyski wrote:

                                goto is context dependent in C++, it will call appropriate constructors/destructors.

                                Which is an Access Violation waiting to happen when the code changes.

                                Plamen Dragiyski wrote:

                                So if goto is so bad, you might be using a badly outdated language?

                                And that would be?

                                GCS d-- s-/++ a- C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X

                                P Offline
                                P Offline
                                Plamen Dragiyski
                                wrote on last edited by
                                #33

                                den2k88 wrote:

                                Which is an Access Violation waiting to happen when the code changes.

                                How? If jumping outside block can causes access violation, then every "}" is potential access violation. If you talk about inter-scope goto, that's is entirely different story. You can do that in C using signals. What will be the state in C++ after such goto it is indeed unknown, so that's one possible misuse of goto. But if all affected variables are on the stack (and in C++ they should be - all pointer should be wrapped into appropriate *_ptr object allocated on the stack), jumping outside of scope is completely safe. Jumping inside non-conditional scopes is also safe. Jumping inside anything else is a bad idea. Jumping outside scope, can be realized by do-while wrapping:

                                do {
                                // ... you can use break here
                                } while(false);

                                But it cannot be used inside loop/switch statement and it is utterly more ugly than goto.

                                1 Reply Last reply
                                0
                                • R RandyBuchholz

                                  Quote:

                                  Are we asking annoying questions, just for the sake of asking?

                                  No, not just for the sake of asking, just for the sake of annoying. :) Also to see how many mind readers would jump on me for using them - even though I didn't say I used them. :) And don't, except in rare, low-level performance cases. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                                  E Offline
                                  E Offline
                                  englebart
                                  wrote on last edited by
                                  #34

                                  Add this info on your original post.

                                  1 Reply Last reply
                                  0
                                  • R RandyBuchholz

                                    Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                                    E Offline
                                    E Offline
                                    englebart
                                    wrote on last edited by
                                    #35

                                    Java replaced goto with labeled break and continue. They kept goto as a reserved keyword that you cannot use. I wish C# had followed that model, but I suspect MS decided it was safer to follow C++ (which followed C) for legal reasons. (lawyers designing coding languages!) C++ made some uses of goto illegal that were allowed in C due to constructor/destructor scope constraints.

                                    1 Reply Last reply
                                    0
                                    • R RandyBuchholz

                                      Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                                      B Offline
                                      B Offline
                                      bleahy48
                                      wrote on last edited by
                                      #36

                                      Edsger Dijkstra (March 1968). "Go To Statement Considered Harmful". Communications of the ACM (PDF). 11 (3): 147–148. doi:10.1145/362929.362947. The unbridled use of the go to statement has as an immediate consequence that it becomes terribly hard to find a meaningful set of coordinates in which to describe the process progress. ... The go to statement as it stands is just too primitive, it is too much an invitation to make a mess of one's program.

                                      1 Reply Last reply
                                      0
                                      • R RandyBuchholz

                                        Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                                        O Offline
                                        O Offline
                                        obermd
                                        wrote on last edited by
                                        #37

                                        The problem with goto is it makes it trivially easy to write spaghetti code. It is also the one of few jump methods available to a computer, so once you get down to the hardware goto (jmp) can be found nearly everywhere. On the other hand, you can write spaghetti code in any language, even those without goto, simply by not factoring any control structures properly.

                                        1 Reply Last reply
                                        0
                                        • R RandyBuchholz

                                          Mention "goto" to many programmers and they'll say, "Never use them, they lead to spaghetti code." It's a conditioned response. It seems to be a definition - "Dad, what's for dinner?" - "We're having `goto`." - "Again?". Ask them to explain why it is so bad, and you'll likely get a blank stare, or they just chant "spaghetti, spaghetti, …" Of course, a misused `goto` can lead to spaghetti code, but a (misused) [`any reserved word`] can lead to [`some bad thing`]. Have we developed an irrational fear of `goto` born out of ancient coding dogma? Or is `goto` inherently and absolutely evil? :) Update: As suggested by englebart, I'm adding why I asked this question. It came out of a recent discussion. I was reviewing some code someone showed me (they didn't write it) that had a `goto` in it. He said the code was Spaghetti Code. When I asked why, he said because it had a `goto`. I asked why that made it spaghetti, and all he could come up with was that he was taught that. I asked about a few other "programming truths", and had much the same response. This is good, that is bad, but I don't really know why. I started thinking about how for some things, aspects of programming have become more faith than science.

                                          U Offline
                                          U Offline
                                          User 13612524
                                          wrote on last edited by
                                          #38

                                          goto overuse makes it very difficult to understand and debug a program. There are legitmate uses of goto, such as breaking out of a loop, but in those cases I would just use the keywords that do the same thing for clarity. I had the joy to try and debug someone's code that was riddled with gotos. He also had the nasty habit of making functions several hundred lines long. I ended up just rewriting everything he wrote. I still feel that was the correct decision, and it only took me a couple days.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups