查看: 10620|回复: 65

[辩论] 【话题讨论】在开发中需要依赖运算符的优先级吗?

[复制链接]
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2012-5-24 00:09 | 显示全部楼层 |阅读模式
这貌似是一个细节,但其实也是一个很基础的东西
你的程序曾在运算符上栽倒过么?是否因为曾经吃过亏而导致开发团队强制或被强制要求在表达式中加上了若干的括号?你是否认为,一个开发人员应该掌握这门语言里的所有运算符优先级?(在Oracle里是PL/SQL,SQL Servre里是TSql,还有其他开发语言如C++、Java、Ruby、Python等等)
有人认为为了代码的可读性,要尽量加上括号以避免复杂的运算符优先级导致代码无法维护,而有人又认为括号加多了影响正常的代码开发,需要依赖运算符的优先级。你是如何认为的呢?
这里有一个经典案例大家可以去看看http://www.itpub.net/thread-1525464-1-1.html

本次话题讨论集中在以下几个方面:
  • 你曾经因没注意到运算符优先级而栽倒过么?学习时做练习栽倒过的不算。
  • 如果你作为一名开发人员(无论是程序员还是开发DBA),你认为开发中是否需要依赖运算符的优先级?
  • 如果你是一名开发管理者,比如技术经理等,你会如何制定团队开发中的运算符优先级的依赖策略?
  • 类似的开发上的细节,你还在哪些方面栽倒过?因为我们知道,跌倒再爬起的经验更宝贵,多分享一点吧

都说细节决定成败,不过我认为,决定成败的实际上往往是大事而不是细节,所谓“细节决定成败”,更多的时候是当事人将一个大问题当成细节来看了,其中反映出来的不仅仅是经验和技能方面的缺陷,也可能是态度上的不屑。你又有什么看法呢?
讨论时间是 2012-05-24~2012-06-17,来吧,大家各抒己见吧!

最佳优胜者将获得《剑破冰山——Oracle开发艺术》一本!另有三名优秀参与者将获得 蛋蛋章一枚+888 P$。当然,最佳的肯定是有条件的,奖项得主是宁缺毋滥的,大家加油!
225404ny1ff13fukd2u0i1.jpg


论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2012-5-24 00:10 | 显示全部楼层
支持,吃过亏啊,几个OR,AND一起用,头晕时候写的,出问题了

使用道具 举报

回复
论坛徽章:
527
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2012-5-24 03:35 | 显示全部楼层
1. 和兔子有同样教训
2. 四则运算可以依赖,逻辑连接词可以依赖(但要分行书写并且带行首缩进)
3. 一切为可读性、可维护性服务。有时候加太多括号反而会破坏可读性。

使用道具 举报

回复
论坛徽章:
25
ITPUB伯乐
日期:2012-05-22 15:05:35慢羊羊
日期:2015-05-08 15:34:02喜羊羊
日期:2015-05-14 12:15:30美羊羊
日期:2015-07-02 22:22:59秀才
日期:2015-08-24 09:51:48天枰座
日期:2015-11-05 16:53:35双鱼座
日期:2015-12-05 19:22:56巨蟹座
日期:2015-12-20 18:46:10摩羯座
日期:2016-05-19 09:54:17ITPUB15周年纪念
日期:2016-10-13 13:15:34
发表于 2012-5-24 09:31 | 显示全部楼层
本帖最后由 hwtong 于 2012-5-24 09:36 编辑

我讲下sqlserver中遇到的一个问题吧.
不过不是运算符的优先级问题,是数据类型的优先级问题
示例如下:
create table tb(a char(10))
insert into tb
select ''
union all
select '1';

select * from tb where a=0
返回的结果集是''的那一行....

原因:
查看执行计划,在其中发现这句话:CONVERT_IMPLICIT(int,[tempdb].[dbo].[tb].[a],0)=CONVERT_IMPLICIT(int,[@1],0)
也就是说这里隐式进行了数据类型转换.
我们可以通过执行
select CONVERT(int,'')
查看到执行结果为0

使用道具 举报

回复
论坛徽章:
19
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292015年新春福章
日期:2015-03-04 14:53:16优秀写手
日期:2014-03-19 06:00:24马上有对象
日期:2014-02-18 16:44:082014年新春福章
日期:2014-02-18 16:44:08比亚迪
日期:2013-10-23 21:35:02ITPUB社区12周年站庆徽章
日期:2013-10-08 14:54:39茶鸡蛋
日期:2013-07-25 19:48:40灰彻蛋
日期:2013-05-24 09:42:412013年新春福章
日期:2013-02-25 14:51:24
发表于 2012-5-24 10:20 | 显示全部楼层

