Mine is that the useState hook is an actual plague on the entire React ecosystem. Regardless of your opinions of React, if you wanna use something then use it right.

  • lapping6596@lemmy.world
    link
    fedilink
    arrow-up
    3
    ·
    1 day ago

    Okay, I do think this makes you sound crazy.

    I’m putting my question first before I rant about this cause I think I got way more into this response than is warranted.

    What problem does this design of just creating bespoke functions have that your design solves?

    def mean(numbers):
        return efficient calculation
    def normalization(numbers):
        return efficient calculation
    def geometric_mean(numbers):
        return efficient calculation
    
    

    Rant starts here:

    With your design, every time someone wants an average of a set of numbers, you’re reimplementing the actual logic. Then if someone forgets the +1 and writes:

    quotient_reduce(sum, lambda x,y: x, numbers)
    

    A bug is introduced that’s hard to spot in a review, won’t give an error, and is hard to write tests for. Turning the lambda to an enum meant to be passed around would solve a some of the accidental bugs, but keeps the interaction with the function more complicated.

    I really just don’t understand why you wouldn’t just write each efficient implementation as it’s own function and call it directly.

    • stingpie@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      24 hours ago

      It has to do with how you decompose problems. In the example I gave, I was trying to point out that arithmetic average, geometric average, and normalization are related problems. Consider applying this technique to something more complicated than averages: pathfinding. You could create a dozen different efficient functions, each with different considerations, but the core of the algorithm will always be the same. You can write pathfind_land(src, dest), pathfind_sea(src, dest), pathfind_air(src,dest), pathfind_sea_and_land(src,dest) etc. but it’s obviously better to write it as pathfind(src,dest, is_traversable) and select the most efficient implementation inside the function. It also allows you to use a not-optimized implementation automatically if you haven’t made an efficient implementation.