I’m getting rather hacked off seeing boolean properties typed as strings. Stringly typed is a phrase I learnt off a post from the excellent Coding Horror blog and it describes a phenomena whereby properties that are of a specific type, e.g. Boolean, Date, int, are stored needlessly as strings.
I’m working on a website that communicates with a money laundering service to check whether an individual is “bad” or not. Individuals can pass the test, but importantly it is possible to pass the test with some warning flags raised. If any of the warning flags are raised then an email should be sent off to compliance for them to do…whatever it is they do. Fair enough right?
The warning flags are obviously booleans. There was either a warning raised or there wasn’t – there are no two ways about it (no pun intended). In the serialized response, the warning flags are encoded as “Yes” or “No”…which is understandable. Now, upon receiving the response, it is parsed and turned into an internal representation. This is where things get really weird. The programmer that coded the object that stores the response from the service has decided to encode the warnings as strings, initialised to “”. Which is totally fucking bonkers.
Why?
Well, now our boolean warnings aren’t really booleans – they have WAY more than two possible values and the meaning of these values is subjective. One may consider “”, null, “No” as false, but could conceivably also consider “false” or “0″. We get the same sort of problem with true – “Yes”, “1″, “true” and then we get a whole load of unknown values which is every other possible string in the world. Which might be considered to be true.
So how the hell can any number of programmers work on this piece of code without introducing errors because of differing definitions of truthy and falsey values? Well, they can’t. To illustrate the problem further, even loosely typed languages differ in their boolean coercion, for example JavaScript and PHP:
<script>
if("0") alert('Opposite day!');
</script>
<?php
if("0") echo 'Opposite day!';
?>
JavaScript considers “0″ true but PHP considers it false. Personally I think JavaScript is “right” here, but as I said before, it is totally subjective.
The icing on the cake is of course the extra code you have to write to check the truthy or falsey string values. Something along the lines of “if x is not null and not empty and not the word No then it is probably true…probably”, which would otherwise have been coded as “if x then true” if x was a boolean – which is orders of magnitude shorter.
Of course, there are some bat shit crazy strongly typed languages that allow you to assign null to a Boolean, but that is a different story altogether.
collaborationhubpro – Very helpful, the hub encourages clear communication and stronger business ties.
progressdrive – Energy focused on key actions creates measurable advancement.
workflowbeacon – Clear direction provides leverage and helps keep tasks moving efficiently.
tractionforwardhub – Content motivates and shows practical steps for measurable progress.
partnershipzone – Collaborate with professionals to achieve consistent results and long-term value.
flowguidesignal – Useful tips, signals make coordinating tasks much simpler.
growthbydesign – Practical insights, careful design of each action keeps progress consistent and measurable.
momentumpeacon – Signals guide daily actions, making progress smoother and more reliable.
workflowbeacon – Forward energy ensures tasks move smoothly and consistently toward completion.
signalfocushub – Guidance is helpful and keeps priorities easy to follow.
motionpractical – Very useful, the steps for understanding motion are clearly outlined.
directionbyaction – Very helpful, deliberate actions guide direction and make progress smoother.
progressstream – Helpful notes, ideas here turn progress into clear, actionable steps.
valueinsightflow – Useful suggestions, concepts are structured so actions can be taken immediately.
cohesivegrowthcircle – Practical advice, cohesion in this network strengthens mutual development and trust.
claritypilot – Following a clear route helps complete projects smoothly.
progressbeacon – Signals here streamline workflow and ensure momentum continues effectively.
focused growth approach – Clear messaging, growth is explained without confusion.
strategyengine – Strategic handling of ideas converts thoughts into consistent action steps.
enduringassets – Consistently strong results through long-term value-focused strategies.
resultsorientedpath – Great insights, staying focused ensures progress is tangible and consistent.
alliancehub – Connect with businesses for joint projects and successful collaborations.
clarityadvancementhub – Recommendations are structured, helping prioritize tasks effectively.
growthpathfocus – Helpful ideas, focusing energy properly makes growth execution smoother.
directioncatalyst – Very helpful, each action contributes to steering progress efficiently.
progressflow – Helpful insights, moving forward steadily feels much more manageable.
directionpath – Inspiring guidance, constructing a clear direction path keeps projects on track.
exclusivevisionalliance – Useful, club feels high-value yet encourages open collaboration among members.
progressguide – Knowing the right steps helps motion achieve meaningful results.
trustedpartnershiphub – Excellent view, reliability and commitment are highlighted clearly.
ideahub – Having clear direction ensures ideas move forward without delay.
goalengine – Anchored clarity helps achieve steady growth and predictable results.
growthsimplified – Nice advice, clear methods help make steady growth feel achievable.
workflowbeacon – Clear guidance supports structured progress and helps maintain consistent results.
intent based growth – Useful tips, intentional actions strengthen growth momentum.
focusedaction – Excellent tips, directing focus ensures energy is used on important tasks.
growthpoweralliance – Useful, partnering with influential groups fosters growth and drives results consistently.
motionengine – Very useful, logical explanations help link ideas and action smoothly.
partnershipcircle – Foster partnerships that drive consistent progress and shared benefits.
motionnavigatorhub – Guidance supports focus and ensures actions are productive.
forwardlogic – Great content, applying forward-focused strategies feels straightforward and manageable.
clarityandvisionhub – Practical, clarity in vision helps everyone understand priorities and next steps.
efficiencybeacon – Recognizing signals helps maintain steady and effective workflow.
signalinsights – Helpful guidance, signals help clarify priorities and focus efforts effectively.
momentumengine – Proper focus generates energy, keeping momentum steady in tasks.
progresscompass – Organized strategies make completing projects simpler and faster.
actionmap – Useful tips, this method maps ideas into clear, practical actions.
clarityleadsforward – Motivating insights, clarity here guides momentum in the right direction.
partnershipcirclepro – Insightful, collaborative circles guide partnerships to grow steadily and achieve clear outcomes.
connectedleadersbond.bond – Connected leaders concept suggests credibility, experience, and meaningful collaboration globally.