※ 引述《guest2008 (guest)》之铭言:
: ※ 引述《changyuheng (张昱珩)》之铭言:
: : 我所知的语言,function 的 return 值可以满足 condition 就不会再做多余的比较。
: : 例如
: : if (funcA())
: : 不会写成
: : if (funcA() == true)
: : 请问这样写有什么特殊原因吗?
: : return 应该是 statement,所以后面接的括号是给 expression 用的。
: : 但是 (true) 不就是 true 吗?
: 上面两种写法对编译器来说它都可以吃,没问题。
: 为什么这样写? 没什么:
: 一开始大家写程式都一定是模仿书上的范例,全部的范例都这样写,
: 写习惯也没特别去注意(所以真的就是纯习惯性问题而已,这才是真正的真相),
: 直到....。
小小的补充一下, 可能也有错误看看就好.
推测是因为利用Boolean代数特性, 如C语言有提供:
1. Logical AND (&& operator)
2. Bitwise AND (& operator)
利用的功能就是 Logical AND
所以在compiler处理后能视为:
if(funcA()&&0x01) => 回传值透过Logical AND设定旗标让if进行判断
if((funcA()==true)&&0x01) => 同上功能, 多卡一条必定要等于true内容
实际处理方式需要检查Compiler组译出来的结果, 因Compiler品牌也会不同.
感觉像照Intel处理方式回传值或处理资讯的值都会放在rax暂存器,
就加一段Logical AND判断使这种缩写语法也能通用.
更新入的话能从语言规格官方公开文件寻找如何处理此行为,
或是检查系统指令集处理条件时行为是否能容忍此种操作.
建议能看以下课程来取得更详细的解释:
https://www.coursera.org/course/hwswinterface
Section 1: Boolean Algebra
Section 4: Conditionals and Control Flow
Many Thanks,
watz0n