Modern Programming

581 points · 74 comments · view on lemmy.world

74 Comments

entropicdrift@lemmy.sdf.org · 141 pts · 1y (38 replies)
print("odd" if num % 2 else "even")

That's the native python version, for those curious

DreadPirateShawn@lemmy.blahaj.zone · 88 pts · 1y (25 replies)

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.

balsoft@lemmy.ml · 22 pts · 1y (4 replies)

Eh, reads pretty naturally to me. That said, (like I lisp)

Shareni@programming.dev · 16 pts · 1y (1 reply)

Lisps makes more sense to me though

(if condition a b)

VS

a if condition else b

balsoft@lemmy.ml · 9 pts · 1y

I was more talking about (+ a b) and such.

rovingnothing29@lemmy.world · 1 pts · 1y (1 reply)

Oh, (you) (really) (like) (Lisp)? (That's) (great!)

hydroptic@sopuli.xyz · 5 pts · 1y
[ removed ]
rbos@lemmy.ca · 13 pts · 1y (15 replies)

It's kinda natural to me having used Perl a lot.

SpaceNoodle@lemmy.world · 22 pts · 1y (10 replies)

That's not quite the argument you might think it is

rbos@lemmy.ca · 4 pts · 1y (9 replies)

Argument?

SpaceNoodle@lemmy.world · 14 pts · 1y (8 replies)

You know, the stuff in @_

rbos@lemmy.ca · 1 pts · 1y (7 replies)

heheh. I wasn't really making an argument though

SpaceNoodle@lemmy.world · 1 pts · 1y

The joke was that Perl is a clusterfuck

l3mming@lemmy.world · 2 pts · 1y (3 replies)

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 · 2 pts · 1y (2 replies)

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

palordrolap@fedia.io · 5 pts · 1y (1 reply)

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 · 4 pts · 1y

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

idunnololz@lemmy.world · 3 pts · 1y (2 replies)

At least you guys have ternary syntax cries in kotlin.

aubeynarf@lemmynsfw.com · 1 pts · 1y
[ removed ]
Aqarius@lemmy.world · 1 pts · 1y

It's really special to not have ternary, but have Elvis.

porous_grey_matter@lemmy.ml · 1 pts · 1y

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.

Gork@sopuli.xyz · 9 pts · 1y (4 replies)

That's way too non-convoluted enough

entropicdrift@lemmy.sdf.org · 18 pts · 1y (3 replies)

Python is kinda like that in general, unless you try to make it read like ass

wise_pancake@lemmy.ca · 6 pts · 1y (1 reply)

You would not believe the number of people I’ve interviewed who excel at making Python read like ass.

entropicdrift@lemmy.sdf.org · 6 pts · 1y

I mean, it does have enough ways to write the same thing that it can really allow for some funny code golf, but some people just have no sense of readability whatsoever.

Colloidal@programming.dev · 5 pts · 1y

Clearly an inferior language. /s

Kaboom@reddthat.com · 5 pts · 1y (5 replies)

Why is the return first?

jacksilver@lemmy.world · 18 pts · 1y (3 replies)

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

entropicdrift@lemmy.sdf.org · 4 pts · 1y

Yep, it's this

Nalivai@discuss.tchncs.de · 1 pts · 1y (1 reply)

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 · 1 pts · 1y

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 · 9 pts · 1y

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.

laurelraven@lemmy.zip · 2 pts · 1y

Oh wow, I think I hate that... Condition between the results? Yuck.

Ephera@lemmy.ml · 124 pts · 1y (3 replies)

For optimal performance, you should rewrite it in Rust:

inline_python::python! {
    print(js2py.eval_js("(number) => number % 2 ? 'odd' : 'even'")(number))
};
ATPA9@feddit.org · 70 pts · 1y (2 replies)

And now you can use wasm to run it in a browser!

victorz@lemmy.world · 24 pts · 1y (1 reply)

Full circle 😆

ulterno@programming.dev · 11 pts · 1y

Make sure the browser is made using Rust and run on a VM running on Linux, compiled to WASM.

SpaceNoodle@lemmy.world · 58 pts · 1y (6 replies)

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

victorz@lemmy.world · 4 pts · 1y (5 replies)

Why do you say it's a pile of garbage?

SpaceNoodle@lemmy.world · 20 pts · 1y (4 replies)

Because of all the garbage

Fillicia@sh.itjust.works · 8 pts · 1y (2 replies)

Clearly the garbage collector is too effective

filcuk@lemmy.zip · 5 pts · 1y (1 reply)

No they're not supposed to be piling it up

piccolo@sh.itjust.works · 8 pts · 1y

Is a garbage collector not a garbage disposal. Smh.

victorz@lemmy.world · 1 pts · 1y

One example that's giving you problems? Maybe even on a daily basis if you use it for work? What's garbage about it?

mdhughes@lemmy.sdf.org · 41 pts · 1y (3 replies)

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

If you need to avoid evaluating the wrong branch:

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

FireIced@lemmy.super.ynh.fr · 9 pts · 1y (2 replies)

Cursed

gamma@programming.dev · 13 pts · 1y (1 reply)

Not as cursed as

print("eovdedn"[n%2::2]) 
FireIced@lemmy.super.ynh.fr · 1 pts · 1y

Indeed

owl@infosec.pub · 19 pts · 1y

Just send pseudo code to AI and compile straight to binary.

scrubbles@poptalk.scrubbles.tech · 12 pts · 1y

Peak programming

capuccino@lemmy.world · 11 pts · 1y (4 replies)

I love something = condition and result1 or result2 in lua

Randelung@lemmy.world · 10 pts · 1y (2 replies)
SatyrSack@lemmy.sdf.org · 1 pts · 1y (1 reply)

Are you just referring to how Python uses the English and/or instead of the more common &&/||? I think what the user above you was talking about was Lua's strange ternary syntax using and/or.

lime@feddit.nu · 6 pts · 1y

no, the linked table shows how python also returns the first non-falsey result of an a or b expression rather than just giving a boolean. it's useful for initialising optional reference args:

def foo(a: list = None)
    a = a or []

works with and as well.

capuccino@lemmy.world · 1 pts · 1y

often I do a function called elvis XD with the next signature elvis(condition, res1, res2)

PattyMcB@lemmy.world · 10 pts · 1y (1 reply)

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

conditional_soup@lemm.ee · 6 pts · 1y

Are you sure it isn't just that he's Dutch?

kn0wmad1c@programming.dev · 0 pts · 1y (14 replies)

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.

moomoomoo309@programming.dev · 8 pts · 1y (5 replies)

All of those languages will convert numbers into booleans, 0 is false, all other numbers are true.

kn0wmad1c@programming.dev · 3 pts · 1y (2 replies)

Ah that makes sense.

SatyrSack@lemmy.sdf.org · 1 pts · 1y (1 reply)

It doesn't make sense. I understand it, but it doesn't make sense.

Lifter@discuss.tchncs.de · 1 pts · 1y

I agree. If anything it should check if there is a nuumber and 0 is clearly a number.

kn0wmad1c@programming.dev · 1 pts · 1y
[ removed ]
kn0wmad1c@programming.dev · 1 pts · 1y
[ removed ]
sleeplessone@lemmy.ml · 5 pts · 1y (1 reply)

In JS at least, there's a concept of truthiness and falsiness. 0, undefined, null, and a few other non-boolean values are treated as false if used in conditionals and logical operations, while every other value is treated as true. I'm pretty sure python has something similar.

Hammerheart@programming.dev · 2 pts · 1y

It does. Empty collections, 0, None

Kaboom@reddthat.com · 3 pts · 1y

0 is false in C, Python, and JS. It should work

marcos@lemmy.world · 3 pts · 1y

You'd be surprised.

But seriously, numbers can be used as booleans in an impressive number of languages. Including machine code for almost every machine out there.

Maven@lemmy.zip · 2 pts · 1y (2 replies)

In JS 0 is the same as False

Lifter@discuss.tchncs.de · 1 pts · 1y (1 reply)

They are not the same, but 0 can be implicitly converted to false.

What do you get if you do: 0 === false

Lysergid@lemmy.ml · 1 pts · 1y

Explosion?

Colloidal@programming.dev · 1 pts · 1y

The joys of dynamic typing.