• Bobo The Great
    link
    fedilink
    76
    edit-2
    4 days ago

    Partially unrelated to the meme, but I find it almost malicious how some python keywords are named differently from the nearly universal counterpart of other languagues.

    This/self, continue/pass, catch/except and they couldn’t find a different word for switch so they just didn’t implement it.

    It’s as if the original designers purposefully wanted to be different for the sake of it.

    • lime!
      link
      fedilink
      English
      644 days ago

      pass and continue are absolutely not equal (pass is a noop, and python has a continue keyword that does what you think), and switch is called match like in many other languages. except is weird though.

      • @Phen@lemmy.eco.br
        link
        fedilink
        114 days ago

        “except” is also used in Pascal (or at least the main derivatives of it), but not sure if that’s older than its use in Python or not.

        • @Archr@lemmy.world
          link
          fedilink
          11 day ago

          This is very true. Match statements are much more powerful that switch statements in any other language.

          For instance:

          • matching objects very specifically
          • if conditions within case statements
          • pulling variables from inside of the object directly.
      • @Jambalaya@lemmy.zip
        link
        fedilink
        English
        144 days ago

        Isn’t self not actually a keyword? Like you can name the first variable in a class method anything and it will behave like self.

        • Diplomjodler
          link
          fedilink
          164 days ago

          You could use “this” instead of “self”. And if you want a lynch mob of Python programmers outside your house, make a push request with that to some commonly used package.

            • Diplomjodler
              link
              fedilink
              9
              edit-2
              4 days ago

              I’ve been wondering about the noise.

              Edit: turns out, they weren’t there to lynch me. They just gave me a two hour lecture on proper usage of git.

            • lime!
              link
              fedilink
              English
              74 days ago

              only github users. git itself doesn’t have PRs, and other forges call them different things. gitlab calls them merge requests, pico calls them patch requests…

    • @CanadaPlus@lemmy.sdf.org
      cake
      link
      fedilink
      134 days ago

      PHP naming “::” a Paamayim Nekudotayim is also pretty infamous.

      When I’m designing shit, I’m pretty zealous about borrowing terminology from anything even vaguely related to avoid this.

        • @CanadaPlus@lemmy.sdf.org
          cake
          link
          fedilink
          1
          edit-2
          3 days ago

          Absolutely cursed, lol.

          So not only did they decide to randomly include Hebrew in their language, because I guess they were feeling kabbalistic, but they got the Hebrew wrong. In what way does any of that increase usability or even make them look competent?

          It reminds me of the INTERCAL manual, which was a joke:

          This precedence (or lack thereof) may be overruled by grouping expressions between pairs of sparks (’) or rabbit-ears (").

    • Scrubbles
      link
      fedilink
      English
      134 days ago

      Iv come to loathe the “pythonic way” because of this. They claim they wanted to make programming easier, but they sure went out of their way to not follow conventions and make it difficult to relearn. For example, for me not having lambdas makes python even more complex to work with. List operations are incredibly easy with map and filter, but they decided lambdas weren’t “pythonic” and so we have these big cumbersome things instead with wildly different syntax.

          • @jacksilver@lemmy.world
            link
            fedilink
            54 days ago

            I mean, there is a lot wrong with it, but every language has its quirks. Generally I like discussing it’s actual flaws cause it helps me better understand the language.

        • @vrighter@discuss.tchncs.de
          link
          fedilink
          64 days ago

          a lambdo which can only contain one expression, and not even a statement is pretty much useless. For anything nontrivial you have to write a separate function and have the lambda be just a function call expression. Which completely defeats the point

      • Speaking of big cumbersome things with wildly different syntax have you tried a ternary operation in python lately? Omg that thing is ugly. JavaScripts is hard to beat.

        uglyTernary = True: if python_syntax == “shit” else: False prettyTernary = javascript_syntax == “pretty” ? true : false

        • @limdaepl@feddit.org
          link
          fedilink
          English
          34 days ago

          That’s just because you’re used to it. The pythonic ternary is structured like spoken language, which makes it easier to read, especially if you nest them.

          Is there an objective argument for the conventional ternary, other than „That’s how we’ve always done it!“?

          • @vrighter@discuss.tchncs.de
            link
            fedilink
            10
            edit-2
            4 days ago

            I don’t read spoken language, but I do read written ones. The problem with python’s ternary is that it puts the condition in the middle, which means you have to visually parse the whole true:expression just to see where the condition starts. Which makes it hard to read for anything but the most trivial examples.

            The same goes for comprehensions and generators

          • Ephera
            link
            fedilink
            English
            14 days ago

            The conventional ternary is structured like a normal if-else. In fact, in many languages with functional influence, they’re the same thing.

            For example, you can write this in Rust:

            let vegetable = if 3 > 4 { "Potato" } else { "Tomato" };
            
      • @limdaepl@feddit.org
        link
        fedilink
        English
        34 days ago

        If the conventions suck you have to break them. How else can you improve things?

        map and filter are almost always inferior to generators and comprehension expressions in terms of readability. If you prefer the former, it’s just because you got used to it, not because it’s better.

    • SolNine
      link
      fedilink
      34 days ago

      List and Array terminology also bothers me … Why not just call it an array?

      • @Pyro@programming.dev
        link
        fedilink
        11 day ago

        But python lists are not like the base arrays in other languages. They function more like List<> or vector (C++ had to be special) and are named appropriately.

  • @WolfLink@sh.itjust.works
    link
    fedilink
    444 days ago

    In Python, self is not a keyword, it’s a conventional variable name. You can replace all instances of “self” with “this” and your code will work the same.

      • Die Martin Die
        link
        fedilink
        5
        edit-2
        2 days ago

        Kinda.

        Lua defines it implicitly only when you use the

        function foo:bar(a, b, c) -- note the colon
        

        syntactic sugar, which gets translated to

        function foo.bar(self, a, b, c) -- note the period
        

        In all cases, self is a regular variable name. You can even redeclare a new local with that name even when the old one is in scope.

        Edit: some typos

  • TBF the last two bullet points are verbose descriptions of the thing it means in C++, Java, and Python too. It’s just that in JS, “this” can also be used in other places.

    But yeah, in practice, every time I write JS I want to throw my hands in the air and shout “this is bullshit”, but never know what “this” refers to… :D

  • @xiii@lemmy.world
    link
    fedilink
    7
    edit-2
    4 days ago

    I was working on a C code base with classes, inheritance, and polymorphism, all done by hands and macros.

    Something like

    typedef struct s_some_class {
        void (*method)(this *s_some_class);
    } t_some_class;
    

    Overall, learning C was the best enabler in my whole career. For instance I was learning Python by tinkering with CPython VM, so when I see these ‘WAT’ quircks I know exactly what’s up.

    • @bestelbus22@lemmy.worldOP
      link
      fedilink
      34 days ago

      Interesting, how did they do inheritance? Something like void *super? Also why not switch to CPP if you wanna do OOP?

      • @xiii@lemmy.world
        link
        fedilink
        22 days ago

        In general, ‘classes’ declarations were done with macro. I don’t remember the exact code — something akin to

        BEGIN_CLASS(A, Parent);
        CLASS_MEMBER(a...)
        END_CLASS();
        

        The project had started before C++ existed, and the switch would be too costly. It’s not just OOP part, also reflection mechanism with bindings to the homemade scripting language, and multi-platform UI library. It was a gem of its time.

    • @ryedaft@sh.itjust.works
      link
      fedilink
      English
      44 days ago

      You can use anything that doesn’t start with a digit or punctuation as a variable name (underscore beginning also allowed) unless it’s a keyword.

      • @funkless_eck@sh.itjust.works
        link
        fedilink
        3
        edit-2
        4 days ago

        _ (sic) as a variable name is often used when a function returns multiple outputs but you only want one

         def my_function:
              return 1, 2, 3
        
         _, two, _ = my_function()
        
        • @Archr@lemmy.world
          link
          fedilink
          11 day ago

          _ can also be used in the python interactive terminal to mean ‘last return value’

          Ie:

          > 'string'
          'string'
          > a = _
          > print(a)
          string
          
        • @ryedaft@sh.itjust.works
          link
          fedilink
          English
          6
          edit-2
          3 days ago

          Underscore alone is a special variable name and I’m pretty sure anything assigned to it goes straight to garbage collection. Whereas _myvariable is typically used to indicate a “private” class variable or method (Python doesn’t have private so it’s just a convention).

  • @Demdaru@lemmy.world
    link
    fedilink
    44 days ago

    Not much experience, but quickly learned .bind() in JS after it switched me to window instead of object.

    • @bleistift2@sopuli.xyz
      link
      fedilink
      English
      24 days ago

      The key is to not reassign function names to local variables.

      const print = obj.toString
      print() // gives you a bad time