On 28 September 2015 at 11:33, Bob Brown <b...@transentia.com.au> wrote:
> I SUSPECT that we are heading towards developing “recovery blocks”, which 
> look like:
>
> ---
> ensure acceptance test
> by primary alternate
> else by alternate 2
> .
> .
> else by alternate n
> else error
>
> ---

Oh, I see. That is interesting.

Scala has somewhat similar feature, albeit without acceptance testing
(only handling exceptions):

  Try {
    mayThrow()
  } orElse {
    alternative()
  } orElse {
    alternative2()
  } match {
    case Success(res) => res
    case Failure(e) => handleException(e)
  }

This can be implemented in groovy as a library, just as it is done is scala.

Cheers,
Dinko

>
> I think these first appeared sometime around 1965 (they were part of a 
> specialist real-time language called CORAL, I believe…also a variant of 
> Pascal called “Pascal Plus”, if memory serves...).
>
> Not sure that they were successful…I suspect that they required too much from 
> the run-time support infrastructure. Times change and they may be possible 
> with our MUCH faster hardware.
>
> There are lots of learned academic papers discussing how this is A Good Idea…
>
> BOB
>
>
>
>
>
>
> On 28/09/2015 6:59 pm, "Dinko Srkoč" <dinko.sr...@gmail.com> wrote:
>
>>On 28 September 2015 at 10:22, Edinson E. Padrón Urdaneta
>><edinson.padron.urdan...@gmail.com> wrote:
>>> On Mon, Sep 28, 2015 at 3:22 AM, Maarten Boekhold <boekh...@gmx.com> wrote:
>>>>
>>>> Just put the 'else'  code at the end of the try block!
>>>>
>>>> Maarten
>>>
>>>
>>> That's not a satisfactory answer for my question. Besides, what would happen
>>> if the code that throws the exception is part of a return sentence? What if
>>> the 'else code' that is after the code that throws the exception throws one
>>> of its own and it's captured by the catch block(s)? In the other hand, isn't
>>> more clear to have inside the try block only the code that should be 'tested
>>> for an exceptional situation'?
>>
>>If I understand you correctly, what you're proposing would look a bit like 
>>this:
>>
>>  try {
>>      mayThrow()
>>  } catch (e) {
>>      handleException(e)
>>  } else {
>>      try {
>>          shouldNotThrowButOneNeverKnows()
>>      } catch(e) {
>>          handleExceptionInElse(e)
>>      }
>>  } finally {
>>      cleanup()
>>  }
>>
>>I have two questions:
>>
>>* `else` as a keyword implies that the `else` block is executed
>>instead of another code block. What would that another block be?
>>* if `try` block is the last one in a method, it'll be evaluated as an
>>expression and the result of the last expression inside try/catch is
>>the method's return value. What would be the return value in your
>>proposal?
>>
>>Cheers,
>>Dinko
>

Reply via email to