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. General Programming
  3. C#
  4. A matter of style : Switch or ?: [modified]

A matter of style : Switch or ?: [modified]

Scheduled Pinned Locked Moved C#
javascriptperformancequestion
16 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.
  • M mgkr

    Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

    int i;

    switch (ID) {
    case "a":
    i = 1;
    break;
    case "b":
    i= 2;
    break;
    case "c":
    i = 3;
    break;
    default:
    i = 0;
    break;
    }

    B:

    int i;

    i = ID == "a" ? 1 :
    ID == "b" ? 2 :
    ID == "c" ? 3 :
    0;

    What would you use (and why)?

    modified on Tuesday, October 20, 2009 6:46 AM

    J Offline
    J Offline
    Jacobb Michael
    wrote on last edited by
    #6

    Hi, if it is just one matching you can go with approach 'B' otherwise i will prefer the First Approach 'A' because the Second Type has to be parsed as first and process. and Even if it is more than 2 matching it is not good practice to use 'B' because it is not much readable and understandable.and for each case we can make a comment(purpose) in 'A', But it is not suitable for 'B' but anyway it depends on the place where use, and the situation where you use,and even the appearance where you use thanks

    1 Reply Last reply
    0
    • M mgkr

      Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

      int i;

      switch (ID) {
      case "a":
      i = 1;
      break;
      case "b":
      i= 2;
      break;
      case "c":
      i = 3;
      break;
      default:
      i = 0;
      break;
      }

      B:

      int i;

      i = ID == "a" ? 1 :
      ID == "b" ? 2 :
      ID == "c" ? 3 :
      0;

      What would you use (and why)?

      modified on Tuesday, October 20, 2009 6:46 AM

      N Offline
      N Offline
      nagendrathecoder
      wrote on last edited by
      #7

      I'll go for Switch because its easy to track errors in that.

      1 Reply Last reply
      0
      • M mgkr

        Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

        int i;

        switch (ID) {
        case "a":
        i = 1;
        break;
        case "b":
        i= 2;
        break;
        case "c":
        i = 3;
        break;
        default:
        i = 0;
        break;
        }

        B:

        int i;

        i = ID == "a" ? 1 :
        ID == "b" ? 2 :
        ID == "c" ? 3 :
        0;

        What would you use (and why)?

        modified on Tuesday, October 20, 2009 6:46 AM

        M Offline
        M Offline
        mgkr
        wrote on last edited by
        #8

        @OriginalGriff Fixed the switch for ya ;P clarity and readability are much more important than saving space on screen. Agreed 100% Which is why I posted - As the ?: was/is very clear to me, and I can at a glance understand what's going on, but I'm well aware it's not a construct used that/as often, so wanted to test the waters with other coders. -debugging nested ternary's is an absolute nightmare -I'll go for Switch because its easy to track errors in that. Good point As this is a *very* simple case I didn't even think of that actually. But it might need to get more complicated as the code evolves. Where I'm using it, it's not very likely though - But those are "famous last words", so point taken and agreed to. -- Thank you all for the feed back - I'll tidy up my code now :cool:

        1 Reply Last reply
        0
        • M mgkr

          Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

          int i;

          switch (ID) {
          case "a":
          i = 1;
          break;
          case "b":
          i= 2;
          break;
          case "c":
          i = 3;
          break;
          default:
          i = 0;
          break;
          }

          B:

          int i;

          i = ID == "a" ? 1 :
          ID == "b" ? 2 :
          ID == "c" ? 3 :
          0;

          What would you use (and why)?

          modified on Tuesday, October 20, 2009 6:46 AM

          N Offline
          N Offline
          N a v a n e e t h
          wrote on last edited by
          #9

          As others said switch is more readable in this case. Also when switch has more labels, compilers use a lookup table (probably hash tables) to implement that and it will yield in accessing all the labels in constant time. :)

          Best wishes, Navaneeth

          1 Reply Last reply
          0
          • M mgkr

            Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

            int i;

            switch (ID) {
            case "a":
            i = 1;
            break;
            case "b":
            i= 2;
            break;
            case "c":
            i = 3;
            break;
            default:
            i = 0;
            break;
            }

            B:

            int i;

            i = ID == "a" ? 1 :
            ID == "b" ? 2 :
            ID == "c" ? 3 :
            0;

            What would you use (and why)?

            modified on Tuesday, October 20, 2009 6:46 AM

            K Offline
            K Offline
            Keith Barrow
            wrote on last edited by
            #10

            The swtich statement is more readable here, but I think in general swtiches give of a bad code smell:clickety[^] Especially if they are large or used repeatedly.

            CCC solved so far: 2 (including a Hard One!)

            P 1 Reply Last reply
            0
            • M mgkr

              Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

              int i;

              switch (ID) {
              case "a":
              i = 1;
              break;
              case "b":
              i= 2;
              break;
              case "c":
              i = 3;
              break;
              default:
              i = 0;
              break;
              }

              B:

              int i;

              i = ID == "a" ? 1 :
              ID == "b" ? 2 :
              ID == "c" ? 3 :
              0;

              What would you use (and why)?

              modified on Tuesday, October 20, 2009 6:46 AM

              N Offline
              N Offline
              Nisha Agrawal
              wrote on last edited by
              #11

              It's not the matter of readability, infact i'll use switch due to performance gain over multiple if-else statements. There is detailed description of this thought here. http://www.ozcandegirmenci.com/post/2008/05/Switch-vs-If.aspx[^]

              P 1 Reply Last reply
              0
              • M mgkr

                Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

                int i;

                switch (ID) {
                case "a":
                i = 1;
                break;
                case "b":
                i= 2;
                break;
                case "c":
                i = 3;
                break;
                default:
                i = 0;
                break;
                }

                B:

                int i;

                i = ID == "a" ? 1 :
                ID == "b" ? 2 :
                ID == "c" ? 3 :
                0;

                What would you use (and why)?

                modified on Tuesday, October 20, 2009 6:46 AM

                L Offline
                L Offline
                Luc Pattyn
                wrote on last edited by
                #12

                mgkr wrote:

                What would you use (and why)?

                neither, because 1) needing such a conversion often indicates a bad design e.g. a bad choice of data structuring; 2) and when unavoidable, i.e. when I do need to map characters to small positive integers, I use a snippet that is based on "literalString".IndexOf(char) PS: at least two replies mentioned readability, which does not even appear (any more?) in the OP. I hate it when the OP gets edited, and yes readability is very important. :)

                Luc Pattyn


                I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages


                Local announcement (Antwerp region): Lange Wapper? 59.24% waren verstandig genoeg om NEEN te stemmen; bye bye viaduct.


                P 1 Reply Last reply
                0
                • L Luc Pattyn

                  mgkr wrote:

                  What would you use (and why)?

                  neither, because 1) needing such a conversion often indicates a bad design e.g. a bad choice of data structuring; 2) and when unavoidable, i.e. when I do need to map characters to small positive integers, I use a snippet that is based on "literalString".IndexOf(char) PS: at least two replies mentioned readability, which does not even appear (any more?) in the OP. I hate it when the OP gets edited, and yes readability is very important. :)

                  Luc Pattyn


                  I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages


                  Local announcement (Antwerp region): Lange Wapper? 59.24% waren verstandig genoeg om NEEN te stemmen; bye bye viaduct.


                  P Offline
                  P Offline
                  PIEBALDconsult
                  wrote on last edited by
                  #13

                  10!

                  1 Reply Last reply
                  0
                  • M mgkr

                    Suddenly not sure which of the following constructs I should go with... I really like the compactness of B, but a bit unsure how my fellow coders would react to seeing the construct. I can't see how there should be any performance differences (if you know differently - Do tell) A:

                    int i;

                    switch (ID) {
                    case "a":
                    i = 1;
                    break;
                    case "b":
                    i= 2;
                    break;
                    case "c":
                    i = 3;
                    break;
                    default:
                    i = 0;
                    break;
                    }

                    B:

                    int i;

                    i = ID == "a" ? 1 :
                    ID == "b" ? 2 :
                    ID == "c" ? 3 :
                    0;

                    What would you use (and why)?

                    modified on Tuesday, October 20, 2009 6:46 AM

                    P Offline
                    P Offline
                    PIEBALDconsult
                    wrote on last edited by
                    #14

                    Neither.

                    public enum IDenum { None , a , b , c }

                    ...

                    IDenum ID = System.Enum.Parse ( typeof(IDenum) , whatever ) ;

                    (Except I use my own TryParse method.)

                    1 Reply Last reply
                    0
                    • N Nisha Agrawal

                      It's not the matter of readability, infact i'll use switch due to performance gain over multiple if-else statements. There is detailed description of this thought here. http://www.ozcandegirmenci.com/post/2008/05/Switch-vs-If.aspx[^]

                      P Offline
                      P Offline
                      PIEBALDconsult
                      wrote on last edited by
                      #15

                      No, it's definitely about readability.

                      1 Reply Last reply
                      0
                      • K Keith Barrow

                        The swtich statement is more readable here, but I think in general swtiches give of a bad code smell:clickety[^] Especially if they are large or used repeatedly.

                        CCC solved so far: 2 (including a Hard One!)

                        P Offline
                        P Offline
                        PIEBALDconsult
                        wrote on last edited by
                        #16

                        In my opinion, a switch on a string value is definitely a code smell. But using if/else or the ternary operator simply to avoid a switch is worse.

                        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