Go语言中奇怪的if语句
常见的 if 语句大约是这个样子的(C++):
Event event = getEvent();
if (event == EventA) {processA(event);
} else {processB(event);
}
这样有一个问题:变量 event 定义在了 if 语句的外面,也就是说,在 if 语句之后,也可以继续使用 event 变量;而如果后续的操作中不需要 event 变量了,它实际上就造成了命名空间的污染。这并不是一个严重的问题,多数情况下不会造成任何问题,而如果一定要解决的话,在 C++ 中可以在 event 的定义之外套一层大括号来限定它的作用域。虽然代码看上去有一些奇怪,但无伤大雅。比如这样:
{Event event = getEvent();if (event == EventA) {processA(event);} else {processB(event);}
}
但是 Go 的设计者不知是出于什么原因,非要从语法上解决这个问题。于是 Go 中的 if 语句可以写成这个样子:
if event := getEvent(); event == EventA {processA(event)
} else {processB(event)
}
对,你没有看错。虽然 event 是定义在了 if 中,但它在 else 中也是可以用的。也就是说,这种写法实际上是上述的 C++ 写法的语法糖。
并不清楚 Go 的设计者添加这个语法糖的目的是什么。它仅仅是为了解决变量的作用域问题而提出,却牺牲了代码的可读性。if 语句可能会变得过长而不易阅读;在后续重构的过程中,拆分 if 语句也会变得困难。为了解决一个小问题而增加一种有问题的语法,看上去有点得不尝失。
原文链接:https://zhuanlan.zhihu.com/p/59633089
Go语言中奇怪的if语句相关推荐
- 奇怪的方式c语言,C语言中奇怪的C语言特性
3)Duff's Device http://en.wikipedia.org/wiki/Duff%27s_device 特点是switch与while交错出现.代码类似 4)同名同姓现象 在< ...
- c语言格式字符If,C语言所有语句格式 C语言中的的if语句共有多少种格式?
导航:网站首页 > C语言所有语句格式 C语言中的的if语句共有多少种格式? C语言所有语句格式 C语言中的的if语句共有多少种格式? 相关问题: 匿名网友: 1.if语句: if(Bool表达 ...
- C语言中要改变循环语句的流程可以使用的语句有哪些
C语言中要改变循环语句的流程可以使用的语句有:break,continue和goto.break语句可以终止循环而执行整个循环语句后面的代码:continue语句可以跳过循环体中剩余的语句而强制进入下 ...
- c语言按键实现跳转程序,C语言中的跳转语句
<C语言中的跳转语句>由会员分享,可在线阅读,更多相关<C语言中的跳转语句(4页珍藏版)>请在人人文库网上搜索. 1.C语言中的跳转语句c语言有4个跳转语句return.got ...
- c语言中偶数的平方while,在C语言中可以用以下语句来实现循环:1. 用while语句;2. ...新版1127.ppt...
在C语言中可以用以下语句来实现循环:1. 用while语句:2. ...新版1127.ppt 循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体. 循环语句之 while语句 ...
- c语言自定义color,forecolor c语言中的颜色设置语句详解
backcolor与forecolor的区别 backcolor:用来设置图像的背景颜色,也用来设置文档.表格.图像等的背景颜色. forecolor:用来设置图像的前景颜色,也用来设置文档.表格.图 ...
- c语言输入循环语句,C语言中输入输出和循环语句详解.ppt
C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...
- pass在c语言中的作用,Python语句中pass语句有什么作用?浅谈pass语句的用法
pass语句就是好比是数学中的0,本身并没有任何实际意义,但是又是个确实存在的字符.所以,Pythonpass语句是空语句,是为了保持程序结构的完整性,pass不做任何事情,一般用做占位语句,作用与b ...
- c语言表达式和表达式语句的区别,C语言中表达式和表达式语句的区别(什么又叫做表达式)?...
满意答案 sfuejr22 2016.01.13 采纳率:56% 等级:7 已帮助:659人 表达式: 表达式是操作符.操作数和标点符号组成的序列,其目的是用来说明-个计算过程. 表达式可以嵌套 ...
最新文章
- Backbone学习日记[1]:感性认识
- 手把手带你剖析 Springboot 启动原理!
- Firefox 多版本共存
- Excel ,三步 快速实现应用一个公式到一列或一行中
- mysql 表名不加单引号_当表名“ match”没有用单引号引起来时,MySQL引发错误?...
- python字典函数fromkeys()
- 密码学 / 哈希算法
- fetch获取解析json数据
- C# 中的 is 和 as 运算符 简单举例说明
- Centos 7 安装 PostgreSQL
- angular_directive动感超人
- owa outlook使用中的一些问题-陆续添加
- AD19自动布线出错,有些线未连接
- tomcat安装配置教程
- 三坐标检测之报告查看T值
- 面试考点:逻辑思维面试题(软件测试)
- MapReduce实现订单商品的统计
- 服务器并发量估算公式和计算方法
- UR 机器人HMI 交互界面开发记录
- 安装jre运行环境_如何下载安装java运行环境jre
热门文章
- python入门到精通需要学多久-入门到精通python要多久
- python将运行结果用窗口打开-如何打开新控制台并运行python脚本
- 数据分析软件python 对电脑的要求-数据分析5大软件PK,你最爱哪个?
- python3.6.0安装教程-Python 3.6.0下载及安装教程
- python英文单词-python常用150个英文单词
- python简单代码加法-CPython 源码中整数加法的实现
- python转行it好学吗-想转行学python过来人提醒大家几点
- python与excel做数据可视化-python数据可视化怎么做?excel可视化图表制作?
- python是c语言写的吗-python和C语言的差别
- 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)