programming-languages - 是否有a = b <operator> a的复合赋值运算符(其中<operator>不是可交换的)?

标签 programming-languages compound-assignment compound-operator

在许多语言中,a = a + b可以写成a + = b
在数值运算的情况下,a + b与b + a相同,因此单个复合运算符就足够了。

同样,a = a-b可以写成a-= b。

但是,a-b不等于b-a。因此,复合赋值运算符不适用于a = b-a

那么,是否存在操作 a = b op和的复合赋值运算符(其中op可以是+,-,*,/,%和顺序很重要)?

[非交换运算]

最佳答案

不,没有。

速记的由来

我怀疑这个缩写来自汇编语言,其中ADD指令正是这样做的-接受两个操作数,进行加法运算并将其存储到第一个。

我会说人们习惯于这样思考,因此这种模式也以a += b的简写形式出现在C语言中。其他语言是从C那里获得的。

我认为没有特别的理由要不拥有a = a + ba = b + a。我认为在编程中不需要经常使用这两种方法。原因是历史性的。与我们使用QWERTY键盘布局而不使用其他布局的原因相同。

更新:See this,这是一个神话,因为C基于B语言而不是来自汇编语言。来历不明确。

可能的原因

  • 每个运算符makes the language more complex。 Python支持运算符重载,因此有更多工作要做。
  • +=比较时很少使用。
  • 人们从汇编语言开始更多地使用+=这种操作,而不是a = b + a,因此他们可以接受这样的事实,因为它不存在速记,也没有要求。
  • 易读性问题。
  • 缺少适当的语法。您将如何设计?

  • 可能的解决方案

    最好的解决方案是只编写a = b + a,因为乍一看它清晰易读。由于相同的原因(可读性)(更新:who knows?),Python不提供从C语言和其他语言已知的a++。您必须输入a += 1+=速记法对于编程初学者来说也不是很容易理解,但是仍然可以以某种方式至少猜出这是怎么回事。它是传统,懒惰和可读性之间的折衷。

    如果没有传统,那么可读性至少应该在Python中获胜。因此,一个人应该清楚地写一些字符,而不是寻找一个简写形式。 a = b + a就是这种情况。

    笔记

    如果要串联更多的字符串,则应注意.join()以提高性能。

    关于programming-languages - 是否有a = b <operator> a的复合赋值运算符(其中<operator>不是可交换的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13348261/

    相关文章:

    objective-c - ObjC 属性和 C 运算符

    java - 为什么 Java 没有条件与和条件或运算符的复合赋值版本? (&&=, ||=)

    c - 使用复合赋值的优势

    Java:+=等价

    c - 有没有办法访问 C 的内置关键字,如 'int' 或 'char' 或 'return' ?

    windows - 创建一个可在任何地方运行的小型 'window-form' 应用程序

    programming-languages - 实时系统编程使用哪些语言?

    c# - 单调用三元运算符