You know what’s awful? If-then-elseif conditions. You have this long, long chain of them, and then what? If only there were a shorter, clearer way to write a large number of conditions.

Oh, what’s that? There is? It’s called a switch statement? But doesn’t a switch statement only work on equality comparisons? I’d really like something that works on any condition.

Fortunately for me, Sergej’s boss has found a way.

clients.findById( req.authUser._doc._id).then( function( client, error ){
        switch( true ) {
                case client == null:
                        res.send( { success: false, message: 'Your profile has not been found. Try it again or logout and then login again' });
                        break;

                case client.password != req.body.profile.password:
                        res.send( { success: false, message: 'Profile has not been updated. Password is wrong.' });
                        break;

                default:
                        var updateObj = {};
                        switch( true ) {
                                case client.firstname != req.body.profile.firstname:
                                        updateObj.firstname = req.body.profile.firstname;
                                case client.lastname != req.body.profile.lastname:
                                        updateObj.lastname = req.body.profile.lastname;
                                case client.username != req.body.profile.username:
                                        updateObj.username = req.body.profile.username;
                                case client.companyName != req.body.profile.companyName:
                                        updateObj.companyName = req.body.profile.companyName;
                                case client.companyAddress != req.body.profile.companyAddress:
                                        updateObj.companyAddress = req.body.profile.companyAddress;
                                case client.companyCity != req.body.profile.companyCity:
                                        updateObj.companyCity = req.body.profile.companyCity;
                                case client.companyCountry != req.body.profile.companyCountry:
                                        updateObj.companyCountry = req.body.profile.companyCountry;
                                case client.registrationNumber != req.body.profile.registrationNumber:
                                        updateObj.registrationNumber = req.body.profile.registrationNumber;
                                case client.vatNumber != req.body.profile.vatNumber:
                                        updateObj.vatNumber = req.body.profile.vatNumber;
                        }
        }
        clients.update({_id: client._id},{$set: updateObj})
        .exec()
        .then(function(data,err){
                typeof err != 'undefined'
                        ? res.send({success:false, message: 'Your profile could not be updated.'})
                        : res.send({success:true, message: 'Your profile has been updated.'});
        });
});

All the functionality of an if-then-else, but it’s even more flexible, because it’s got fall-through! Why does anybody use regular if statements when they’ve got this efficient and easy-to-read construct?

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!