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. How about new syntactical sugar for exception checking?

How about new syntactical sugar for exception checking?

Scheduled Pinned Locked Moved The Lounge
htmlcomjsonquestion
42 Posts 27 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.
  • C Offline
    C Offline
    Chris Maunder
    wrote on last edited by
    #1

    We get a shiny new "?" operator that takes

    string result = null;
    if (field != null)
    {
    result = field.Value;
    }

    and converts this to

    string result = field?.Value

    So what about the case where we're handling a flaky API

    string result = null;
    try
    {
    result = DodgyApi.GetValue(); // may throw an exception
    }
    catch
    {
    result = null;
    }

    What would you suggest we do for that? What about a headasplode (*) operator

    string result = DodgyApi.GetValue*();

    where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

    cheers Chris Maunder

    Richard DeemingR realJSOPR L V OriginalGriffO 19 Replies Last reply
    0
    • C Chris Maunder

      We get a shiny new "?" operator that takes

      string result = null;
      if (field != null)
      {
      result = field.Value;
      }

      and converts this to

      string result = field?.Value

      So what about the case where we're handling a flaky API

      string result = null;
      try
      {
      result = DodgyApi.GetValue(); // may throw an exception
      }
      catch
      {
      result = null;
      }

      What would you suggest we do for that? What about a headasplode (*) operator

      string result = DodgyApi.GetValue*();

      where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

      cheers Chris Maunder

      Richard DeemingR Offline
      Richard DeemingR Offline
      Richard Deeming
      wrote on last edited by
      #2

      Seems like an awful idea to me - I want code that silently swallows exceptions to be a pain to write. However, you could always add the suggestion to the Roslyn GitHub repo[^] for discussion. It doesn't seem half as mad as some of the other suggestions on there! :)


      "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

      "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

      R 1 Reply Last reply
      0
      • C Chris Maunder

        We get a shiny new "?" operator that takes

        string result = null;
        if (field != null)
        {
        result = field.Value;
        }

        and converts this to

        string result = field?.Value

        So what about the case where we're handling a flaky API

        string result = null;
        try
        {
        result = DodgyApi.GetValue(); // may throw an exception
        }
        catch
        {
        result = null;
        }

        What would you suggest we do for that? What about a headasplode (*) operator

        string result = DodgyApi.GetValue*();

        where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

        cheers Chris Maunder

        realJSOPR Offline
        realJSOPR Offline
        realJSOP
        wrote on last edited by
        #3

        On the "?" operator - I will strive NEVER to use that. On the head-asplode operator - Shouldn't that be

        string result = DodgyApi.GetValue?*.();

        And why aren't you working on my latest feature request?*.() And please don't say you simply haven't GOTTEN around to it yet.

        ".45 ACP - because shooting twice is just silly" - JSOP, 2010
        -----
        You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
        -----
        When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013

        C Sander RosselS 2 Replies Last reply
        0
        • realJSOPR realJSOP

          On the "?" operator - I will strive NEVER to use that. On the head-asplode operator - Shouldn't that be

          string result = DodgyApi.GetValue?*.();

          And why aren't you working on my latest feature request?*.() And please don't say you simply haven't GOTTEN around to it yet.

          ".45 ACP - because shooting twice is just silly" - JSOP, 2010
          -----
          You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
          -----
          When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013

          C Offline
          C Offline
          Corporal Agarn
          wrote on last edited by
          #4

          John Simmons / outlaw programmer wrote:

          And why aren't you working on my latest feature request?

          He's waiting for the "?"

          Mongo: Mongo only pawn... in game of life.

          1 Reply Last reply
          0
          • C Chris Maunder

            We get a shiny new "?" operator that takes

            string result = null;
            if (field != null)
            {
            result = field.Value;
            }

            and converts this to

            string result = field?.Value

            So what about the case where we're handling a flaky API

            string result = null;
            try
            {
            result = DodgyApi.GetValue(); // may throw an exception
            }
            catch
            {
            result = null;
            }

            What would you suggest we do for that? What about a headasplode (*) operator

            string result = DodgyApi.GetValue*();

            where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

            cheers Chris Maunder

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

            Don't turn a nice language into an on-error-resume-next monster.

            Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^][](X-Clacks-Overhead: GNU Terry Pratchett)

            C 1 Reply Last reply
            0
            • C Chris Maunder

              We get a shiny new "?" operator that takes

              string result = null;
              if (field != null)
              {
              result = field.Value;
              }

              and converts this to

              string result = field?.Value

              So what about the case where we're handling a flaky API

              string result = null;
              try
              {
              result = DodgyApi.GetValue(); // may throw an exception
              }
              catch
              {
              result = null;
              }

              What would you suggest we do for that? What about a headasplode (*) operator

              string result = DodgyApi.GetValue*();

              where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

              cheers Chris Maunder

              V Offline
              V Offline
              Vark111
              wrote on last edited by
              #6

              How about a faux-extension method:

              string result = DodgyApi.GetValue().OrDefault();
              

              Then we can use it with LINQ as well to get rid of the ridiculousness of Single()/SingleOrDefault(), First()/FirstOrDefault() edit: After thinking about this a bit more, instead of syntactic sugar, isn't this one of the few raison d'être for the adapter pattern?

              class DodgyApiAdapter: IDodgyApi {
                  string GetValue() {
                      try {
                         string result = \_dodgyApiImpl.GetValue();
                         return result;
                      }
                      catch {
                         return null;
                      }
                  }
              }
              
              string result = dodgyApiAdapterInst.GetValue();
              

              I mean if you're doing the empty-catch-returns-null pattern for an API enough to want syntactic sugar, then isn't an adapter warranted?

              1 Reply Last reply
              0
              • C Chris Maunder

                We get a shiny new "?" operator that takes

                string result = null;
                if (field != null)
                {
                result = field.Value;
                }

                and converts this to

                string result = field?.Value

                So what about the case where we're handling a flaky API

                string result = null;
                try
                {
                result = DodgyApi.GetValue(); // may throw an exception
                }
                catch
                {
                result = null;
                }

                What would you suggest we do for that? What about a headasplode (*) operator

                string result = DodgyApi.GetValue*();

                where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

                cheers Chris Maunder

                OriginalGriffO Offline
                OriginalGriffO Offline
                OriginalGriff
                wrote on last edited by
                #7

                Headsplode does sound horribly like On Error Resume Next ... :~

                Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                1 Reply Last reply
                0
                • L Lost User

                  Don't turn a nice language into an on-error-resume-next monster.

                  Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^][](X-Clacks-Overhead: GNU Terry Pratchett)

                  C Offline
                  C Offline
                  Chris Maunder
                  wrote on last edited by
                  #8

                  I totally forgot about that! How about:

                  #pragma on error resume next

                  // ... code you wouldn't let your worst enemey near

                  Mwahaha

                  cheers Chris Maunder

                  G 1 Reply Last reply
                  0
                  • C Chris Maunder

                    We get a shiny new "?" operator that takes

                    string result = null;
                    if (field != null)
                    {
                    result = field.Value;
                    }

                    and converts this to

                    string result = field?.Value

                    So what about the case where we're handling a flaky API

                    string result = null;
                    try
                    {
                    result = DodgyApi.GetValue(); // may throw an exception
                    }
                    catch
                    {
                    result = null;
                    }

                    What would you suggest we do for that? What about a headasplode (*) operator

                    string result = DodgyApi.GetValue*();

                    where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

                    cheers Chris Maunder

                    N Offline
                    N Offline
                    Nish Nishant
                    wrote on last edited by
                    #9

                    You could always write a helper method.

                    string GetString(int x)
                    {
                    throw new NotImplementedException();
                    }

                    void Foo()
                    {
                    string s = NoEx.Run(() => GetString(100));
                    Console.WriteLine(s == null);
                    }

                    class NoEx
                    {
                    public static T Run<T>(Func<T> method)
                    {
                    try
                    {
                    return method();
                    }
                    catch
                    {
                    return default(T);
                    }
                    }
                    }

                    Not as clean as syntactic sugar, but fairly close :-)

                    Regards, Nish


                    Website: www.voidnish.com Blog: voidnish.wordpress.com

                    CPalliniC H B 3 Replies Last reply
                    0
                    • C Chris Maunder

                      We get a shiny new "?" operator that takes

                      string result = null;
                      if (field != null)
                      {
                      result = field.Value;
                      }

                      and converts this to

                      string result = field?.Value

                      So what about the case where we're handling a flaky API

                      string result = null;
                      try
                      {
                      result = DodgyApi.GetValue(); // may throw an exception
                      }
                      catch
                      {
                      result = null;
                      }

                      What would you suggest we do for that? What about a headasplode (*) operator

                      string result = DodgyApi.GetValue*();

                      where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

                      cheers Chris Maunder

                      Kornfeld Eliyahu PeterK Offline
                      Kornfeld Eliyahu PeterK Offline
                      Kornfeld Eliyahu Peter
                      wrote on last edited by
                      #10

                      As an idea I despite code that swallows exception without trace... Also null sometimes your best friend (but not default), so why to eliminate!?

                      Skipper: We'll fix it. Alex: Fix it? How you gonna fix this? Skipper: Grit, spit and a whole lotta duct tape.

                      "It never ceases to amaze me that a spacecraft launched in 1977 can be fixed remotely from Earth." ― Brian Cox

                      B 1 Reply Last reply
                      0
                      • Richard DeemingR Richard Deeming

                        Seems like an awful idea to me - I want code that silently swallows exceptions to be a pain to write. However, you could always add the suggestion to the Roslyn GitHub repo[^] for discussion. It doesn't seem half as mad as some of the other suggestions on there! :)


                        "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                        R Offline
                        R Offline
                        Ryan Peden
                        wrote on last edited by
                        #11

                        In this case, though, it's not really silently swallowing the exception. If the headasplode operator guarantees returning null on exceptions, then in using the operator your're explicitly expressing what you'd like to do if an exception occurs. It's more like exception handling shorthand than exception ignoring. :)

                        Richard DeemingR B 2 Replies Last reply
                        0
                        • R Ryan Peden

                          In this case, though, it's not really silently swallowing the exception. If the headasplode operator guarantees returning null on exceptions, then in using the operator your're explicitly expressing what you'd like to do if an exception occurs. It's more like exception handling shorthand than exception ignoring. :)

                          Richard DeemingR Offline
                          Richard DeemingR Offline
                          Richard Deeming
                          wrote on last edited by
                          #12

                          But with that operator, you've got to look closely at every method call to see whether or not it ignores exceptions. With the try..catch block, it's obvious what's happening. Also, how often do you really need to ignore every possible exception? Isn't it more likely that you'd want to ignore specific exception classes, and let unexpected exceptions propagate?


                          "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                          "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

                          R 1 Reply Last reply
                          0
                          • Richard DeemingR Richard Deeming

                            But with that operator, you've got to look closely at every method call to see whether or not it ignores exceptions. With the try..catch block, it's obvious what's happening. Also, how often do you really need to ignore every possible exception? Isn't it more likely that you'd want to ignore specific exception classes, and let unexpected exceptions propagate?


                            "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                            R Offline
                            R Offline
                            Ryan Peden
                            wrote on last edited by
                            #13

                            I agree that making things as obvious as possible is a good approach. How do you feel about the way Java handles this, where exceptions are part of the method signature, i.e. int addSomeNumbers throws Abc { }. And if you call a method that throws an exception, you have to either handle or rethrow (and add the throws clause to your method) if you want your code to compile. A lot of people seem to hate Java's checked exceptions, but if you're working on a big enough corporate code base, in which case there are probably at least a few lazy or marginally competent developers on the team, I can see the value in checked exceptions.

                            Richard DeemingR 1 Reply Last reply
                            0
                            • R Ryan Peden

                              I agree that making things as obvious as possible is a good approach. How do you feel about the way Java handles this, where exceptions are part of the method signature, i.e. int addSomeNumbers throws Abc { }. And if you call a method that throws an exception, you have to either handle or rethrow (and add the throws clause to your method) if you want your code to compile. A lot of people seem to hate Java's checked exceptions, but if you're working on a big enough corporate code base, in which case there are probably at least a few lazy or marginally competent developers on the team, I can see the value in checked exceptions.

                              Richard DeemingR Offline
                              Richard DeemingR Offline
                              Richard Deeming
                              wrote on last edited by
                              #14

                              I can see the value, if they're done right. The temptation for lazy devs to add throws Exception is probably too high, though.


                              "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                              "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

                              1 Reply Last reply
                              0
                              • Kornfeld Eliyahu PeterK Kornfeld Eliyahu Peter

                                As an idea I despite code that swallows exception without trace... Also null sometimes your best friend (but not default), so why to eliminate!?

                                Skipper: We'll fix it. Alex: Fix it? How you gonna fix this? Skipper: Grit, spit and a whole lotta duct tape.

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

                                Kornfeld Eliyahu Peter wrote:

                                I despite code

                                Quick Nitpick: that should be 'I despise code'. Despite means 'without being affected by; in spite of.', where despise means 'feel contempt or a deep repugnance for.'

                                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???

                                1 Reply Last reply
                                0
                                • C Chris Maunder

                                  We get a shiny new "?" operator that takes

                                  string result = null;
                                  if (field != null)
                                  {
                                  result = field.Value;
                                  }

                                  and converts this to

                                  string result = field?.Value

                                  So what about the case where we're handling a flaky API

                                  string result = null;
                                  try
                                  {
                                  result = DodgyApi.GetValue(); // may throw an exception
                                  }
                                  catch
                                  {
                                  result = null;
                                  }

                                  What would you suggest we do for that? What about a headasplode (*) operator

                                  string result = DodgyApi.GetValue*();

                                  where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

                                  cheers Chris Maunder

                                  J Offline
                                  J Offline
                                  Jorgen Andersson
                                  wrote on last edited by
                                  #16

                                  This is a test, right?

                                  Wrong is evil and must be defeated. - Jeff Ello

                                  1 Reply Last reply
                                  0
                                  • C Chris Maunder

                                    We get a shiny new "?" operator that takes

                                    string result = null;
                                    if (field != null)
                                    {
                                    result = field.Value;
                                    }

                                    and converts this to

                                    string result = field?.Value

                                    So what about the case where we're handling a flaky API

                                    string result = null;
                                    try
                                    {
                                    result = DodgyApi.GetValue(); // may throw an exception
                                    }
                                    catch
                                    {
                                    result = null;
                                    }

                                    What would you suggest we do for that? What about a headasplode (*) operator

                                    string result = DodgyApi.GetValue*();

                                    where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

                                    cheers Chris Maunder

                                    F Offline
                                    F Offline
                                    Foothill
                                    wrote on last edited by
                                    #17

                                    To those of who still use pointers (even in .Net), using (*) might be a little confusing but I have an idea. How about using a construct similar to the for loop

                                    // similar to...
                                    for (int i = 0; i < limit; ++i) { ... }

                                    // you can have
                                    NoThrow (var <out>; Func<T>; <result on throw>);

                                    // so your example becomes
                                    string result;
                                    NoThrow (result; dodgyApi.GetValue(); "I.M.Foo.Bar");

                                    if (Object.DividedByZero == true) { Universe.Implode(); } Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016

                                    C Richard DeemingR 2 Replies Last reply
                                    0
                                    • C Chris Maunder

                                      We get a shiny new "?" operator that takes

                                      string result = null;
                                      if (field != null)
                                      {
                                      result = field.Value;
                                      }

                                      and converts this to

                                      string result = field?.Value

                                      So what about the case where we're handling a flaky API

                                      string result = null;
                                      try
                                      {
                                      result = DodgyApi.GetValue(); // may throw an exception
                                      }
                                      catch
                                      {
                                      result = null;
                                      }

                                      What would you suggest we do for that? What about a headasplode (*) operator

                                      string result = DodgyApi.GetValue*();

                                      where GetValue* will silently swallow the exception thrown by GetValue and return default. Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?

                                      cheers Chris Maunder

                                      J Offline
                                      J Offline
                                      Joe Woodbury
                                      wrote on last edited by
                                      #18

                                      "new" doesn't mean what you think it does.

                                      1 Reply Last reply
                                      0
                                      • F Foothill

                                        To those of who still use pointers (even in .Net), using (*) might be a little confusing but I have an idea. How about using a construct similar to the for loop

                                        // similar to...
                                        for (int i = 0; i < limit; ++i) { ... }

                                        // you can have
                                        NoThrow (var <out>; Func<T>; <result on throw>);

                                        // so your example becomes
                                        string result;
                                        NoThrow (result; dodgyApi.GetValue(); "I.M.Foo.Bar");

                                        if (Object.DividedByZero == true) { Universe.Implode(); } Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016

                                        C Offline
                                        C Offline
                                        Chris Maunder
                                        wrote on last edited by
                                        #19

                                        Too explicit. We need something that truly, deeply hides what's going on ;)

                                        cheers Chris Maunder

                                        F 1 Reply Last reply
                                        0
                                        • C Chris Maunder

                                          Too explicit. We need something that truly, deeply hides what's going on ;)

                                          cheers Chris Maunder

                                          F Offline
                                          F Offline
                                          Foothill
                                          wrote on last edited by
                                          #20

                                          If that's the end goal, just use a carrot (^) instead of equals. That way anyone the uses managed C++ is really hosed. :laugh:

                                          string result ^ dodgyApi.GetValue();

                                          if (Object.DividedByZero == true) { Universe.Implode(); } Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016

                                          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