• chicken@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    0
    ·
    8 hours ago

    Early returns seems good, but personally I find code more confusing when things get arbitrarily separated out into functions, because to read it you have to keep scrolling back and forth between different parts of the page and either remembering where the other part is or typing a lot with ctrl-f, there’s more variables to hold results, and if the section of code to be separated into a function is picked just because of nesting depth reasons then it’s likely the function name isn’t going to describe what it does very clearly, leading to more scrolling and more having to keep track of things in your head.

    • MonkderVierte@lemmy.zip
      link
      fedilink
      arrow-up
      0
      ·
      2 hours ago

      I’ve had this too. It was cured by being forced to work with Java and enhance a PHP-framework. Dear god, the php-framework.
      But it literally increased my mental “stack size”. My shell and python scripts also got better.

      Ah, and also keep the “do one thing and do it good” tenet also to functions.

      • chicken@lemmy.dbzer0.com
        link
        fedilink
        arrow-up
        0
        ·
        5 hours ago

        How? I’m using vscodium. There are right click menus that bring you to function definitions and uses, but that isn’t necessarily faster than scrolling around and is still way more friction and more stuff you can’t see to hold in your short term memory.

        IDEs also have collapse/expand features which make nested or longer functions easier to navigate.

        • wols@lemmy.zip
          link
          fedilink
          arrow-up
          0
          ·
          3 hours ago

          In a decent IDE you can CTRL+click (or similar) on a function name to go to its definition. This is absolutely faster than scrolling, especially if you’ve got more than a couple dozen lines in the current file.

          When splitting functionality into smaller functions you would ideally not have to keep implementation details of other functions in short term memory.
          You only need to understand/remember the contents of the current function. Does it do what the name suggests? Cool, you’re done checking it.

          Of course, the “2 hard problems in computer science” meme exists for a reason - it’s not always straight forward to come up with good names. But in my experience, even when coming up with a fitting name is difficult, reducing nesting usually helps a lot with comprehension, mainly because it reduces scope and thereby the amount of information you need to hold in your head.
          The larger a function gets, the harder it is to check that it does what it’s supposed to.

          There is of course a balance to strike - trying to force every single function to be at most 3 lines is likely to make the code more difficult to understand and is, in my eyes, almost pathological. But a function that covers more than a screen is the other extreme that should be avoided when practical.