1.你曾经因没注意到运算符优先级而栽倒过么?学习时做练习栽倒过的不算。
a. 这个教训深刻了去了,自己写的,最后自己还看不懂,还误删了数据
2.如果你作为一名开发人员(无论是程序员还是开发DBA),你认为开发中是否需要依赖运算符的优先
级?
b. 不应该依赖运算符的优先级,特别是谓语条件复杂的SQL,让人去猜逻辑,后期的维护是非常痛苦的,甚至自己写的SQL都看不懂了
3.如果你是一名开发管理者,比如技术经理等,你会如何制定团队开发中的运算符优先级的依赖策略?
c. 括号是应当这种问题的葵花宝典,明确指定优先级
4.类似的开发上的细节,你还在哪些方面栽倒过?因为我们知道,跌倒再爬起的经验更宝贵,多分享一点吧!
d. 有的,公司的开发人员居然不知道绑定变量是啥,把我惊讶的,Top 5 events 总有libarary cache latch的争用,现在都是一律是用绑定变量(oltp系统)

使用道具 举报

回复
论坛徽章:
19
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292015年新春福章
日期:2015-03-04 14:53:16优秀写手
日期:2014-03-19 06:00:24马上有对象
日期:2014-02-18 16:44:082014年新春福章
日期:2014-02-18 16:44:08比亚迪
日期:2013-10-23 21:35:02ITPUB社区12周年站庆徽章
日期:2013-10-08 14:54:39茶鸡蛋
日期:2013-07-25 19:48:40灰彻蛋
日期:2013-05-24 09:42:412013年新春福章
日期:2013-02-25 14:51:24
发表于 2012-5-24 10:22 | 显示全部楼层
hwtong 发表于 2012-5-24 09:31
我讲下sqlserver中遇到的一个问题吧.
不过不是运算符的优先级问题,是数据类型的优先级问题
示例如下:


这个很奇怪的说

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
 楼主| 发表于 2012-5-24 10:31 | 显示全部楼层
ahdong2007 发表于 2012-5-24 10:22
这个很奇怪的说

在不同的系统中,默认的转换是有些许差别的,其他一些默认的行为习惯也会有差别
比如我们都习惯了数组的下标从0开始,可VB默认下标却是从1开始

使用道具 举报

回复
论坛徽章:
46
凯迪拉克
日期:2013-08-22 10:00:10Jeep
日期:2013-08-10 07:21:13ITPUB社区12周年站庆徽章
日期:2013-10-08 14:57:28ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:体操
日期:2008-10-24 13:08:31会员2007贡献徽章
日期:2007-09-26 18:42:10马上加薪
日期:2014-04-11 09:34:11秀才
日期:2015-09-06 10:19:32
发表于 2012-5-24 15:44 | 显示全部楼层
其实加不加括号还是各人喜好吧。
对C(++)而言,加不加都一样,由编译器来处理的,对程序的运行没什么影响。
当然,如果你能确认你书写的表达式是你想要的结果,那随你;
如果你对其中的运行符的优先级不能确定,那还是加上为好,确保结果正确是第一位的。

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
 楼主| 发表于 2012-5-24 15:50 | 显示全部楼层
cow977 发表于 2012-5-24 15:44
其实加不加括号还是各人喜好吧。
对C(++)而言,加不加都一样,由编译器来处理的,对程序的运行没什么影响 ...

C++还不一样,不同的C++编译器对某些表达式会产生不同的结果

使用道具 举报

回复
招聘 : 多个岗位招聘
论坛徽章:
33
2010广州亚运会纪念徽章:跆拳道
日期:2010-11-22 15:42:39灰彻蛋
日期:2012-05-16 13:17:56参与WIN7挑战赛纪念
日期:2012-05-24 10:37:35茶鸡蛋
日期:2012-05-28 17:27:32灰彻蛋
日期:2012-06-13 18:48:14双黄蛋
日期:2012-06-14 14:32:02奥运会纪念徽章:帆船
日期:2012-07-10 09:43:29奥运会纪念徽章:足球
日期:2012-08-17 09:17:32奥运会纪念徽章:帆船
日期:2012-07-26 15:46:49奥运会纪念徽章:赛艇
日期:2012-08-20 16:23:58
发表于 2012-5-24 16:35 | 显示全部楼层

强烈要求必须用括号

否则只有当时开发自己能看懂

过后自己都不知道逻辑了!!!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表