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

    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