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 Insider News
  4. Why you should never use a boolean field (use an Enum instead)

Why you should never use a boolean field (use an Enum instead)

Scheduled Pinned Locked Moved The Insider News
csharpdatabase
25 Posts 11 Posters 1 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.
  • T Offline
    T Offline
    Terrence Dorsey
    wrote on last edited by
    #1

    CodeClimber[^]:

    When I tweeted about this while I was refactoring, someone told me: “Using a boolean is an antipattern”… well… now I experienced it myself. From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases.

    State management is not ideal for a boolean value, but booleans have value.

    C P P L R 6 Replies Last reply
    0
    • T Terrence Dorsey

      CodeClimber[^]:

      When I tweeted about this while I was refactoring, someone told me: “Using a boolean is an antipattern”… well… now I experienced it myself. From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases.

      State management is not ideal for a boolean value, but booleans have value.

      C Offline
      C Offline
      Clifford Nelson
      wrote on last edited by
      #2

      Have to say this is a good point. However there are times where boolean field works great. However, if you are dealing with states, then can always end up with more than 2. I have had cases in the past where that became the case. There is also the advantage of enums in that the name is more descriptive than just yes/no.

      K 1 Reply Last reply
      0
      • C Clifford Nelson

        Have to say this is a good point. However there are times where boolean field works great. However, if you are dealing with states, then can always end up with more than 2. I have had cases in the past where that became the case. There is also the advantage of enums in that the name is more descriptive than just yes/no.

        K Offline
        K Offline
        Kevin Marois
        wrote on last edited by
        #3

        I disagree. The problem he described in the article is not the choice of data type to use, but rather simply a lack of requirements analysis.

        If it's not broken, fix it until it is

        B C 2 Replies Last reply
        0
        • T Terrence Dorsey

          CodeClimber[^]:

          When I tweeted about this while I was refactoring, someone told me: “Using a boolean is an antipattern”… well… now I experienced it myself. From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases.

          State management is not ideal for a boolean value, but booleans have value.

          P Offline
          P Offline
          peterchen
          wrote on last edited by
          #4

          Oh. My. God. He should better use a string, so he can put anything into it! Or, if he doesn't like refactoring, think abotu the problem first.

          ORDER BY what user wants

          L 1 Reply Last reply
          0
          • K Kevin Marois

            I disagree. The problem he described in the article is not the choice of data type to use, but rather simply a lack of requirements analysis.

            If it's not broken, fix it until it is

            B Offline
            B Offline
            Brendan Costigan
            wrote on last edited by
            #5

            Requirements always change ... and change in the one place you didn't allow for!

            All round good guy.

            1 Reply Last reply
            0
            • P peterchen

              Oh. My. God. He should better use a string, so he can put anything into it! Or, if he doesn't like refactoring, think abotu the problem first.

              ORDER BY what user wants

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

              I think a binary field holding a .gif that describes the state of the record would allow for more flexibility. You could encode additional information in the image itself. In fact, for a single record I don't know why all the information couldn't be contained on a single piece of paper. I think I just talked myself back into the 1950's.

              1 Reply Last reply
              0
              • T Terrence Dorsey

                CodeClimber[^]:

                When I tweeted about this while I was refactoring, someone told me: “Using a boolean is an antipattern”… well… now I experienced it myself. From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases.

                State management is not ideal for a boolean value, but booleans have value.

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

                I have seen the light. I have been wrong, all this time. From now on, all the code I write is going to contain this enumeration:

                public enum LogicalStatus
                {
                True,
                False
                }

                Now, all my code will be beautiful. I am assured that I will be able to ascend to a higher level of consciousness now.

                *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                M W 3 Replies Last reply
                0
                • T Terrence Dorsey

                  CodeClimber[^]:

                  When I tweeted about this while I was refactoring, someone told me: “Using a boolean is an antipattern”… well… now I experienced it myself. From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases.

                  State management is not ideal for a boolean value, but booleans have value.

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

                  Yea.. no. Preemptively using an enum is a good example of YAGNI.

                  1 Reply Last reply
                  0
                  • T Terrence Dorsey

                    CodeClimber[^]:

                    When I tweeted about this while I was refactoring, someone told me: “Using a boolean is an antipattern”… well… now I experienced it myself. From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases.

                    State management is not ideal for a boolean value, but booleans have value.

                    R Offline
                    R Offline
                    R Giskard Reventlov
                    wrote on last edited by
                    #9

                    Terrence Dorsey wrote:

                    Using a boolean is an antipattern

                    It's only an anti-pattern if you cocked up the design stage and didn't think it through properly.

                    Terrence Dorsey wrote:

                    From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum

                    Seriously? You committed that statement to a blog post that will haunt you for the rest of your career? Using a boolean is not an anti-pattern unless it was the wrong choice in the first place.

                    "If you think it's expensive to hire a professional to do the job, wait until you hire an amateur." Red Adair. nils illegitimus carborundum me, me, me

                    1 Reply Last reply
                    0
                    • K Kevin Marois

                      I disagree. The problem he described in the article is not the choice of data type to use, but rather simply a lack of requirements analysis.

                      If it's not broken, fix it until it is

                      C Offline
                      C Offline
                      crazedDotNetDev
                      wrote on last edited by
                      #10

                      Absolutely… use the right tool for the right job.

                      1 Reply Last reply
                      0
                      • T Terrence Dorsey

                        CodeClimber[^]:

                        When I tweeted about this while I was refactoring, someone told me: “Using a boolean is an antipattern”… well… now I experienced it myself. From this experience, in the future, I’ll never use a Boolean field again, and always start with an Enum, especially with a Document database where migrating data is a bit more complex than with relational databases.

                        State management is not ideal for a boolean value, but booleans have value.

                        M Offline
                        M Offline
                        Marc Clifton
                        wrote on last edited by
                        #11

                        The problem here is with this: I needed to keep track of whether someone has paid or not, so I started modeling that field as a simple boolean value, HasPaid. He should have realized from the get-go, by simply thinking of use-cases in his head, that a boolean would not be appropriate. But so often, I find that people don't think of use-cases as their coding, and then they blame someone / something else for the eventual problem that they get into. And hence we have refactoring, which is another word for "Doh!" The problem isn't with booleans, it's with the programmer! Marc

                        Reverse Engineering Legacy Applications
                        How To Think Like a Functional Programmer
                        My Blog
                        Computational Types in C# and F#

                        1 Reply Last reply
                        0
                        • P Pete OHanlon

                          I have seen the light. I have been wrong, all this time. From now on, all the code I write is going to contain this enumeration:

                          public enum LogicalStatus
                          {
                          True,
                          False
                          }

                          Now, all my code will be beautiful. I am assured that I will be able to ascend to a higher level of consciousness now.

                          *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                          "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                          CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                          M Offline
                          M Offline
                          Marc Clifton
                          wrote on last edited by
                          #12

                          Pete O'Hanlon wrote:

                          Now, all my code will be beautiful.

                          And I will know who to blame when I see this in some code sometime in the future. "Oh, I read this on the Code Project by a reputable member and have been programming like this ever since. In fact, I've extended the pattern:

                          public enum Integers
                          {
                          One,
                          Two,
                          Three,
                          Four,
                          }

                          but for some strange reason, I have to keep adding new Integers! Plz Help. Urgentz!" ;) Marc

                          Reverse Engineering Legacy Applications
                          How To Think Like a Functional Programmer
                          My Blog
                          Computational Types in C# and F#

                          P 1 Reply Last reply
                          0
                          • M Marc Clifton

                            Pete O'Hanlon wrote:

                            Now, all my code will be beautiful.

                            And I will know who to blame when I see this in some code sometime in the future. "Oh, I read this on the Code Project by a reputable member and have been programming like this ever since. In fact, I've extended the pattern:

                            public enum Integers
                            {
                            One,
                            Two,
                            Three,
                            Four,
                            }

                            but for some strange reason, I have to keep adding new Integers! Plz Help. Urgentz!" ;) Marc

                            Reverse Engineering Legacy Applications
                            How To Think Like a Functional Programmer
                            My Blog
                            Computational Types in C# and F#

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

                            You fool. You've prematurely optimized. Don't you know that you should be using the Visitor pattern here, possibly combined with DI to inject new numbers as and when you see fit? Of course, I expect to see a full implementation for Doubles and Floats while you are at it (and just to be on the safe side, I think you need to represent all possible combinations of strings).

                            *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                            "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                            CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                            W 1 Reply Last reply
                            0
                            • P Pete OHanlon

                              I have seen the light. I have been wrong, all this time. From now on, all the code I write is going to contain this enumeration:

                              public enum LogicalStatus
                              {
                              True,
                              False
                              }

                              Now, all my code will be beautiful. I am assured that I will be able to ascend to a higher level of consciousness now.

                              *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                              "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                              CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                              W Offline
                              W Offline
                              wout de zeeuw
                              wrote on last edited by
                              #14

                              FTFY:

                              [Flags]
                              public enum LogicalStatus : byte {
                              False = 0,
                              True = 1
                              }

                              Wout

                              1 Reply Last reply
                              0
                              • P Pete OHanlon

                                You fool. You've prematurely optimized. Don't you know that you should be using the Visitor pattern here, possibly combined with DI to inject new numbers as and when you see fit? Of course, I expect to see a full implementation for Doubles and Floats while you are at it (and just to be on the safe side, I think you need to represent all possible combinations of strings).

                                *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                                "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                                CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                                W Offline
                                W Offline
                                wout de zeeuw
                                wrote on last edited by
                                #15

                                And add a snuff of IoC, so you can switch it out at runtime with some 3rd party library providing the implementation!

                                Wout

                                1 Reply Last reply
                                0
                                • P Pete OHanlon

                                  I have seen the light. I have been wrong, all this time. From now on, all the code I write is going to contain this enumeration:

                                  public enum LogicalStatus
                                  {
                                  True,
                                  False
                                  }

                                  Now, all my code will be beautiful. I am assured that I will be able to ascend to a higher level of consciousness now.

                                  *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                                  "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                                  CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                                  M Offline
                                  M Offline
                                  Marc Clifton
                                  wrote on last edited by
                                  #16

                                  Hey Pete, I was wanting to poke around CodeStash, but I'm getting: "Google Chrome could not connect to www.codestash.co.uk" Is the site still up? Marc

                                  Reverse Engineering Legacy Applications
                                  How To Think Like a Functional Programmer
                                  My Blog
                                  Computational Types in C# and F#

                                  P 1 Reply Last reply
                                  0
                                  • M Marc Clifton

                                    Hey Pete, I was wanting to poke around CodeStash, but I'm getting: "Google Chrome could not connect to www.codestash.co.uk" Is the site still up? Marc

                                    Reverse Engineering Legacy Applications
                                    How To Think Like a Functional Programmer
                                    My Blog
                                    Computational Types in C# and F#

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

                                    Hi Marc, I've just had to ask the CodeProject team to restart the server as it's hosted on their servers. Regards Pete

                                    *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                                    "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                                    CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                                    M 1 Reply Last reply
                                    0
                                    • P Pete OHanlon

                                      Hi Marc, I've just had to ask the CodeProject team to restart the server as it's hosted on their servers. Regards Pete

                                      *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                                      "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                                      CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                                      M Offline
                                      M Offline
                                      Marc Clifton
                                      wrote on last edited by
                                      #18

                                      Pete O'Hanlon wrote:

                                      I've just had to ask the CodeProject team to restart the server as it's hosted on their servers.

                                      Hmmm, it's still not responding. I guess the hamsters are on vacation. Marc

                                      Reverse Engineering Legacy Applications
                                      How To Think Like a Functional Programmer
                                      My Blog
                                      Computational Types in C# and F#

                                      P 1 Reply Last reply
                                      0
                                      • M Marc Clifton

                                        Pete O'Hanlon wrote:

                                        I've just had to ask the CodeProject team to restart the server as it's hosted on their servers.

                                        Hmmm, it's still not responding. I guess the hamsters are on vacation. Marc

                                        Reverse Engineering Legacy Applications
                                        How To Think Like a Functional Programmer
                                        My Blog
                                        Computational Types in C# and F#

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

                                        It's back Marc. Turns out that the server had been switched between Amazon instances and the DS settings hadn't been updated to point to the new instance. I'm putting monitoring in place to warn me if this happens again in the future.

                                        *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                                        "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                                        CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                                        M 1 Reply Last reply
                                        0
                                        • P Pete OHanlon

                                          It's back Marc. Turns out that the server had been switched between Amazon instances and the DS settings hadn't been updated to point to the new instance. I'm putting monitoring in place to warn me if this happens again in the future.

                                          *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                                          "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                                          CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

                                          M Offline
                                          M Offline
                                          Marc Clifton
                                          wrote on last edited by
                                          #20

                                          Pete O'Hanlon wrote:

                                          It's back Marc.

                                          Thanks! One of the reasons I wanted to poke around the site was because I have another hair-brained idea that applications should consist of small, either re-usable or custom code blocks that are wired together with a tool like Visio. Ultimately I envision something that is a mix between what that website, code bubbles, does, and something like lego-building blocks where you can visually wire up the data flow and events. The actual granularity would be completely flexible, and I imagine larger scale building blocks for handling things like ORM's, etc. I'm still looking for a decent visualization tool, similar to Visio. Sacha's rework of the WPF layout tool looks like a very good starting point. So I wanted to see what people had contributed for snippets to 1) see if you were already doing some of this with CodeStash and 2) to see what people were contributing. Argh. I need time!!! Marc

                                          Reverse Engineering Legacy Applications
                                          How To Think Like a Functional Programmer
                                          My Blog
                                          Computational Types in C# and F#

                                          P 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