Java 为什么不提供操作员在斯卡拉

Java 为什么不提供操作员在斯卡拉,java,scala,operator-keyword,Java,Scala,Operator Keyword,有一个运算符?:,可用于根据布尔表达式选择值。例如,表达式3>2?“true”:false将返回字符串“true”。我知道我们可以使用if表达式来实现这一点,但我更喜欢这种风格,因为它简洁优雅 在Java中,if和之间有区别:即如果是语句而?:是一个表达式。在Scala中,if也是一个表达式:它返回一个值,您可以将该值分配给变量 Scala中的if更像?:比Java中的如果: // In Scala 'if' returns a value that can be assigned to a v

有一个运算符
?:,可用于根据布尔表达式选择值。例如,表达式
3>2?“true”:false将返回字符串
“true”
。我知道我们可以使用
if
表达式来实现这一点,但我更喜欢这种风格,因为它简洁优雅

在Java中,
if
之间有区别:
如果
是语句而
?:是一个表达式。在Scala中,
if
也是一个表达式:它返回一个值,您可以将该值分配给变量

Scala中的
if
更像
?:比Java中的
如果

// In Scala 'if' returns a value that can be assigned to a variable
val result = if (3 > 2) "yes" else "no"
在Java中无法执行此操作:

// Illegal in Java, because 'if' is a statement, not an expression
String result = if (3 > 2) "yes" else "no"

因此,实际上没有必要使用
?:,因为它与if
完全相同,但具有替代(更模糊的)语法。

为了补充@Jesper所说的内容,如果您发现if
-
else
过于冗长,Scalaz提供了两种更简洁的替代方法:三元布尔运算符(
)类似C的语言,和
折叠功能

scala> import scalaz._
import scalaz._

scala> import Scalaz._
import Scalaz._

scala> (3 > 2) ? "True" | "False"
res59: java.lang.String = True

scala> (3 > 2).fold("True", "False")
res60: java.lang.String = True

按重要性的大致顺序:

1)
符号保留用于类型注释

2) 在Scala中,符号可以用作方法名和值名的标识符。标准键盘上可用的运算符数量有限,因此,如果您决定将其中两个用作关键字,则会减少可使用的运算符池(请参见脚注了解为什么必须用作关键字)

3) 正如杰斯珀所说,如果
/
其他
功能更强大的
已经完成了这个角色,那么收益是微乎其微的

4) Scala还有模式匹配,它以一种更为通用的方式与
match
关键字起着类似的作用。例如,如果表达式的计算结果不是布尔值,该怎么办

5) 这将增加额外的编译器复杂性。与特殊情况相比,Scala更喜欢简单性和一致性

6) 这是C语言的遗留问题,也是一种非常奇怪的语法。Scala有足够多奇怪的语法


脚注:
虽然可以提出一个合理的方案来模拟
?:作为方法(请参阅),它不如关键字那么可行。当“true”和“false”选项属于不同的数字类型时,正确处理键入操作很复杂,这是一个问题,因为您需要的运算符优先级比其他运算符低(或者必须使用括号),由于实现的运行时性质,性能可能会受到影响。

为什么不问问Scala开发人员呢?他们是唯一真正知道。。。还有一个关于scala中三元运算符的老问题:不关闭,仅仅因为其他人可能能够进行
?:
->
如果/否则
连接。。。但问题的措辞并不完全符合“常见问题解答指南”。如果scala开发人员希望java和其他语言的用户能够轻松转换为使用三元运算符,我认为没有三元运算符是一个糟糕的决定。当我在字符串中编写一些条件插值时,为了简洁起见,我想使用三元的,
if/else
确实不适合这种情况。只是我的观点,但是删除一些像java、PHP、C++、C++等三元操作符的标准是一个令人沮丧的猜想,我想象了很多人碰到这个问题。与键入syntax冲突,
与Actor的
ask
语法冲突那么为什么要设计语言使
首先冲突?《代码》怎么样
对于三值条件运算符,其可读性不如ask的
可读性(如果经常将可读性作为此类设计的原因),三值运算符并不模糊。数百万的C、C++和java DEVS理解语法。声明它是模糊的是一种观点,与证据相反。@ChuckCottrill“模糊”一词有多种定义。其中包括“难以理解”()。有争议的是,读用C型三元运算符编写的代码更难。将其命名为
fold
的基本原理是什么?看起来一点也不像FP折叠。@DanBurton:你可能会找到答案。@missingfaktor:链接断了…@tutuca,这是新链接-。