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.
Bonded Growth Portal – Smooth navigation and practical lessons made exploring the site effortless.
TrustBondGlobal – Minimalist interface, ideas feel clear and trustworthy.
unitydrivenbond.bond – Fast website performance and clear information, everything loads quickly without a hitch.
NetworkSolidarityHub – Helpful examples and concise lessons, understanding came naturally.
bondedpillars.bond tips – Well-structured articles make learning new techniques simple and fast.
Collective Bond Knowledge Base – Pages are arranged thoughtfully, making learning efficient.
MutualLearningHub – Well-organized content, I found the guidance highly useful today.
CapitalAllianceHub – Very easy to follow, guides make learning fast and enjoyable.
trustfoundry tips – Helpful instructions and practical advice made studying straightforward.
Bond Hub Academy – Organized tutorials and concise guidance make difficult concepts accessible.
CapitalLearning – Excellent structure, I could quickly apply the strategies in real situations.
UnitedCapitalHub – Content is very organized, easy to follow, and perfect for beginners.
Legacy Academy Hub – Clear explanations and structured guides make learning straightforward.
CapitalHeritageHub – Very informative content, even complex topics feel simple.
Bonded Strength Center – Well-organized pages share information that feels solid and reliable.
Bonded Resource Portal – Well-laid-out tutorials and clear examples help beginners and pros learn quickly.
SecureBond Tutorials – Easy-to-follow guides that cover all essentials clearly.
Collective Bond Portal – Smooth navigation with practical guides ensures quick understanding.
unitystronghold.bond resources center – Easy-to-use platform with supportive advice helps me learn efficiently.
bondednexus resources center – Easy-to-use platform with supportive advice helps learning efficiently.
Foundation Alliance Network – Clear guidance and uncluttered pages make this easy to return to.
Foundation Insights Hub – Smooth navigation and useful content make exploring effortless.
unitybondcraft.bond help – Smooth navigation and actionable guides make complex topics easy to follow.
bondedvaluechain tutorials – Practical examples and clear steps help users grasp ideas efficiently.
Covenant Partners Center – Polished messaging and structure create confidence during browsing.
Enduring Learning Hub – Practical tutorials and concise advice make mastering concepts straightforward.
Prime Bond Academy – Stepwise guides and intuitive navigation make studying fast.
unitykeystone.bond articles – Easy-to-follow guidance with quick page loads makes research seamless.
Trust Circle Essentials – Well-presented ideas that support thoughtful planning.
bondedtrustway knowledge – Smooth interface with concise guides helps users learn efficiently.
Core Resource Center – Well-laid-out content with helpful explanations allows fast comprehension.
Shared Future Insights – Smooth layout and practical examples promote strategic thinking.
StrategicTrustAlliance – Straightforward presentation, partnership focus is clear.
capitalties.bond hub – Informative tutorials provided practical ideas I could implement immediately.
capitalbondline tips – Clear explanations and concise examples helped me understand topics efficiently.
Bonded Learning Hub – Easy-to-follow content and clear structure make understanding smooth.
Trusted Bond Knowledge – Helpful guides and clean interface make learning efficient.
Global Synergy Network – This approach could open doors for meaningful international cooperation.
trustcontinuity.bond strategies – Well-structured content with useful examples makes exploring topics simple.
Alliance Network – Simple layout, information is easy to follow.
unitycatalyst learning – Easy navigation and clear structure keep learning smooth and effective.
Unity Knowledge Hub – Organized content and stepwise guidance simplify learning today.
VisionDrivenHub – Sleek layout, ideas are presented clearly and feel modern.
trustlineage.bond center – Smooth navigation and clear instructions make studying straightforward today.
unitybondworks knowledge hub – Well-organized tutorials and actionable tips helped me understand everything.
Unity Network – Well-structured pages, making navigation intuitive.
PartnerAllianceHub – Smooth flow of information, strategic insights come across naturally.
UnityProConnect – Easy-to-read, partnership values are communicated well.
ActionRoute – Straight to the point layout, saved me time.
bondedcontinuum platform – Clean presentation, trustworthy information, and quick page performance.