RIA Developer, Flex / Flash, Widgets
Posts tagged catch
Tip of the Day – When to use try… catch… finally
Jan 17th
A wise Adobean once told me to use try / catch / finally statements sparingly. It didn’t mean much to me at the time since I honestly don’t use them very often. Instead, I opt to check conditions prior to executing “at risk” statements.
So… here’s my advice that when it comes to try / catch statements.
Preventing errors from occurring is far better than generally handling them.
Take a look at this example.
var goodObj:Object = {foo: "bar"}; var badObj:Object = null; tryErrors(goodObj); tryErrors(badObj); function tryErrors(obj:Object):void { // DO THIS if(obj) trace(obj.foo); else trace("doing something else"); // NOT THIS try { trace(obj.foo); } catch (e:TypeError) { trace("error occurred"); } } /*** OUTPUT *************** bar bar doing something else error occurred ***************************/
Do not use blanket try / catch statements.
You gain nothing by catching an exception that your application can’t deal with at that point.
For example, if you’re trying to convert a string to a number, and you know it might fail, but you have a default value, you should catch the exception, set the default value, and allow execution to continue.
Another example, if you try to call a Web Service and the call fails, and that particular call isn’t critical to your application, you could catch the exception, warn the user that some information is not available, and continue execution.
Only use try / catch when you have to.
I don’t have any specific benchmarks, but I do know that using excessive try/catch statements will degrade performance of your flash application. Probably because Flash Player is single threaded, but an Adobe person would probably have more information on that than I do.
An application I worked on a while ago used a try catch block around every single function… not my fault, it’s code that I inherited… anyways, it’s performance and execution times were horrendous.