Article 1HRYA CodeSOD: Now There's a Switch…

CodeSOD: Now There's a Switch…

by
Remy Porter
from The Daily WTF on (#1HRYA)

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?

release50.png[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! TheDailyWtf?d=yIl2AUoC8zA2kS12sIKAl4
External Content
Source RSS or Atom Feed
Feed Location http://syndication.thedailywtf.com/TheDailyWtf
Feed Title The Daily WTF
Feed Link http://thedailywtf.com/
Reply 0 comments