为什么 Python, Go, Rust, Kotlin 没有三元运算符 | 三目运算符 | 三元表达式 | 三目表达式 | Scala

作者: 今天晚放学分类: 计算机技术 发布时间: 2023-12-28 12:02:59 浏览:118503 次

为什么 Python, Go, Rust, Kotlin 没有三元运算符 | 三目运算符 | 三元表达式 | 三目表达式 | Scala

渴望蓝天彡:
C#感觉就是另一个极端,各种语法糖都有,经常看到看不懂的新语法,还得去翻文档看看是啥意思[笑哭]

【回复】c#还好吧,糖不是为了糖而糖,写起来真的很方便。喜新厌旧一直是微软的风格,学一下新特性也不是很费事
【回复】回复 @是大枫树呦 :点名swift,如果最后一个参数是函数的话,函数体可以放在括号外面: 比如 registerCallback("clicked"){ 函数体 } 是 registerCallback("clicked", { 函数体 }) 的语法糖 这是真的迷[笑哭]
【回复】c#还好吧。Kotlin的语法糖才叫反直觉。
S小白起名字好难:
Go就是单纯是Google觉得不需要,如果Google觉得需要今天马上加

【回复】回复 @Koumajou :两小时速通go[doge]异常处理习惯了try catch看到go的异常处理觉得实在是太阴间了[doge]
【回复】有的错误在中间几层调用完全不需要关心, 但 go 必须要层层 if 判,导致代码一大堆 if,真正的有价值的代码没多少。 而 py java 这种中间调用层不管,外层做一次 try/catch 就行。
【回复】回复 @Koumajou :虚假的erlang,真正的errlang
Dawn丶_晨曦:
Python的X if 条件 else y不就是三元表达式吗

【回复】python的condition_is_true if condition else condition_is_false就是三元运算符,行为和一般的... ? ... : ...是一样的,
【回复】回复 @weixiaokang :这是其他的 Z= bool ?X:Y 这是Python的 Z= X if bool else Y 这个结构可不是用if语句实现三元,而是和其他语言的三元运算符一样的,只是运算符表示方法特殊而已,?等效if, :等效else
【回复】有点标题党了,视频这个题目
今晚发滇:
估计怕滥用吧,三目运算符可以嵌套,最后变成一坨

【回复】那样我也觉得要比一坨if嵌套要好看。
【回复】If嵌套在一行最后也会眼花缭乱的
【回复】回复 @清离东苏 :好看其实在生产力环境中什么都不是。 真正意义上的好看是基于可读性可理解性的。 “一坨代码”其实只是增加了一小部分的可读成本。
CouchPotato沙发土豆:
个人觉得三元运算符可读性太差了,只是能让代码看起来简洁点[兔年]

【回复】因为电脑刚出来那时候,标准终端一行80个字符,一共25行,翻页还很慢,在那个年代能尽量省字符,一行内放下整个语句,同屏显示尽量多的程序代码,才是对开发者最大的友好,c里面各种简写,和c一起出现的unix系统,命令各种奇葩缩写也是这原因,要知道linux内核2020年才不强制要求每行代码不超过80个字符,unix之父还说过,如果穿越回去,最想干的事就是把creat函数最后那个e补上去。
【回复】用多了以后个人觉得还好。C里面似乎只有这儿用到问号,而冒号除了这里只有在switch里面用在标签后面。而且三元表达式几乎都用在赋值的场景。除非某些人为了炫技。非把三元表达式写得很复杂。
【回复】还行吧,只要别拿这玩意代替if esls ,可读性就不会差
聆听的声:
if-else是表达式的语言就没有三目运算符,因为if-else表达式就相当于是其他语言中的if-else语句加三目表达式了

