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 6 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.

    M Offline
    M Offline
    Martijn Smitshoek
    wrote on last edited by
    #41

    I rarely use "goto", but when I do it is usually: - to "break" twice out of some construct. (goto just_past_outer_loop) - (C) to implement an error handling construct with a clean exit, that jumps to a dedicated piece of rollback code, like

    result = criticalaction1();
    if (!result) goto error_exit;
    result = criticalaction2();
    if (!result) goto rollback_action1;
    return SUCCESS;

    rollback_action1:
    undoaction1()
    error_exit:
    return FAILURE;

    "spaghetti code" is a lazy, pseudocritical kind of comment. I hate it with a passion. If a Pavlov response is the only thing you're capable of, you should pick another job. I'm serious.

    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.

      T Offline
      T Offline
      TNCaver
      wrote on last edited by
      #42

      My sig line says it all.

      If you think 'goto' is evil, try writing an Assembly program without JMP.

      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.

        A Offline
        A Offline
        AnotherKen
        wrote on last edited by
        #43

        I used basic in the past and for that language GOTO was very convenient for establishing looping and simple procedural content. The reason many teachers discourage it's use is that it can very easily lead to the development of spaghetti code. That said, the presence of a GOTO statement should not be seen as an automatic sign of spaghetti code. GOTO can be used to produce good code that is in no way likely to be judged negatively by a true computer scientist (at least on that basis, alone).

        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.

          J Offline
          J Offline
          jschell
          wrote on last edited by
          #44

          RandyBuchholz wrote:

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

          Ask anyone any of the following - Which is better Windows or Linux - Which is better C#, Python, Java or C++ - Which is better Relational databases or NoSQL databases - Which is better micro-services or traditional server based solutions. - Which is better Waterfall or Agile. - Ask them if they write maintainable and readable code. And of course then follow up with asking them to specify exactly what objective measurements they took to validate their response. Or even ask them how they would objectively measure it if they had the time and money.

          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

            J Offline
            J Offline
            jschell
            wrote on last edited by
            #45

            den2k88 wrote:

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

            And you are claiming that cannot happen without gotos? Or if those others occur they can only occur when another feature of the language is used correctly?

            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