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.
Simple outlet store – Browsing is easy, with prices that feel reasonable.
Gold Branch Outlet Finds – Navigation is smooth, and products are clearly displayed.
CrestPoint page – Easy-to-follow layout and smooth content flow make it accessible.
Moonfall Essentials – Fast navigation, simple browsing, and items are well-described.
LB Picks – Quick browsing with an organized selection of products.
Harvest Light Shop – Site feels welcoming, products are clear and accessible.
favorite grain store – Lots to choose from, no price complaints and my package showed up fast.
IronHollow Treasures – Enjoyable shopping experience, layout is clean and products look carefully chosen.
Curated Golden Loam Hub – Browsing is easy, and pages load quickly.
a href=”https://moonpetalcollective.shop/” />petal collective store – Nice selection, easy to explore and items were unique.
Curated Emberleaf market – The store is pleasant to navigate, and products are well displayed.
Copper Petal boutique – Products are highlighted well, making it a pleasant shopping experience.
fashion pick click – Smooth site, browsing is quick, and deals are very stylish.
bloomcraft portal – Fun browsing, products look creative and site layout is user-friendly.
uniquevaluezone store – Products feel well-chosen, checkout process is intuitive and fast.
Crossroad Bond – Clean layout and simple navigation make it easy to see their offerings.
opal grain online – Selection is impressive, site layout is clean and user-friendly.
Al-Brett Central – Well-structured pages, quick loading, and information is straightforward and accessible.
LunarCoast Select – Well-organized layout and easy-to-locate items.
HighCoast Market Hub – Smooth experience, pages load fast and products are neatly displayed.
Quiet Stone Boutique – Nice assortment, navigation is smooth and products are displayed nicely.
loom craft shop – Beautifully made goods, browsing felt effortless and checkout was clean.
trading at Moon Ridge – Clean design, good-quality items, and ordering was hassle-free.
IronLeaf Goods – Clear product info and easy checkout.
Charming Ember Quarry corner – Products are presented well, and the site is simple to navigate.
Moonfall Shop – Simple browsing, fast pages, and products are visually appealing.
bluefern store – Easy to browse, selection looks curated and overall experience is pleasant.
Everyday Value Hub – Love the casual feel, browsing tips is easy and enjoyable.
Cozy curated shop – The layout is inviting, and each product has helpful details.
Luxury Finds Portal – Elegant presentation, product details make shopping enjoyable.
Crown Capital learning – Clean interface and well-written content help readers grasp ideas quickly.
opal grain finds – Prices are fair, browsing is easy and items look well curated.
LunarFern Boutique – Well-organized pages make shopping effortless.
HighRidge Treasures – Smooth experience, items are easy to locate and descriptions are helpful.
Quiet Stone Marketplace – Nice selection, site is intuitive and finding items is hassle-free.
creative discovery site – A refreshing place to pick up ideas and build skills.
veil goods shop – Clear descriptions and realistic images make browsing this store easy and enjoyable.
Curated Emberstone corner – Items are easy to browse, and the shop feels neat.
IronLeaf Finds Shop – Pleasant browsing and fast response times.
Moonfall Collection – Smooth interface with products that are easy to find and explore.
blue hearth online – Easy to navigate, products feel thoughtfully curated and checkout was smooth.
network for modern ideas – Content is engaging, layout is clear, and navigation is fast.
Deep Forest online boutique – Product pages are clear, and the overall experience is smooth and easy.
Amberfield Collective – Charming collection, items are thoughtfully displayed and easy to explore.
opal river treasures online – Good variety, browsing is simple and product descriptions are clear.
LunarField Online Shop – Smooth navigation and items feel well curated.
shop bluepeak lane – Pages load fast, products look high-quality and shopping was easy.
morning harvest online store – Clean site design with thoughtful selection and instant page loading.
beach finds store – No waiting for pages, clear details and realistic images.
Quiet Tide Online Shop – Nice assortment, pages load fast and shopping feels effortless.