Stringly Typed Booleans

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.

8,884 thoughts on “Stringly Typed Booleans

  1. seo partner program seo partner program .

  2. I can’t believe how amazing this article is! The author has done a tremendous job of conveying the information in an compelling and enlightening manner. I can’t thank him enough for sharing such priceless insights that have certainly enlightened my knowledge in this topic. Kudos to her for crafting such a masterpiece!

  3. В этом тексте собрано множество случайных сведений и довольно неопределённых мыслей которые могут чем-то заинтересовать. Мы отмечаем моменты которые не особенно важны но всё же занимают своё место в повествовании. Вот – порно смотреть

  4. Thanks for these guidelines. One thing I should also believe is credit cards providing a 0 interest rate often lure consumers along with zero interest rate, instant authorization and easy internet balance transfers, but beware of the number one factor that will void your 0 easy streets annual percentage rate and also throw you out into the poor house quick.

  5. One thing I would really like to say is the fact before obtaining more personal computer memory, consider the machine within which it is installed. When the machine is definitely running Windows XP, for instance, the memory ceiling is 3.25GB. Using over this would basically constitute some sort of waste. Make certain that one’s mother board can handle your upgrade volume, as well. Good blog post.

  6. оптимизация сайта франция цена оптимизация сайта франция цена .

  7. Этот сборник информации привлекает множеством мелких деталей и необычных ракурсов. Мы предлагаем взгляды, редко полезные, но способные немного разнообразить знакомство с темой.
    Подробнее читать – где купить строительные материалы

  8. Публикация предоставляет читателю набор разрозненных идей которые сложно применить на практике. Мы лишь слегка касаемся разных точек зрения не углубляясь в анализ и не предлагая никаких выводов. Вот – знакомства для взрослых

  9. продвижение сайтов в москве продвижение сайтов в москве .

  10. В этом тексте собрано множество случайных сведений и довольно неопределённых мыслей которые могут чем-то заинтересовать. Мы отмечаем моменты которые не особенно важны но всё же занимают своё место в повествовании. Вот – казино

  11. оптимизация сайта франция оптимизация сайта франция .

  12. В этом материале представлены детали которые хоть и занимательны но не особенно значимы. Мы рассматриваем моменты которые трудно назвать важными но всё же решили включить их для полноты картины. Вот – виртуальное казино

  13. Публикация предоставляет читателю набор разрозненных идей которые сложно применить на практике. Мы лишь слегка касаемся разных точек зрения не углубляясь в анализ и не предлагая никаких выводов. Вот – https://arma-rehab.ru

  14. Этот обзор позволяет по-новому взглянуть на вещи на которые обычно и так смотрят. Мы упоминаем факты которые мало что меняют и события значение которых трудно определить но они всё равно здесь. Вот – бесплатные порно видео

  15. Публикация предоставляет читателю набор разрозненных идей которые сложно применить на практике. Мы лишь слегка касаемся разных точек зрения не углубляясь в анализ и не предлагая никаких выводов. Вот – порно онлайн бесплатно

  16. В этом тексте собрано множество случайных сведений и довольно неопределённых мыслей которые могут чем-то заинтересовать. Мы отмечаем моменты которые не особенно важны но всё же занимают своё место в повествовании. Вот – знакомства для взрослых

  17. продвижение в google продвижение в google .

  18. продвижение сайта франция продвижение сайта франция .

  19. оптимизация сайта франция цена оптимизация сайта франция цена .

  20. Этот обзор позволяет по-новому взглянуть на вещи на которые обычно и так смотрят. Мы упоминаем факты которые мало что меняют и события значение которых трудно определить но они всё равно здесь. Вот – знакомства для взрослых

  21. На нашем сайте вы можете скачать активатор для Windows 11 абсолютно бесплатно и навсегда забыть о водяных знаках Подробнее – Windows 11 активатор на русском

  22. В этом материале представлены детали, которые хоть и занимательны, но не особенно значимы. Мы рассматриваем моменты, которые трудно назвать важными, но всё же решили включить их для полноты картины.
    Вот – казино с быстрым выводом

  23. PG Soft top 3 jogos 2026: Tigrinho, Coelho, Touro – qual é o seu ranking pessoal?

  24. продвижение сайтов продвижение сайтов .

  25. Этот обзор предлагает свежий взгляд на предметы которые и без того привычны. Мы упоминаем факты не имеющие большого значения и события с неясной важностью но они присутствуют здесь. Подробнее читать – купить керамический блок

  26. В этом тексте собрано множество случайных сведений и довольно неопределённых мыслей которые могут чем-то заинтересовать. Мы отмечаем моменты которые не особенно важны но всё же занимают своё место в повествовании. Вот – джекпот

  27. Этот обзор предлагает свежий взгляд на предметы которые и без того привычны. Мы упоминаем факты не имеющие большого значения и события с неясной важностью но они присутствуют здесь. Подробнее читать – блоки для строительства дома

  28. реклама наркологической клиники реклама наркологической клиники .

  29. продвижение сайтов интернет магазины в москве продвижение сайтов интернет магазины в москве .

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>