• luciferofastora@feddit.org
      link
      fedilink
      arrow-up
      4
      ·
      edit-2
      15 hours ago

      Naming

      Both variables and constants can be named with any Unicode character or string.

      const const letter = 'A'!
      var const 👍 = True!
      var var 1️⃣ = 1!
      

      This includes numbers, and other language constructs.

      const const 5 = 4!
      print(2 + 2 === 5)! //true
      

      This is a recipe for disaster I kinda wanna try

    • Revan343@lemmy.ca
      link
      fedilink
      arrow-up
      1
      ·
      15 hours ago

      If you’re unsure, that’s ok. You can put a question mark at the end of a line instead. It prints debug info about that line to the console for you.

      print("Hello world")?

      Fucking sold, I was gonna learn rust but you’ve changed my mind

    • Lemminary@lemmy.world
      link
      fedilink
      arrow-up
      7
      ·
      edit-2
      1 day ago

      In the language Gulf of Mexico

      HUH?

      Some languages start arrays at 0, which can be unintuitive for beginners. Some languages start arrays at 1, which isn’t representative of how the code actually works. Gulf of Mexico does the best of both worlds: Arrays start at -1.

      Oh, I see they’re serious! Time to ditch JavaScript.

  • krooklochurm@lemmy.ca
    link
    fedilink
    arrow-up
    5
    ·
    1 day ago

    Bash was derived by a team of criminally insane programmers in the bowels of a South American asylum so deep in the jungle no country can rightfully claim it as its own. It is the product of the demented keystrokes of the damned, possessing a singular logic so alien that its developers can hardly be said to be human at all.

    And I wouldn’t have it any other way.

  • count_dongulus@lemmy.world
    link
    fedilink
    arrow-up
    8
    ·
    1 day 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
      8
      ·
      1 day 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.

  • ulterno@programming.dev
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 day ago

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

    • excess0680@lemmy.world
      link
      fedilink
      arrow-up
      2
      ·
      12 hours ago

      Bash (specifically Bash, not POSIX sh) does have a keyword for functions (function), but it’s optional.

      • ulterno@programming.dev
        link
        fedilink
        English
        arrow-up
        1
        ·
        11 hours ago

        Ooh nice.

        The optional bit messed it up, because even though I can make my scripts easier for me, other’s scripts won’t be.
        But then bash had to be usable with sh scripts, so I get it.

        • excess0680@lemmy.world
          link
          fedilink
          arrow-up
          2
          ·
          5 hours ago

          Right. It’s optional so that Bash remains backwards compatible as a superset of POSIX sh. If you’re working with exclusively Bash, though, it’s nice to use as syntactic sugar if nothing else.

      • dogs0n@sh.itjust.works
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        17 hours ago

        Autohotkey? Naw, you wanna setup a daily cron job to read and replace every one of your common typos with the correct spelling. That’s the way, trust me.

        Edit: Daily cron job typo correction.

  • Laser@feddit.org
    link
    fedilink
    arrow-up
    18
    ·
    2 days 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
      ·
      1 day 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
        ·
        1 day 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
          ·
          1 day 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.

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

            That doesn’t help you if you want to get the result of something that happened in the function without capturing stdout, does it?

    • SlurpingPus@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      7 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
      2 days 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
        ·
        2 days ago

        Functions are definitely not subshells in Bash

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

  • Speiser0@feddit.org
    link
    fedilink
    arrow-up
    11
    ·
    2 days ago

    C++ has []{}.

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

    • masterspace@lemmy.ca
      link
      fedilink
      English
      arrow-up
      8
      ·
      edit-2
      2 days ago

      The equivalent in JavaScript / TypeScript would actually be function () {}, this is the syntax for named functions.

      C# is the same as bash though.

          • SpaceCowboy@lemmy.ca
            link
            fedilink
            arrow-up
            1
            ·
            2 days ago

            Yeah for whatever reason, FE devs want to make everything a const. It’s like a religious belief or something, it’s really kinda weird.

            const fun = () => { const something = “whatever” const array = []; array.push(someting)

            for (const thing of array) { if (thing === ‘whatever’) blah(thing) } }

            Semicolons? Optional. Which quotes you should use? Whatever you feel like! But you must declare things as a const wherever possible! Even if it’s an array that you’re going to be changing, declare it as a const because you should know that you can push things into a const array, and since it’s possible to declare it as a const, you must declare it as a const.

            Why is this? Nobody knows, but it’s important to FE devs that you use const.

            • brian@programming.dev
              link
              fedilink
              arrow-up
              2
              ·
              2 days ago

              semicolons? quotes? use a formatter and don’t think about it. I think js world has basically done this already.

              const is simpler. why would I declare an array as let if I’m not reassigning? someone can look at it and know they don’t have to think about reassignment of the reference, just normal mutation. ts has the further readonly to describe the other type of mutation, don’t abuse let to mean that.

              const arrow over named function? gets rid of all the legacy behaviors and apis. no arguments, consistent this, and no hoisting or accidental reassignment. the 2 places you should ever use named fn are generator or if you actually need this

              • SpaceCowboy@lemmy.ca
                link
                fedilink
                arrow-up
                1
                ·
                2 days ago

                Stylistically, you’re changing the array when you add something to it. Javascript is a janky language in the best of times, but FE devs like to artificially introduce additional unnecessary complexities on top of the jank.

                const is simpler. why would I declare an array as let if I’m not reassigning?

                Why would you declare a const that’s going to have different data every time to function is called?

                Now I’m thinking it’s a form of gatekeeping. Just an excuse for FE devs to throw out terms like “immutable” to make it sound like they know what they’re taking about. Y’all need to constantly sound like you know what you’re talking about when dealing with users, pretending weird stylistic choices have real technical reasons for them. But the BE devs know what you’re saying is complete bullshit LOL.

                • masterspace@lemmy.ca
                  link
                  fedilink
                  English
                  arrow-up
                  2
                  ·
                  edit-2
                  2 days ago

                  You are literally just describing the conceptual differences between functional programming and object oriented programming. It has nothing to do with front end vs backend, except for the fact that React has vastly popularized functional paradigms on the frontend.

                  If you come from a Java / Spring background, that will seem foreign, if you come from an express background it will feel natural.

                  Functional programming is extremely pleasant though. Its been described as what object oriented would look like if you actually followed all the SOLID principles. You should keep an open mind.

            • Ghoelian@piefed.social
              link
              fedilink
              English
              arrow-up
              5
              ·
              2 days ago

              The reason is very simple, performance. If a value doesn’t need to be changed, don’t declare it as mutable. This isn’t just a front-end thing btw.

              • SpaceCowboy@lemmy.ca
                link
                fedilink
                arrow-up
                1
                ·
                2 days ago

                Pushing something onto an array isn’t changing the array? It’s not changing the reference to the array, but from a style standpoint it doesn’t make sense.

                And if you’re declaring a const within the scope of a function, it’s still allocating memory when it enters the scope and disposing it when it leaves the scope, same as a variable. There’s no performance benefit to do this.

                Something like const CONSTANT_VALUE = “This never changes” has a performance benefit and is actually how other languages use constants. The value will always be the same, the compiler understands this and can optimize accordingly. If you’re declaring an iterator or the result of calling a webservice to be const it’ll be a different value every time it runs that code, so it’s not something a compiler can optimize. In style terms, it’s a value that’s different every time you get to that line of code, so why would you want to call it constant?

                You’re comment indicates the FE dev obsession with always using const stems from a misunderstanding of how computers work. But of course many religious beliefs originate from a misunderstanding of the world. Whatever man, I just make it a const to make the linter happy, because it’s dumb FE bullshit LOL.

                • masterspace@lemmy.ca
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  2 days ago

                  Lol.

                  Pushing something onto an array isn’t changing the array? It’s not changing the reference to the array, but from a style standpoint it doesn’t make sense.

                  So you’re arguing for writing things as they seem, not the way that computers treat them?

                  You’re comment indicates the FE dev obsession with always using const stems from a misunderstanding of how computers work.

                  Maybe rethink this.