this post was submitted on 15 Jan 2025
88 points (98.9% liked)

Programmer Humor

32893 readers
941 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 

A small collection of WTF code snippets sorted by language.

top 25 comments
sorted by: hot top controversial new old
[–] toastal@lemmy.ml 25 points 2 days ago* (last edited 2 days ago)

I love that the contribute is just a mailto link. I want to see more of this & less “join the Discord chatroom & create a Microsoft GitHub account today”

[–] toast@retrolemmy.com 32 points 2 days ago (2 children)

Perl not included in list.

Conclusion: In Perl, everything works as expected

[–] neidu3@sh.itjust.works 9 points 2 days ago* (last edited 2 days ago)

I'll share with you this gem from someone who tried to cause a syntax error on purpose, but the script ran just fine: https://stackoverflow.com/questions/11695110/why-is-this-program-valid-i-was-trying-to-create-a-syntax-error

[–] HK65@sopuli.xyz 9 points 2 days ago

Correction: In Perl, everything works as can be expected.

[–] FourPacketsOfPeanuts@lemmy.world 24 points 2 days ago* (last edited 2 days ago) (1 children)

Python item 1

Mutable default arguments don't get re-initialized with each function call.

got an audible wtf from me... Been using python for years, totally unaware.

[–] expr@programming.dev 9 points 2 days ago (1 children)

Mutating function arguments is pretty wtf to begin with.

[–] FourPacketsOfPeanuts@lemmy.world 6 points 2 days ago* (last edited 2 days ago)

true, and i can't think of a legitimate case where it would have tripped me up. but if someone, a novice perhaps, wrote

def some_func(foo, bar=[1, 2, 3]):
    bar.reverse()  # for whatever reason
    print(bar)

some_func('hello')    # output [3,2,1]
some_func('hello')    # output [1,2,3] 

i think they would be within their rights to be surprised that calling this function twice has different results. that's what i was surprised by; it feels like bar would be re initialised each time with a scope of the function but apparenty not

[–] airbussy@lemmy.one 9 points 2 days ago

Not only funny, but also learned something today: you can use NegativeLiterals to not have to write (-123) in Haskell

[–] vithigar@lemmy.ca 7 points 2 days ago (3 children)

The WTF in the C# example seems to be that people don't understand anonymous functions and closures?

[–] Kacarott@aussie.zone 5 points 2 days ago

Some of the examples seem to be more "unintuitive for newbies", but there are still some good ones in there

[–] r00ty@kbin.life 2 points 2 days ago (1 children)

Yeah. I didn't understand what they meant by the wtf there. Seemed to me someone wondered if the Action would have a localised version of i (making this stay lowercase on a phone was harder than it should be) or if it used the same i. So made a simple test for it.

Not really sure it's a wtf unless they expected a different result.

[–] vithigar@lemmy.ca 2 points 2 days ago

I think the explanation they provide is a bit lacking as well. Defining an anonymous function doesn't "create a reference" to any variables it uses, it captures the scope in which it was defined and retains existing references.

[–] Orygin@sh.itjust.works 1 points 2 days ago* (last edited 2 days ago) (1 children)

Go had the same behavior until recently. Closures captures the variable from the for loop and it was a reference to the value.
They changed it because it's "common" in Go to loop over something and run a goroutine that uses the variable defined in the loop. Workaround was to either shadow the variable with itself before the loop, or to pass the value as an argument.
It's been a long time since I wrote c# so idk if the same is expected from the avg dev, but in Go it's really not explicit that the variable will be a reference instead of a plain value

[–] vithigar@lemmy.ca 1 points 2 days ago

i is still a value type, that never changes. Which highlights another issue I have with the explanation as provided. Using the word "reference" in a confusing way. Anonymous methods capture their enclosing scope, so i simply remains in-scope for all calls to those functions, and all those functions share the same enclosing scope. It never changes from being a value type.

[–] schteph@lemmy.world 3 points 1 day ago

In relational databases (sql) tables are actually table representations of relations, where a relation is defined as any subset of a Cartesian product.

In the first sql example we have a "person" relation, which is a subset of namesXgenders cartesian product. Because of this an element of the person relation ("Jimothy", null) cannot have "no gender" (as it wouldn't be a member of the cartesian product namesXgenders).

All of this leads to the following: null in sql doesn't mean "said element doesn't have that property", it means that said property is unknown.

With that in mind, the first example returns expected, if on the surface counterintuitive result: you don't know what Jimothy 's gender is, so when queried with NOT M NOT F, that row shouldn't be returned, because you can't just assume Jinothy's gender. The query should be, for those cases: not m, not f or unknown (ie is null).

Similarly for the second case. Email is not nonexistent, it's unknown, so it makes sense that the db allows you to insert more than one person with unknown email addresses.

I wouldn't say that either of these is an sql wtf, I would just call both of those tables badly designed.

[–] expr@programming.dev 3 points 2 days ago

For Haskell:

  1. I'd say this is definitely a wtf. Tuples should have never been given Foldable instances and I'd immediately reject any code that uses it in code review.

  2. I actually didn't know, so TIL. Not surprising since common wisdom is that a lot of the type class instances for Doubles are pretty weird/don't make a lot of sense. Just like in any language, floating point needs special care.

  3. This is jjust expected syntax and not really a wtf at all. It's very common for languages to require whitespace around operators.

  4. Agreed as wtf, the NegativeLiterals should be on by default. Just would be a pretty significant breaking change, unfortunately

  5. Not a wtf... What would you expect to happen? That operation is not well-defined in any language

[–] SpaceNoodle@lemmy.world 4 points 2 days ago (2 children)

Are we supposed to be able to scroll through the examples? Also, it's odd to see expected behavior in there.

[–] ryannathans@aussie.zone 4 points 2 days ago (1 children)

The C# example works exactly as you'd expect.. Actually most of them do

[–] naeap@sopuli.xyz 2 points 2 days ago (1 children)

The compiler optimization example (IIRC #6) was unexpected, when just looking at the code

[–] ryannathans@aussie.zone 3 points 2 days ago (1 children)

C++ is just fried hahahhahah

[–] naeap@sopuli.xyz 1 points 2 days ago (1 children)

Hey, don't you curse on my bread and butter! ;⁠-⁠)

[–] ryannathans@aussie.zone 1 points 1 day ago

I'm sorry you gotta deal with that

[–] Ephera@lemmy.ml 2 points 2 days ago (1 children)

Make sure, you're not blocking fontawesome.com in NoScript or whatever content blocker you might be using. All the UI buttons depend on that to be available...

[–] SpaceNoodle@lemmy.world 2 points 2 days ago

I'm raw-dogging Chrome and Android and there are no navigation controls, just the dropdown and reveal.

Enjoyed this :D