Question on @nothrow

Vasileios Anagnostopoulos via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 1 08:41:28 PDT 2017


On Thursday, 1 June 2017 at 15:17:32 UTC, Ali Çehreli wrote:
> On 06/01/2017 06:26 AM, Vasileios Anagnostopoulos wrote:
>
> > how do I know that a function "may throw" an
> > exception in order to use a try/catch/finally block? This is
> my biggest
> > problem (sorry, coming from a java/C background).
>
> I come from a C++ background so the advices may be different 
> from Java's.
>
> The liberating thing about exceptions is that you simply do not 
> catch them. In fact, you're adviced against catching them 
> unless you want to or can do something when they are thrown.
>
> If you think that way, you write your code to do its resource 
> management automatically with destructors, scope statements 
> (scope(exit), scope(exception), and scope(success)), etc.
>
> Say, you want to send a letter by performing certain steps: 
> grab a paper, write the letter, grab an envelope, put the


Let us emulate this as function calls with void


void sendEmailToAli() {

grabAPaper();
writeALetter();
grabAnEnvelope();
putTimeStamp(); //throws an Exception, function not in my 
control, residing in a dll
putToMailBox();

}

> letter inside, oops, there is no stamp. Throw an exception... 
> If such low or intermediate level functions have no idea what 
> the higher layer application code wants to do in this case, 
> they simply throw. N layer up, a function would want to catch



//If I knew about the exception
//I could recover, because exceptions
//signal recoverable errors

void haveToCommunicateWithAli() {
try {

sendEmailToAli();

} catch(Exception e) {

goPersonallyToAli();

}
}


//If I do not know

void haveToCommunicateWithAli() {
sendEmailToAli();
}

//can blow-up after code has shipped
//and have no chance to recover


What shall I do in this case? Thank you in advance.

Vasileios


More information about the Digitalmars-d-learn mailing list