看板 Soft_Job 關於我們 聯絡資訊
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.117.10 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1410696718.A.E1D.html