SOFTWARE KLEENEX®
Kleenex® is a brand name[1].
Everyone knows what a Kleenex® is.
A facial tissue.
https://en.wikipedia.org/wiki/Kleenex
fn(a,b) returns r throws e
fn(3,4);
Surprise!
This line of code represents two functionalities:
Furthermore, this line of code says that the parameters, both of them - 3 and 4 - must be transfered to fn() at the same time.
Furthermore, this line of code says that we will wait for fn() to finish its work.
Furthermore, this line of code says that we will modify a global variable to record who called fn().
The global variable is an optimized list.
The global variable is modified by the underlying hardware.
The use of the global variable is pervasive and hidden by most programming languages.
The global variable is called The Stack.
x = fn(…);
This line of code says that we want to spin up and invoke fn().
Furthermore, this line of code says that we will wait for fn() to finish its work.
Furthermore, this line of code says that we expect fn() to always return a value, even if it doesn't need to do so.
fn(…) … {
throw e;
}
This code says that fn() encountered an error and Send()s an error thingie upwards to its caller, or its caller's caller, or the caller's caller's caller, or …
Furthermore, the chain of who gets to handle the exception is determined by a runtime global variable.
You guessed it, The Stack.
This breaks one of the fundamental tenets of Structured Programming.
One entry, one exit.
[1] https://www.ballaghedward.ca/article/when-is-a-trademark-not-a-trademark.php#:~:text=In%20the%20context%20of%20trademarks,exclusive%20rights%20in%20the%20trademark.