Re: [討論] 因為空格~我離開了一間公司

作者: watz0n (watz0n)   2014-09-14 20:11:56
※ 引述《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

Links booklink

Contact Us: admin [ a t ] ucptt.com