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. Other Discussions
  3. The Weird and The Wonderful
  4. Enums are for wimps

Enums are for wimps

Scheduled Pinned Locked Moved The Weird and The Wonderful
tutorial
15 Posts 12 Posters 0 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.
  • B Bernhard Hiller

    Once upon a time, the concept of enumeration had not yet been invented. Instead, you had to use long lists of const definitions mapping some name to some int. So I found a colleague writing code like:

    private int DecodeElementType(string elementName)
    {
    switch (elementName)
    {
    case "Blah": return 1;
    case "Blub": return 2;
    case "Hmpf": return 3;
    case "Grml": return 4;
    case "Tralala": return 5;
    default: return 0; // unknown
    }
    }

    I asked him if he knew what an enum is, and how to use Enum.Parse / Enum.TryParse. He said he knew that. But his code is superior...

    P Offline
    P Offline
    Pete OHanlon
    wrote on last edited by
    #2

    Sooooo, when I pass in TRalala to his code, it's still going to be superior. :rolleyes:

    This space for rent

    B 1 Reply Last reply
    0
    • B Bernhard Hiller

      Once upon a time, the concept of enumeration had not yet been invented. Instead, you had to use long lists of const definitions mapping some name to some int. So I found a colleague writing code like:

      private int DecodeElementType(string elementName)
      {
      switch (elementName)
      {
      case "Blah": return 1;
      case "Blub": return 2;
      case "Hmpf": return 3;
      case "Grml": return 4;
      case "Tralala": return 5;
      default: return 0; // unknown
      }
      }

      I asked him if he knew what an enum is, and how to use Enum.Parse / Enum.TryParse. He said he knew that. But his code is superior...

      D Offline
      D Offline
      David ONeil
      wrote on last edited by
      #3

      Bernhard Hiller wrote:

      But his code is superior...

      Oh. You are talking about the case that returns '3'. Properly formatted for optimal parsing: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

      D 1 Reply Last reply
      0
      • D David ONeil

        Bernhard Hiller wrote:

        But his code is superior...

        Oh. You are talking about the case that returns '3'. Properly formatted for optimal parsing: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :^) :^) :^) :^) :^) :^) :^) :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

        D Offline
        D Offline
        Daniel Pfeffer
        wrote on last edited by
        #4

        Please use some other display method. As an engineer, I am "expression-blind" :sigh: (see [Engineers are cold and dead inside](https://www.codeproject.com/Messages/5364557/Engineers-are-cold-and-dead-inside.aspx))

        If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

        D 1 Reply Last reply
        0
        • B Bernhard Hiller

          Once upon a time, the concept of enumeration had not yet been invented. Instead, you had to use long lists of const definitions mapping some name to some int. So I found a colleague writing code like:

          private int DecodeElementType(string elementName)
          {
          switch (elementName)
          {
          case "Blah": return 1;
          case "Blub": return 2;
          case "Hmpf": return 3;
          case "Grml": return 4;
          case "Tralala": return 5;
          default: return 0; // unknown
          }
          }

          I asked him if he knew what an enum is, and how to use Enum.Parse / Enum.TryParse. He said he knew that. But his code is superior...

          P Offline
          P Offline
          PeejayAdams
          wrote on last edited by
          #5

          Bernhard Hiller wrote:

          He said he knew that.

          If I were a betting man (and I am), I would wager my house that he did not know that.

          Slogans aren't solutions.

          1 Reply Last reply
          0
          • B Bernhard Hiller

            Once upon a time, the concept of enumeration had not yet been invented. Instead, you had to use long lists of const definitions mapping some name to some int. So I found a colleague writing code like:

            private int DecodeElementType(string elementName)
            {
            switch (elementName)
            {
            case "Blah": return 1;
            case "Blub": return 2;
            case "Hmpf": return 3;
            case "Grml": return 4;
            case "Tralala": return 5;
            default: return 0; // unknown
            }
            }

            I asked him if he knew what an enum is, and how to use Enum.Parse / Enum.TryParse. He said he knew that. But his code is superior...

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

            Implicit enums are ever worse.

            public enum Implicit
            AA_0
            BB_1
            CC_2
            DD_3
            EE_4
            GG_6
            HH_22
            II_7
            LL_17
            ...
            end enum

            Guess what value did HH_22 have? And GG_6? BTW the numbers in the end are useful since this enum maps fixed alarm codes that come from a PLC. The only reason the code worked was because the same creator of this enum didn't use its values but used magic numbers all over the code. Half a day hunting for a bug because alarm 31 never matched with '== XX_31'. XX_31 equalled 30.

            * CALL APOGEE, SAY AARDWOLF * 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 * Never pay more than 20 bucks for a computer game. * I'm a puny punmaker.

            J 1 Reply Last reply
            0
            • D Daniel Pfeffer

              Please use some other display method. As an engineer, I am "expression-blind" :sigh: (see [Engineers are cold and dead inside](https://www.codeproject.com/Messages/5364557/Engineers-are-cold-and-dead-inside.aspx))

              If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack. --Winston Churchill

              D Offline
              D Offline
              David ONeil
              wrote on last edited by
              #7

              :laugh:

              Sudden Sun Death Syndrome (SSDS) is a very real concern which we should be raising awareness of. 156 billion suns die every year before they're just 1 billion years old. While the military are doing their part, it simply isn't enough to make the amount of nukes needed to save those poor stars. - TWI2T3D (Reddit)

              1 Reply Last reply
              0
              • D den2k88

                Implicit enums are ever worse.

                public enum Implicit
                AA_0
                BB_1
                CC_2
                DD_3
                EE_4
                GG_6
                HH_22
                II_7
                LL_17
                ...
                end enum

                Guess what value did HH_22 have? And GG_6? BTW the numbers in the end are useful since this enum maps fixed alarm codes that come from a PLC. The only reason the code worked was because the same creator of this enum didn't use its values but used magic numbers all over the code. Half a day hunting for a bug because alarm 31 never matched with '== XX_31'. XX_31 equalled 30.

                * CALL APOGEE, SAY AARDWOLF * 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 * Never pay more than 20 bucks for a computer game. * I'm a puny punmaker.

                J Offline
                J Offline
                Jon McKee
                wrote on last edited by
                #8

                Sounds like a case of the wrong tool for the job. Implicit enums are great for representing a fixed set of ideas/behavior (like flags) that isn't mapped to specific values. If you need a fixed set mapped to specific values use explicit enums :doh:

                D 1 Reply Last reply
                0
                • J Jon McKee

                  Sounds like a case of the wrong tool for the job. Implicit enums are great for representing a fixed set of ideas/behavior (like flags) that isn't mapped to specific values. If you need a fixed set mapped to specific values use explicit enums :doh:

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

                  Precisely. Even if I'm used to always explicit the enums - mainly because I work with a system that has a lot of marshalling and communications between different paradigms so more often than not I end up having to fix those values sooner or later.

                  * CALL APOGEE, SAY AARDWOLF * 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 * Never pay more than 20 bucks for a computer game. * I'm a puny punmaker.

                  1 Reply Last reply
                  0
                  • P Pete OHanlon

                    Sooooo, when I pass in TRalala to his code, it's still going to be superior. :rolleyes:

                    This space for rent

                    B Offline
                    B Offline
                    Bruce Patin
                    wrote on last edited by
                    #10

                    You're going to get 0, unless you mean "Tralala".

                    1 Reply Last reply
                    0
                    • B Bernhard Hiller

                      Once upon a time, the concept of enumeration had not yet been invented. Instead, you had to use long lists of const definitions mapping some name to some int. So I found a colleague writing code like:

                      private int DecodeElementType(string elementName)
                      {
                      switch (elementName)
                      {
                      case "Blah": return 1;
                      case "Blub": return 2;
                      case "Hmpf": return 3;
                      case "Grml": return 4;
                      case "Tralala": return 5;
                      default: return 0; // unknown
                      }
                      }

                      I asked him if he knew what an enum is, and how to use Enum.Parse / Enum.TryParse. He said he knew that. But his code is superior...

                      L Offline
                      L Offline
                      Leng Vang
                      wrote on last edited by
                      #11

                      My guess, he didn't know. Self-tough programming. What so superior about coding manually. The point of using enumeration is to allow the compiler to check for potential human errors. Tell him to go back to school.

                      L 1 Reply Last reply
                      0
                      • L Leng Vang

                        My guess, he didn't know. Self-tough programming. What so superior about coding manually. The point of using enumeration is to allow the compiler to check for potential human errors. Tell him to go back to school.

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

                        I'd guess he did learn to code in school. Meaning he had coding courses, learned nothing (as usual, because those courses invariable suck), and then assumed he would not need learn any further.

                        1 Reply Last reply
                        0
                        • B Bernhard Hiller

                          Once upon a time, the concept of enumeration had not yet been invented. Instead, you had to use long lists of const definitions mapping some name to some int. So I found a colleague writing code like:

                          private int DecodeElementType(string elementName)
                          {
                          switch (elementName)
                          {
                          case "Blah": return 1;
                          case "Blub": return 2;
                          case "Hmpf": return 3;
                          case "Grml": return 4;
                          case "Tralala": return 5;
                          default: return 0; // unknown
                          }
                          }

                          I asked him if he knew what an enum is, and how to use Enum.Parse / Enum.TryParse. He said he knew that. But his code is superior...

                          M Offline
                          M Offline
                          Munchies_Matt
                          wrote on last edited by
                          #13

                          Whats the language that can use a string in a switch statement?

                          B 1 Reply Last reply
                          0
                          • M Munchies_Matt

                            Whats the language that can use a string in a switch statement?

                            B Offline
                            B Offline
                            Brisingr Aerowing
                            wrote on last edited by
                            #14

                            I think the snippet is in C#, which does allow that.

                            What do you get when you cross a joke with a rhetorical question? The metaphorical solid rear-end expulsions have impacted the metaphorical motorized bladed rotating air movement mechanism. Do questions with multiple question marks annoy you???

                            M 1 Reply Last reply
                            0
                            • B Brisingr Aerowing

                              I think the snippet is in C#, which does allow that.

                              What do you get when you cross a joke with a rhetorical question? The metaphorical solid rear-end expulsions have impacted the metaphorical motorized bladed rotating air movement mechanism. Do questions with multiple question marks annoy you???

                              M Offline
                              M Offline
                              Munchies_Matt
                              wrote on last edited by
                              #15

                              OK, makes sense. C++ allows for a lot of this kind of thing through operator overloading, though I tend to be a pure C programmer, and I like the level of clunky direct control you have of the code with C. :)

                              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