6 ms·
Ternary is the only option if you are using "B ? X : Y" as an expression, want to get the value of X or Y. If-else is the only option if you want to have multi
by ProblemFactory 9y ago
Ternary is the only option if you are using "B ? X : Y" as an expression, want to get the value of X or Y.
If-else is the only option if you want to have multiple statements in a {} block, instead of only one function call.
So it seems more consistent to use ternary for expressions and if-else for statement control flow.
- Mithaldu 9y agoWhy are those the only options? I know languages where if/else blocks return values. (Rust, Julia, Python, Perl, R) I also know languages that allow easy ways to embed multi-line blocks into a ternary. (Rust, Perl) I'm sorry, but i really don't follow your logic, can you try to explain it more clearly?
- TeMPOraL 9y agoDoes Rust/Julia/Python/Perl/R feature ternary operators? The classic languages with ternary (C, C++, Java, PHP, JavaScript) all have the deficiency of distinction between statements and expressions. When everything in your language is an expression, the need for ternary disappears.
- Mithaldu 9y agoApparently Rust doesn't. Julia/Perl have it, Python has it with words, and R code can import it.
- tripzilch 9y agoIn Python the if/else block does not return a value. Python has a ternary operator, which does return a value. It just so happens this operator uses the tokens `if` and `else`. But it's the same thing what you'd write in C or Javascript as `C ? T : F`, would be written `T if C else F` in Python. Different order of arguments and tokens, but it's still the ternary operator and not an if/else block. You can't get a result from block statements in Python. Just because the ternary operator uses the same tokens as the if/else block, doesn't mean it's the same thing.
- steveklabnik 9y agoRust has "if is an expression" already anyway, so no ternary. let x = if true { 5 } else { 6 };
- ProblemFactory 9y agoMy comment, and the comments above it are all about C-style languages (C, C++, C#, Java). Languages with very different syntax like Python are of course going to have different style preferences. Eg. Python doesn't have a ?: operator at all, just an inline if-else expression, so the entire discussion of "should you use ?: for control flow" is meaningless for Python.
- Mithaldu 9y agoPerl is a C style language.