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.
Unified Capital Learning – Smooth browsing with practical guides made understanding topics straightforward.
Integrity Bond Hub – Useful resources presented clearly, making learning fast and smooth.
UnityCore – Guides load quickly, very simple to access and read.
capitaltrustline articles – Informative content with step-by-step guidance made topics easy to follow.
UnifiedBondInsights – Very clear tutorials, made understanding networking simple.
NetworkBondHub – Tutorials are simple and practical, made learning very smooth.
GrandUnity Education – Well-structured content and actionable strategies improved my comprehension today.
GrowthAllianceWorld – Clear layout, lessons are concise and the experience feels seamless.
PartnershipSphere – Simple but professional, content emphasizes shared success.
EverBondCenterPortal – Well-structured guides, understanding complex topics was simple today.
CornerstoneAllianceBond – Informative content, I feel confident applying these tips immediately.
TrustBondCircle – Informative content with step-by-step guidance, grasping bonds was fast.
Trusted Resource Hub – Clean design and helpful explanations make understanding easier today.
AllianceEverlasting – Helpful insights and guides, everything is easy to follow.
Trusted Lineage Knowledge – Clear organization and helpful tips keep me coming back often.
partnercoalition – Purposeful vision, collaboration is framed as scalable and inclusive.
HeritageResource – Guides are structured well, very beginner-friendly and clear.
Value Bond Central – Friendly, clear content helps users quickly grasp challenging topics.
TrustLineCore – Practical tutorials that are easy to follow, I absorbed the key points quickly.
trustforge.bond articles – Practical content and well-structured lessons help me grasp ideas quickly today.
CapitalBondResources – Clear explanations, learning strategies was simple and efficient.
trustaxis tutorials – Smooth navigation and clear instructions make studying straightforward.
BusinessConnectCircle – Smooth design, platform supports professional growth effectively.
trustbridgegroup.bond – Simple layout and clear guides made learning bonds fast and effective today.
GlobalAllianceHub – Organized structure, ideas come across as purposeful and strategic.
CoreLinkHub – Step-by-step guides, makes learning new strategies simple.
BondHeritageResources – Clear explanations with well-organized pages, makes learning effortless.
IroncladAllianceHub – Smooth experience, content loads fast and is easy to navigate.
CircleBond Tips & Tricks – Fast, user-friendly pages with reliable advice for beginners and experts alike.
Keystone Partners Tutorials – Concepts are explained plainly without unnecessary complexity.
FoundationBridge – Smooth navigation, content is useful and practical for beginners.
Allied Bond Learning – Friendly interface and well-structured content ensure easy comprehension.
Growth Hub Insights – Intuitive design and practical tips make grasping ideas effortless.
CapitalSynergyNetwork – Guides are helpful and concise, everything is straightforward to apply.
BondedHorizonsInsights – Structured tutorials, content is very practical and beginner-friendly.
GlobalBondHub – Organized structure, explanations make practical strategies easy to follow.
integrityaxis.bond resources – Well-organized pages and helpful guides made learning simple.
CoreBondGuide – Guides are easy to follow, everything feels clear and actionable.
bondedtrustcore insights – Organized pages and useful resources make exploring bonds easy.
unitydrivenbond.bond – Simple and reliable content, loads instantly and navigation is intuitive.
TrustNetworkGlobal – Professional layout, messaging comes across as trustworthy and solid.
ProsperityBondPortal – Excellent layout and useful resources, I discovered valuable tips efficiently.
AllianceHubBonded – Great insights, content makes networking tactics easier to use effectively.
LegacyBondCircle – Clear tutorials with helpful tips, I understood several strategies today.
Unity Secure Learning Hub – Navigation is smooth and explanations are clear.
Alliance Tips Hub – Concise instructions and practical lessons improved my learning today.
NobleBridge – Simple interface, instructions are easy to follow and apply.
strategicunity – Professional feel throughout, alliances seem intentional and strong.
AlliancePathwayHub – Simple to navigate, tutorials are clear and helpful for understanding.
EnduranceNetworkBond – Well-laid-out content, guides are effective and straightforward.