• entwine@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Microsoft hasn’t been known for good engineering for… a long time, but this seems like the type of idea an undergrad with zero real world experience might come up with (or I guess AI).

    This is why I avoid corporate languages like this. Swift and Go are also on my “hell no” list.

    • Victor@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      What’s wrong with this? I don’t get it. Perfectly understandable code to me. Can someone explain?

      • Err(()).unwrap()@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Looks a lot like more syntax sugar to me, to hide boilerplate code. It’s not necessarily a bad thing, but it can obfuscate the actual meaning of the code for the sake of brevity. What does A ??= B do at a glance, for example?

        It’s not exclusive to C# or “corporate” languages either. Rust has a fuckton of syntax sugar that makes it difficult to read.

          • Err(()).unwrap()@lemmy.world
            link
            fedilink
            arrow-up
            0
            arrow-down
            1
            ·
            1 year ago

            And that improves readability, how? Don’t get me wrong, I’m a big fan of the Elvis operator, but chaining multiple null coalescing assignments into a one-line expression is a chore to decipher.

            By the way, you forgot to return the result.

            • Victor@lemmy.world
              link
              fedilink
              arrow-up
              1
              ·
              1 year ago

              you forgot to return the result.

              What result? The result is A being assigned a value. That’s the result.

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

              And that improves readability, how?

              Because null checks are an extremely common operation to have to do, and this let’s your code read as just the business logic without these constant null checks breaking things up by multiple lines.

              It’s only not readable to you because you’re not used to them. That’s the case for literally every bit of new programming syntax that comes along.

              • Victor@lemmy.world
                link
                fedilink
                arrow-up
                1
                ·
                1 year ago

                Exactly. Not adding efficient things because “they will be new” is just silly. We adapt, as programmers. We learned the language a first time, so we know what it means to learn things. Just like in English when you come upon a word you don’t understand, either you understand it by its context, or you just look it up. Simple as that.

            • Lemminary@lemmy.world
              link
              fedilink
              arrow-up
              1
              ·
              1 year ago

              And that improves readability, how?

              By being used to it. As many have said, if you’re familiar with the syntax you have no problem parsing this.

  • UnderpantsWeevil@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 year ago

    When you’re an old-head who recognizes the old style it is easy to read the old style.

    When you’re a new-head who recognizes the new style it is easy to read the new style.

    When you’ve never seen C# before, they’re both gibberish.

    When you’ve got experience with both, it can get a little confusing but you’ll catch on without too much difficulty.

    But its fucking wild to think the left side is more readable than the right side, simply because it is more verbose.

    • Dejected Warp Core@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Eh, I haven’t touched C# since 2001. I agree that the more verbose style is more explicit, and so more readable. That said, I can figure most of the new style out from context.

      • => is clearly a closure declaration operator, similar to JavaScript.
      • x ??= y is shorthand for “assign y to x if x is not set, and return x” which is kind of nice.

      There must also be some shorthand going on for getter properties being the same as methods w/o an arglist (or even a ()).

      The only part that has me stumped is the unary question-mark operator: private static Singleton? _instance = null; I can think of a half-dozen things that could be, but I cannot decide what it’s doing that the original question-mark-free version isn’t.

      • KindaABigDyl@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        As others said, it means nullable, but to put it in more intuitive, less-jargony way - it’s a question mark bc you don’t know if the value is actually there or not. It could be a Singleton, but it isn’t until you check if there is a value. Whereas if you have, idk, int a no question mark, then you’re saying you actually have data.

        Essentially with C# 8, they “removed” null and reused the idea of null references in creating what is essentially an Option like in other languages. You either have some data of some type, or none (a null reference, in this case). By default, everything has to be there. Then when you need null, e.g. you may not have something initialized or an operation could fail, you explicitly grab for it. Thus it reduces null pointer bugs. If you don’t need nullability, you can ensure that you don’t accidentally write in an issue. It safety checks statements and parameters.