※ 引述《changyuheng (张昱珩)》之铭言:
: 我所知的语言,function 的 return 值可以满足 condition 就不会再做多余的比较。
: 例如
: if (funcA())
: 不会写成
: if (funcA() == true)
: 请问这样写有什么特殊原因吗?
:
: return 应该是 statement,所以后面接的括号是给 expression 用的。
: 但是 (true) 不就是 true 吗?
上面两种写法对编译器来说它都可以吃,没问题。
为什么这样写? 没什么:
一开始大家写程式都一定是模仿书上的范例,全部的范例都这样写,
写习惯也没特别去注意(所以真的就是纯习惯性问题而已,这才是真正的真相),
直到....。
程式写多了,被很多莫名其妙你觉得不会错的 bug 搞死,
除非你就是太单纯真的只会写一种程式语言,不会又要你写
C/C++、PHP、JAVA、jquery......哩哩拉拉一大堆语言。
把叙述写完整一点对你写程式来说,真的花不了你几豪秒钟的,
但可以避免很多不必要的困扰。
例如 if( A || B ) ..... 跟写 if( (A) || (B) )...
根本意思完全相同,但要是 A 是 复合词,例如他是 2014 && 0xFF
你没加括号就会出现恐怖的错误,而且这个错误你的编译器永远也检查不出来。
习惯性加 (),不管他多简单都习惯加括号,就可以减免你未来 debug 时间,
就这么简单而已,你要用你的写法没人说不行。
还有 if( funA() ) 写 if( funA()==true) 通通都可以,但你的程式码
交给后面维护的人,用后面的写法,他可以只看这一行就够了,
不需要回去看你的 funA() 到底是什么碗糕,是返回 float 还是 bool 还是参照。
反正写习惯了,也没特别去注意,但真的避开了很多麻烦,
你要用你的写法没人说不可以,只要小心未来不要采到很深的隐藏地雷就好。
因为这些都会认为绝对不会错,编译器也绝对检查不出来你真的要表达的意思,
他一定会 pass,但最后你会被搞死,尤其你要写很多种程式语言,各种程式语言
又有一点点小小小小差异时,写完整一点根本就不会错。
我举两个案例,你自己去思考
案例一:
1.1 return(1);
return(99); ==> if( funA() == true)
if( funA() == 1 )
1.2 return(true); ==> if( funA() == true )
if( funA() == 1 )
案例二:
#define A (32+64)
#define B (32+64);
return A+1000;
return B+1000;
return (A+1000);
retrun (B+1000);
以上四个结果你自己去跑一下,当然案例二我真的是纯搞笑,
但不要你周遭的人还真的发生过这样的事件..那我就无言了。
你就知道括号的差异了。