On Monday, 5 September 2016 at 20:04:43 UTC, pineapple wrote:
On Monday, 5 September 2016 at 19:12:02 UTC, Jacob Carlborg wrote:
[...]
On 2016-09-05 20:57, pineapple wrote:
Which is easier to read and to write? Which is more maintainable? Which is less prone to programmer errors? This?

[...]
This?

    try{
        do_a_thing();
    }else{
        depends_on_success_of_thing();
    }

Or this?

    bool success = false;
    try{
        do_a_thing();
        success = true;
    }finally{
        if(success){
            depends_on_success_of_thing();
        }
    }

There's probably also a FP approach:

function TryElse(
    alias TryStatements,
    alias ElseStatements)(){}

function TryCatchElseFinally(
    alias TryStatements,
    alias ElseStatements,
    alias CatchStatements,
    alias ElseStatements,
    E : Exception = Exception)(){}

etc.

You pass delegate literals:

°°°°°°°°°°°°°°°°°°°°°
void TryElse(alias TryStatements, alias ElseStatements)()
{
    bool doElses = true;
    try TryStatements();
    catch(Throwable){}
    ElseStatements();
}

void main()
{
    int i;
    import std.conv: to;

    TryElse!(
        {i = to!int("0.42");},
        {i = -1;}
    );
}
°°°°°°°°°°°°°°°°°°°°°

With optional sugar to name each statements group:

°°°°°°°°°°°°°°°°°°°°°
template Statements(alias T)
{
    alias Statements = T;
}
alias Try = Statements;
alias Else = Statements;

void main()
{
    TryElse!(
        Try!({}),
        Else!({})
    );
}
°°°°°°°°°°°°°°°°°°°°°

Reply via email to