没有合适的资源?快使用搜索试试~ 我知道了~
首页golang中为什么不存在三元运算符详解
资源详情
资源评论
资源推荐

golang中为什么不存在三元运算符详解中为什么不存在三元运算符详解
主要给大家介绍了关于golang中为什么不存在三元运算符的相关资料,文中通过示例代码介绍的非常详细,对
大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
三元运算符广泛存在于其他语言中,比如:
python:
val = trueValue if expr else falseValue
javascript:
const val = expr ? trueValue : falseValue
c、c++:
const char *val = expr ? "trueValue" : "falseValue";
然而,被广泛支持的三目运算符在golang中却是不存在的!如果我们写出类似下面的代码:
val := expr ? "trueValue" : "falseValue"
那么编译器就该抱怨了:invalid character U+003F '?'。意思是golang中不存在?这个运算符,编译器不认识而且非字母数字下
划线也不能用做变量名,自然也就当作是非法字符了。
然而这是为什么呢,其实官方给出了解释,这里简单引用一下:
The reason ?: is absent from Go is that the language's designers had seen the operation used too often to create
impenetrably complex expressions. The if-else form, although longer, is unquestionably clearer. A language
needs only one conditional control flow construct.
golang中不存在?:运算符的原因是因为语言设计者已经预见到三元运算符经常被用来构建一些极其复杂的表达式。
虽然使用if进行替代会让代码显得更长,但这毫无疑问可读性更强。一个语言只需要有一种条件判断结构就足够
了。
毫无疑问,这是在golang“大道至简”的指导思想下的产物。
这段话其实没问题,因为某些三元运算符的使用场景确实会降低代码的可读性:
const status = (type===1?(agagin===1?'再售':'已售'):'未售')
const word = (res.distance === 0) ? 'a'
: (res.distance === 1 && res.difference > 3) ? 'b'
: (res.distance === 2 && res.difference > 5 && String(res.key).length > 5) ? 'c'
: 'd';
乍一看确实很复杂,至少第二个表达式不花个20秒细看可能没法理清控制流程(想象一下当缩进错位或是完全没有缩进的时
候)。
如果把它们直接转化成if语句是这样的:
let status = ''
if (type === 1) {
if (again === 1) {
status = '再售'
} else {
status = '已售'
}
} else {
status = '未售'
}
let word = ''
if (res.distance === 0) {
word = 'a'
} else {
if (res.distance === 1 && res.difference > 3) {
word = 'b'
} else {
if (res.distance === 2 && res.difference > 5 && String(res.key).length > 5) {
word = 'c'
} else {
word = 'd'

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0