【回复】回复 @喵喵_97 : if-else也可以写得很难看,主要是看人
【回复】三元表达式更加简洁,主要是有的人滥用,可读性搞得很差。
【回复】回复 @喵喵_97 : 簡而言之就是可讀性與簡潔性的取捨
发发黑灰为讳飞花回:
Python、Go、Rust、Kotlin 这些编程语言在设计时都没有传统意义上的三元运算符,这背后有多种原因。我们可以从语言设计哲学、易用性、可读性等多个角度进行分析。 1. 语言设计哲学 - Python: - Python 有一种类似三元运算符的条件表达式:`x if condition else y`。Python 的设计哲学强调简单和可读性,传统的 `condition ? x : y` 形式可能被认为不够直观或易读。 - Python 的创造者 Guido van Rossum 倾向于更易读和明确的语言结构。 - Go: - Go 语言的设计重点是简洁和清晰。Go 避免了一些可能导致复杂或不清晰代码的语言特性,如三元运算符。Go 语言认为使用完整的 `if-else` 语句更清晰和易于理解。 - Rust: - Rust 有 `if condition { x } else { y }` 形式的条件表达式,这与它强调的安全性和表达性相一致。Rust 设计者可能认为传统的三元运算符在表达复杂逻辑时可能不够明确。 - Kotlin: - Kotlin 同样支持 `if (condition) x else y` 形式的条件表达式。Kotlin 的设计重点之一是与 Java 的互操作性,同时提供更简洁的语法。Kotlin 的选择表明了它倾向于更结构化的条件表达式。 2. 可读性与维护性 - 代码清晰度: 使用传统的 `if-else` 语句比三元运算符在很多情况下更易读,尤其是在处理复杂的条件逻辑时。 - 维护性: 更清晰的代码结构有助于后续的代码维护和错误调试。 3. 避免滥用与复杂性 - 防止滥用: 三元运算符如果使用不当,可能导致代码难以理解。一些语言设计者可能选择不引入它,以避免这种情况。 - 减少语言复杂性: 每增加一个语言特性,都会增加学习和使用该语言的复杂性。有时候,省略某些特性是为了保持语言的整体简洁性。 结论 每种编程语言的设计选择反映了其创造者的哲学和目标。虽然三元运算符在某些语言中被广泛使用,但Python、Go、Rust、Kotlin等语言选择了不同的路径来表达条件逻辑,这些选择强调了代码的可读性、清晰度和维护性。每种方法都有其优势和适用场景,重要的是理解和适应你使用的语言的特点。

白兔味的芒果汁:
今天清理屎山时遇到了,5行代码用三目改成1行[笑哭]

【回复】三目运算嵌套反而不利于阅读
【回复】这十有八九是压缩后反编的。之前反编小程序js代码就这样。几十行变一行的。
【回复】回复 @ruchong :看场景了,简单场景赏心悦目
AlexTHU:
python这个太不美观了,a>b?a:b这么漂亮的结构它能写成a if a>b else b

【回复】if else的语顺太自然了,很自然地就能想到是该怎么写。而?:就语义来说,总感觉这个:有点怪
【回复】也没什么区别,不过有时候写串了还是会愣一下
【回复】其实写习惯了可读性也还行,也挺贴近日常语言顺序的
汀雨はなかん:
还有一个有趣的方向,为什么scala的循环没有break和continue

【回复】有breakable 但是scala偏向fp 让你用递归 [呲牙]
Kas1o:
感觉这种更不错,不需要加新语法[呲牙]

【回复】这个在视频里有提到,如果条件为真时不想执行另一个分支上的代码,这样写就不行了,除非规定两个参数都必须是函数/lambda,但这样写起来又太繁琐了
【回复】你这样会对两个表达式都求值 但是三目运算符具有短路特性的
【回复】回复 @凛酷Rebellion :并不,三元应该是if else的语法糖,行为应当完全一致
小坑同志:
python这个三目在我看来简直是灾难,他完全不符合逻辑思考过程,把判断条件放在中间还有些时候会导致阅读困难[无语]

【回复】用中文来思考当然不符合了,但是符合英语的思维
【回复】for循环的列表推导式也是,非常不符合逻辑顺序,不过比if…else好很多
迪安51:
Up,您这个视频是用什么软件做的?感觉效果超级棒啊。我也想试一下。说出来有点嫌丢人,我现在都用PPT做视频[笑哭][笑哭]

【回复】你对ppt一无所知 ppt可以做游戏[笑哭]
【回复】回复 @迪安51-数据王者 :个人感觉实质内容更重要点
幻の上帝:
(不算暴论)因为语言设计特别是想象力比较弱鸡。你if不搞成关键字直接当function name来个non-strict function call用不就结了?哪来那么多选择困难。 另外虽然顺序类似x if cond else y文化中立明显比:?弱。因为大部分常见自然语言表示if的语素都是前缀,这样多绕个倒装合法性弯弯对非母语学习者怕是更不友好。

Kirick:
[脱单doge]up这种风格视频好喜欢,丝滑流畅,做起来花了不少心思的吧,三连了

GO 编程 三元 表达式 RUST 运算符 Python Kotlin

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!