Re: [讨论] 因为空格~我离开了一间公司

楼主: changyuheng (张昱珩)   2014-09-14 20:16:27
※ 引述《guest2008 (guest)》之铭言:
: ※ 引述《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);
: 以上四个结果你自己去跑一下,当然案例二我真的是纯搞笑,
: 但不要你周遭的人还真的发生过这样的事件..那我就无言了。
: 你就知道括号的差异了。
这就看你的语言了,C 语言的 if statement 后面是接 boolean condition,
function 的 return value 若不是 boolean 本就不该不加 operator 直接放在这边,
就算有很多人这样放,也都是在确信能够正确 branch 的情况下做的偷懒。
还有,什么才是 true?
虽然 C99 用 macro 定义了 TRUE = 1,
但是 boolean condition 判断的仍是 0 或非 0。
funcA() == TRUE 这样的写法变成是判断 funcA() 回传的是 1 或非 1,
是会让人困惑的,
因为 == TRUE 和语言认为的 true/false boolean condition 不同,
语言认为的是 != FALSE。
比较好的写法是 funcA() == 1。
作者: guest2008 (guest)   2014-09-14 20:38:00
其实你不要去当认真狂人..纯拿来举例的东西让人能理解要表达的事而已..结果在鸡毛堆里求真理.两个案例都是故意找有争执的案例..这是蓄意的只是要表达多打几个字元会避免不必要的麻烦而已
作者: rodion (r-kan/reminder)   2014-09-14 21:04:00
若funcA有好好命名 就不需要啥funcA()==true了个人喜欢看到 if (isAAA()) 胜过 if (isAAA() == true)在良好的命名之下 '==true' 个人觉得是累赘
作者: GoalBased (Artificail Intelligence)   2014-09-14 21:09:00
推楼上,而且不要回传1\0来当true false更甚至是回传个4来当true..
楼主: changyuheng (张昱珩)   2014-09-14 21:12:00
一般没有 boolean 的语言会用两个逻辑反向来正规化。
作者: leicheong (睡魔)   2014-09-14 22:32:00
用IsX()很好, 实际上.NET framework内有很多这样的method/field.
作者: askacis (ASKA)   2014-09-15 12:51:00
Linux世界里function return 0代表正常返回,反而windows的code我常常看到别人用true=1 来回传~
作者: uranusjr (←這人是超級笨蛋)   2014-09-15 18:51:00
有 boolean 的语言比较常看到回传 true 当成功
作者: powerair   2014-09-16 00:47:00
我碰到B社的code function回传 SUCCESS(0) FAILURE(1)ERROR(2) 一开始知道SUCCESS值为0时 吓了一大跳所以不能写 if(funcA()) 一定得写 if(funA()==SUCCESS)
楼主: changyuheng (张昱珩)   2014-09-16 08:49:00
if (funcA() == SUCCESS) 这种没问题不会造成困惑
作者: shadow0326 (非议)   2014-09-16 14:47:00
我倒觉得SUCCESS为0比1更常见这又回到原原po问题一 原原po的写法更适合用在SUCCESS为0时 if (funA()) err_handling(); 的写法

Links booklink

Contact Us: admin [ a t ] ucptt.com