Article GKHE CodeSOD: Listicle

CodeSOD: Listicle

by
Remy Porter
from The Daily WTF on (#GKHE)
The Top 10 Ways to See if an Item Is in a List, Only 90s Kids Will Get this

Pardon the clickbait headline. We're only going to look at one method to tell if an item is in a list. A bad one.

Andrew M. inherited some software that tracks metrics. There are three general categories of metrics- "MS", "FN", and "CM". Each of these categories contains a number of specific metrics, each assigned its own ID.

So, the previous developer needed to write a function that answered this simple question: given a metric's ID, is it an "MS", "FN", or "CM" metric?

public static string GetModel(int metricId){ string caMSMetricIdList = "29477|29478|29479|29480|29481|29482|29483|29484|29485|29486|29487|29488|29489|29490|29491|29492|29493|30157|30732|30735|30738"; string caFNMetricIdList = "29411|29412|29413|29414|29415|29416|29417|29418|29419|29420|29421|29422|29423|29424|29425|29426|29427|29428|29429|29430|29431|29432|29433|29434|29435|29436|29437|29438|29439|29440|29459|29460|29461|29462|29463|29464|29465|29466|29467|30181|30183|30185|30187|30189|30436|30607|30608|30609|30610|30611|30612|30615|30616|30731|30734|30737"; string caCMMetricIdList = "29005|29364|29365|29366|29367|29368|29369|29370|29371|29372|29373|29374|29375|29376|29377|29378|29379|29380|29381|29382|29383|29384|29385|29386|29387|29388|29389|29390|29391|30435|30553|30554|30555|30556|30557|30558|30730|30733|30736"; if (caMSMetricIdList.Contains(metricId.ToString())) { return "MS"; } if (caFNMetricIdList.Contains(metricId.ToString())) { return "FN"; } if (caCMMetricIdList.Contains(metricId.ToString())) { return "CM"; } return "";}

On the bright side, these aren't technically "magic numbers", and since the fields are delimited by pipes, there won't be any lurking "run-over" bugs, where the substring of two IDs mashed together is a valid ID.

On the dark side, Andrew wasn't the first person to inherit this. A long line of developers preceded them, and each of them simply appended each new set of metric IDs to the ever growing lists. Andrew replaced this with a simple lookup using a dictionary.

puppetlabs50.png[Advertisement] Manage IT infrastructure as code across all environments with Puppet. Puppet Enterprise now offers more control and insight, with role-based access control, activity logging and all-new Puppet Apps. Start your free trial today! TheDailyWtf?d=yIl2AUoC8zAXteO7rHWA2Y
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