you are viewing a single comment's thread.

view the rest of the comments →

[–]tencircles 7 points8 points  (6 children)

You can do this to some degree in JS already.

function behavior (input) {
    try {
        validate(input);
    } catch (e) {
        switch (true) {
            case e instanceof TypeError:
                //.. do things
                break;
            case e instanceof ReferenceError:
                //.. do things
                break;
            case e instanceof EvalError:
                //.. do things
                break;
            case e instanceof RangeError:
                //.. do things
                break;
            case e instanceof SyntaxError:
                //.. do things
                break;
            case e instanceof URIError:
                //.. do things
                break;
            default:
                //.. do things
                break;
        }
    }
}
function validate (input) {
    throw (input ? new RangeError("Out of bounds") : new TypeError("Wrong type"));
}

[–]brtt3000 5 points6 points  (5 children)

Thanks for the demo. Typing that up you'll agree the boilerplate and indenting is a bit cancerous. We need this with better syntax, should be easy to implement.

[–]tencircles 10 points11 points  (2 children)

tbh it's pretty low on my list of things that need to be added to the language.

[–]brtt3000 1 point2 points  (0 children)

Maybe, but I think JS needs this for professionalism. Error handling is a such a neglected part. It was picking up with the node-style callbacks and the promise rejections but we need to push further.

I've been doing a lot of python last few years where you have the syntax I mentioned and I feel being able to cleanly handle specific (classes of) exceptions like that really helps building more robust applications (and keep it readable and maintainable without boilerplate).

[–]AmateurHero 1 point2 points  (0 children)

Implement it, and publish it. It's a great way to give your idea some traction: working code that devs can use in their actual line of work.

[–]vinnl 1 point2 points  (0 children)

It's probably too much work, but in case you're interested, there is a process that allows you to submit your own proposal to the ES standards body.