• count_dongulus@lemmy.world
    link
    fedilink
    arrow-up
    6
    ·
    3 hours ago

    Not exactly aimed at language keywords (although it is aimed at the language designers who decided abbreviations in keywords are acceptable):

    I hate abbreviations in source code so fucking much. Reading is more of software engineering than writing. If you cannot be bothered to type a whole word because typing is hard for you, find a different job. Do not force others to engage in mental gymnastics to understand what the fuck a variable or function is supposed to mean.

    • Static_Rocket@lemmy.world
      link
      fedilink
      English
      arrow-up
      4
      ·
      2 hours ago

      There was a rather famous piece of software at my last job. Guy writing it wanted job security. A lot of the core variables of the application were named based on the sounds a helicopter made. God damn onomatopoeia variables. Pretty sure that shit is still in use somewhere.

    • crimsonpoodle@pawb.social
      link
      fedilink
      arrow-up
      1
      ·
      3 hours ago

      I get that but also can be kinda nice to have density so that you can read more of the program on a single display.

  • ulterno@programming.dev
    link
    fedilink
    English
    arrow-up
    4
    ·
    7 hours ago

    While C feels fine without having a keyword for function, I feel like bash would have benefitted from it.

      • MajorasTerribleFate@lemmy.zip
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        3 hours ago

        Dude, I set up wild crap with Autohotkey, for a job. I had it logging in to vendor websites where it would pull up clients, compare contact info to our local system, check if recent payment had been made, pull appropriate client docs (if not already in our local system), and leave notes for me before moving onto the next client on the list. I had AHK doing most of the job I was hired for.

        Thankfully, the multiple vendor websites made occasional changes to their layouts, color schemes, etc. so all my methods of navigation would inevitably break, requiring me to maintain it.

        I was also building stuff where it would automatically fire off an email at certain points if there was a special change to tell the client about, if payment wasn’t seen on the vendor site by certain deadlines, etc.

        That job eventually fell through for unrelated reasons (they moved me off that to somewhere they needed me more, and several years later got pushed out of that position and the company entirely).

        Where do I get a job that let’s me build that stuff again?!

    • meekah@discuss.tchncs.de
      link
      fedilink
      arrow-up
      5
      arrow-down
      1
      ·
      8 hours ago

      You press c and t using the same finger, and i with another. So since you need to use the same finger twice in a row, also moving it a fair distance in between, your other finger just presses the button a little bit too soon, and that’s how you end up with funciton

      • drath@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        5 hours ago

        I just recorded myself typing it a dozen of times, and it always goes as:

        F - Left index U - Right middle N - Right index C - Left index T - Left middle I - Right middle O - Right ring N - Right index

        I usually generally follow zones while typing, but for frequent words like this I tend to break it, which mostly make sense, like using middle finger for U to free index finger for N, and then moving it one over for a quick IO without lifting the index from N), but then that CT thing is a decades-long ingrained thing that I didn’t even realize how weird it was until I looked closely at it. It reminds me of that thing that bothers me on my other kb which is ortholinear and I always struggle in games with it because I can’t press 2 while holding Shift and W at the same time. On normal keyboards I use ring fingers and slightly twist my wrist clockwise, but on ortholinear it’s not there, and it’s actually easier to use index finger and twist the other way, or roll middle over without lifting, but it’s very hard to break that habit.

      • SlurpingPus@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        8 hours ago

        ‘c’ and ‘t’ should definitely be hit with different fingers if you do touch-typing. But with one hand, that’s true.

  • Laser@feddit.org
    link
    fedilink
    arrow-up
    22
    arrow-down
    1
    ·
    21 hours ago

    Not sure I’d call what bash has functions. They’re closer to subroutines in Basic than functions in other languages, as in you can’t return a value from them (they can only return their exit code, and you can capture their stdout and stderr). But even then, they are full subshells. It’s one of the reasons I don’t really like Bash, you’re forced into globally or at least broadly-scoped variables. Oh, and I have no clue right now how to find where in your pipe you got a non-null exit code.

    It’s not a big problem for simple scripting, but it makes things cumbersome once you try to do more.

    • Caveman@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      8 hours ago

      You’re not forced into global forced variables, but they’re the default. Use the local keyword in front of the variable declaration for nicely scoped variable.

      It’s not that cumbersome to do things like

      local date=`date`
      echo "$date"
      

      but in all honesty the syntax sucks ass because it’s not intuitive. If statements suck ass, passing variables has to be done via command line arguments sucks ass, switch statements suck ass, making structured data sucks ass (jq is nice though).

      I agree with you that bash really sucks when you get to anything more than 10 lines and at that point I’d take literally prefer Dreamberd.

      • Laser@feddit.org
        link
        fedilink
        arrow-up
        1
        ·
        5 hours ago

        I didn’t mean that bash has no local variables, but rather that if you want to use a function as such without capturing stdout, you need variables that are scoped across your functions, which is usually global or at least effectively global.

        • Caveman@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          4 hours ago

          Turns out you can, by using () instead of {} in the function declaration you can run the function in a subshell where changes to variables are scoped to the subshell and functions are local.

    • SlurpingPus@lemmy.world
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      8 hours ago

      where in your pipe you got a non-null exit code

      First thing you want is set -e and set -o pipefail. That should report the errors in human-parseable form.

      Second, to capture exit codes from each command/program, you have to run each of them in sequence yourself, connected by pipes that you create via mkfifo — the same way as you would do it in any other programming environment. Bash’s | pipes are just a convenient shorthand for this,so if you want full control, you have to ditch the convenience.

    • SlurpingPus@lemmy.world
      link
      fedilink
      arrow-up
      4
      ·
      edit-2
      15 hours ago

      Functions are definitely not subshells in Bash, seeing as anything modifying the environment, like pyenv and such, is implemented as functions instead of scripts — specifically because functions are run in the same shell instance.

      Unless ‘subshell’ means something in the vein of ‘like a new shell, but not really’.

      • Laser@feddit.org
        link
        fedilink
        arrow-up
        2
        ·
        12 hours ago

        Functions are definitely not subshells in Bash

        You’re right, my bad, I got this mixed up with something else.

        • SlurpingPus@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          edit-2
          8 hours ago

          I’m gonna bet yes for the simple reason that various helper scripts exist that do advanced cd history, with fuzzy search and whatnot, and they can’t be implemented as anything other than functions.

    • yetAnotherUser@discuss.tchncs.de
      link
      fedilink
      arrow-up
      5
      ·
      17 hours ago

      I really like bash when dealing with even somewhat advanced scripting. Like the 300 LOC scraper I have written over the past two days which horribly parses HTML files using grep | sed.

      It’s genuinely so much more fun to do this with Bash than, say, Python. I have once written a scraper using Beautifulsoup and I have no desire to do so ever again.

      Honestly, only Haskell manages to beat Bash in how satisfying it feels when you manage to get something working well.

      • Laser@feddit.org
        link
        fedilink
        arrow-up
        2
        ·
        12 hours ago

        Bash has its upsides too, like the fact that it has arrays / lists and dictionaries / hashmaps. In my opinion, it gets iffy though when you need to do stuff with IFS; at that point one might be better off just using specialized tools.

        Not saying working bash isn’t good enough, but it can break in very surprising ways is my experience.

  • NotSteve_@piefed.ca
    link
    fedilink
    English
    arrow-up
    34
    ·
    edit-2
    22 hours ago

    def (): is pretty nice

    Edit: also as someone doing a bunch of CI work right now, Bash can GTFO (unless the alternative is whatever Windows is doing)

  • Speiser0@feddit.org
    link
    fedilink
    arrow-up
    11
    ·
    1 day ago

    C++ has []{}.

    (You can also add more brackets if you wish to do nothing longer: []<>[[]]()[[]]{}())