On Saturday, July 12, 2003, at 03:21 PM, erik hansen wrote:


--- Dar Scott <[EMAIL PROTECTED]> wrote:
I readily use throw in scripts for my own
use. Are people comfortable with throw?

what is "throw"? it sounds exciting.

I think in Revolution it is something like this:


A throw allows you to create an error much like sqrt(-1) does. You can use it in custom command handlers and in custom functions.

Example:

function areaOfRectangle w, h
  if (w<=0) or (h<=0) then throw "Bad Rectangle Dimensions"
  return w*h
end areaOfRectangle

This example applies directly to the original question.

(I don't know of anything in Revolution that requires that throws be used only for errors, but that is normally the case.)

What makes 'throw' exciting is the use of 'try', or try-catch as it is sometimes called. Both errors reported with 'throw' in your scripts and errors reported with a built-in throw in built-in commands and scripts can be contained with 'try'.

If there is an error and it is not caught with a try catch (or, if so, it is re-thrown) then it is handled by a custom handler or by the system.

You can use 'try' like this:

try
   put fastExperimentalComputation(x,y,z) into w
catch errVal
   put triedAndTrueComputation(x,y,z) into w
end try

If there is an error anywhere in fastExperimentalComputation() and it is not caught at an intermediate level, then its execution is stopped and execution continues in the catch clause. If there is no error, the catch clause is not executed. The error can be many functions and handlers down in calls. (A 'try' might not do any good for a bug in the engine.)

The optional 'finally' clause is executed however control gets out of the try. Use it like this:

local veryVeryLargeTempArray
try
  build veryVeryLargeTempArray
  doSomethingWith veryVeryLargeTempArray
catch errVal
  throw errVal
finally
  put empty into veryVeryLargeTempArray
end try

Or like this:

try
  controlMotor(a,b,x,y,t)
catch errVal
  if errVal is not "motor control error" then throw errVal
  put true into motorError
finally
   pullThePlug
end try

This will shut down the motor under all error conditions as well as all normal conditions. I'm not sure, but I expect it will even if--in some fit of idiocy--you put an 'exit to top' command in one of the controlMotor routines.

You can use 'try' as one of your methods to make your applications robust. Even if it trips, your app can land on its feet and casually go on.

Look at the TD entries for try and throw. There are also a couple simple examples.

Dar
************************************************************************ ****
Dar Scott Consulting http://www.swcp.com/dsc/ Programming Services
************************************************************************ ****


_______________________________________________
use-revolution mailing list
[EMAIL PROTECTED]
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to