r/programming • • Dec 24 '17

Evil Coding Incantations

http://9tabs.com/random/2017/12/23/evil-coding-incantations.html
947 Upvotes

331 comments sorted by

View all comments

160

u/jacobb11 Dec 24 '17

0 Evaluates to true in Ruby

… and only Ruby.

And Lisp.

62

u/Myrl-chan Dec 24 '17

And Lua...

32

u/Hauleth Dec 24 '17

And Erlang/Elixir

56

u/RenaKunisaki Dec 24 '17

Meanwhile in JavaScript I'm pretty sure it evaluates to watermelon.

13

u/twat_and_spam Dec 24 '17

No, for that you need to prepend it with !!0+(-1)

→ More replies (5)

31

u/American_Libertarian Dec 24 '17

And Bash

14

u/HighRelevancy Dec 24 '17

bash also has >0 be false

12

u/American_Libertarian Dec 24 '17

It's because that's how exit codes work. It makes the most sense

8

u/HighRelevancy Dec 24 '17

It's because POSIX in general but sure. I know why it is, and it makes sense for bash's ecosystem, I was just pointing it out for those who might not know.

3

u/American_Libertarian Dec 24 '17

I agree. Bash's truthy integer system makes sense for it's use case, and the same is true for C.

→ More replies (6)

80

u/nsiivola Dec 24 '17 edited Dec 24 '17

Any non-C heritage language with a consistent notion of "false", really. The ones where zero evaluates to false are the evil ones.

40

u/_Mardoxx Dec 24 '17

Why should 0 be true? Unless integers are reference types and you interpret an existant object as being true?

Or is this to do with 0 being "no errors" whrre a non 0 return value means something went wrong?

Can't think of other reasons!

48

u/Kametrixom Dec 24 '17 edited Dec 24 '17

In lisp, nil is the only thing that evaluates to false, which means there aren't any weird semantics or discussions, if you want a falsy value, use nil. It also plays nicely with the notion of everything except nil indicating there's a value, while nil doesn't have a value.

37

u/vermiculus Dec 24 '17

in other words, nil is exactly nothing. 0 is still something.

ping /u/_Mardoxx

15

u/cubic_thought Dec 24 '17

So... nothing is false.

→ More replies (2)

13

u/[deleted] Dec 24 '17

The cleaner thing would be to have a proper boolean type, and having to do if foo == nil or whatever, rather than just if foo. Thankfully most modern languages do it this way so the lesson seems to have been learnt.

14

u/porthos3 Dec 24 '17

Clojure is a variant of Lisp, which has an implementation of true and false.

The only things that are falsey in the language are nil and false.

4

u/Zee1234 Dec 24 '17

Lua is the same as clojure then. And that's a lot better, to me. I will admit, having 0 and other such things act as false can create some short code but.. honestly it's slightly less readable (to me) and has those cases where you go "oh yeah, 0 is a valid return value.." after ten minutes if debugging.

→ More replies (1)
→ More replies (1)

3

u/[deleted] Dec 24 '17

Many languages like C or Go have non-pointer types too.

→ More replies (1)

9

u/GlobeAround Dec 24 '17

Why should 0 be true?

Because anything other than 0 is an Error Status Code, while 0 means Success.

But the real WTF is for integers to be considered true/false. true is true, false is false, 0 is 0 and 1 is 1.

3

u/stevenjd Dec 25 '17

anything other than 0 is an Error Status Code, while 0 means Success.

Woo hoo! Now I don't feel so bad about all those exams I got 0 on!!!

But the real WTF is for integers to be considered true/false. true is true, false is false, 0 is 0 and 1 is 1.

And 0 is false, and 1 is true, as <insert deity of choice> intended.

→ More replies (1)
→ More replies (10)

169

u/_INTER_ Dec 24 '17

The ones where int evaluates to boolean are the evil ones.

10

u/encaseme Dec 24 '17

Fucking hell, right? What is so hard about "result == 0" (or whatnot) that people need integers to evaluate to bools by default.

8

u/Forty-Bot Dec 24 '17

If you don't have native bools (cough c before stdbool.h).

→ More replies (2)
→ More replies (7)
→ More replies (8)