A small collection of WTF code snippets sorted by language.

  • @[email protected]
    link
    fedilink
    16
    edit-2
    1 hour 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”

  • @FourPacketsOfPeanuts
    link
    17
    edit-2
    2 hours ago

    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.

      • @FourPacketsOfPeanuts
        link
        2
        edit-2
        40 minutes 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

  • @[email protected]
    link
    fedilink
    34 hours 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

  • @[email protected]
    link
    fedilink
    77 hours ago

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

    • @[email protected]
      link
      fedilink
      1
      edit-2
      15 minutes ago

      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

    • @[email protected]OP
      link
      fedilink
      47 hours ago

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

    • r00ty
      link
      fedilink
      16 hours ago

      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.

      • @[email protected]
        link
        fedilink
        15 hours 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.

  • @[email protected]
    link
    fedilink
    English
    87 hours ago

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

  • @SpaceNoodle
    link
    48 hours ago

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