• Ephera@lemmy.ml
    link
    fedilink
    English
    arrow-up
    123
    ·
    2 days ago

    For optimal performance, you should rewrite it in Rust:

    inline_python::python! {
        print(js2py.eval_js("(number) => number % 2 ? 'odd' : 'even'")(number))
    };
    
    • DreadPirateShawn@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      90
      arrow-down
      3
      ·
      2 days ago

      The ternary syntax is really my only real gripe with python design – putting the conditional BETWEEN the true and false values feels so very messy to me.

        • l3mming@lemmy.world
          link
          fedilink
          arrow-up
          3
          arrow-down
          1
          ·
          edit-2
          2 days ago

          You clearly haven’t used Perl a lot. Perl’s ternary looks like:

          $even = $num % 2 ? “nay” : “yay”;

          Incidentally, it is also the same as PHP’s, but mainly because PHP stole it.

          • psud@aussie.zone
            link
            fedilink
            English
            arrow-up
            2
            ·
            2 days ago

            You do get the if in the middle of stuff though in the form print(debug message) if $debug

            • palordrolap@fedia.io
              link
              fedilink
              arrow-up
              4
              ·
              2 days ago

              Wait until you learn that postfix conditionals are syntactic sugar and the compiler* turns that line into the equivalent of $debug and print(debug message), putting the conditional in first place, a lot like the ternary operator.

              * Perl compiles to bytecode before running.

              The ternary operator itself isn’t implemented in terms of and (and or) but it could be.

              • psud@aussie.zone
                link
                fedilink
                English
                arrow-up
                4
                ·
                2 days ago

                Luckily I don’t need to read or write bytecode and all that matters to me is the syntax

      • porous_grey_matter@lemmy.ml
        link
        fedilink
        arrow-up
        1
        ·
        1 day ago

        I think it’s just what you’re used to. Imo it really matters that it’s keywords and not operator symbols - it’s meant to read closer to natural language. I prefer the c version when it’s ? and :, but I like them this way round when it’s if and else.

      • jacksilver@lemmy.world
        link
        fedilink
        arrow-up
        18
        ·
        2 days ago

        I think the idea is it reads more naturally, so you can read it like this return A if statement is true else return B

        • Nalivai@discuss.tchncs.de
          link
          fedilink
          English
          arrow-up
          1
          ·
          4 hours ago

          Is it really more natural for a non-programmer than “if statement is true than a else b”? I can’t evaluate because of decades of C, so for me the python logic is still bizarre.

          • jacksilver@lemmy.world
            link
            fedilink
            arrow-up
            1
            ·
            3 hours ago

            Maybe?

            For C at least it doesn’t have the actual words, so you need to know what the specific symbols are var = condition ? a : b. In that expression we don’t know what a or b are in regards to the condition.

            Python literally is a if condition else b, so it reads out what is being done.

      • BassTurd@lemmy.world
        link
        fedilink
        arrow-up
        9
        ·
        edit-2
        2 days ago

        Edit… I reread your comment and realized that python does it differently and that everything I typed was irrelevant… I’m still gonna leave it if anyone is interested in ternary expressions, but I suppose the answer to your question is, that’s just how python does it.

        That’s how ternary operators are designed to work. In essence, if you’re looking to do a single line if/then, you can directly assign a variable from the result of a ternary expression.

        As an example, I was scripting something earlier where there may or may not be a value returned from a function, but I still had to do something with that return value later. For this thing, I was using JavaScript.

        I ended up with:

        return platform == "name"  ? "Option 1" : "Option 2"
        

        If I were to write that out in a typical if/then it would be:

        if (platform == "name") {
            return "option 1"
        } else {
            return "option 2"
        }
        
        

        A ternary starts with a boolean expression, then the if true value, else the false value. That’s returned to either a variable or if in a function like my example, to the object calling the function. It’s just a way to write less code that in many cases is easier to read.

  • Digital Mark@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    40
    arrow-down
    1
    ·
    2 days ago

    print( ["even", "odd"][num % 2] )

    If you need to avoid evaluating the wrong branch:

    print( [lambda: "even", lambda: "odd"][num % 2]() )

  • SpaceNoodle@lemmy.world
    link
    fedilink
    arrow-up
    62
    arrow-down
    5
    ·
    2 days ago

    Please. That’s C’s ternary operator. JS is just a pile of garbage cosplaying as a programming language

  • PattyMcB@lemmy.world
    link
    fedilink
    arrow-up
    11
    arrow-down
    1
    ·
    2 days ago

    Yeah… I played that “serial killer or programming language inventor” game.

    The only one I was completely in disagreement with was the inventor of Python. He’s definitely a mass-murderer

  • kn0wmad1c@programming.dev
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    2
    ·
    edit-2
    2 days ago

    num % 2 isn’t a boolean result in any of these languages, so I feel like it would always output “odd”

    Edit: 0 is false, everything else is true.