文章出處

前面給大家演示了一個Flash AS3教程:小游戲開發實戰嘗試,這篇說說運算符的使用。首先個運算符,我們應不應該推崇多使用,先來做個測驗:

CODE:
var sumo:int = 0;
var sumj:int = 0;
for(var i:int = 0; i < 10000000; i ){
if(i % 2 == 0){
sumo = i;
}else{
sumj = i;
}
}
trace(getTimer());
//輸出結果:562

var sumo:int = 0;
var sumj:int = 0;
for(var i:int = 0; i < 10000000; i ){
i % 2 == 0 ? sumo = i : sumj = i;
}
trace(getTimer());
//輸出結果:572
從上面的測試結果不難看出,if else的確比?:快一點,那么是不是就應該拋棄?:呢?答案是錯
在計算10000000次的情況下,他們的效率差是那么的低。。才10毫秒。。
那么我們推薦用?:的時候:
1、沒必要的情況下。
比如,判斷邏輯值,如果為true,則a=20,如果為false,則a=30
代碼:a = p ? 20 : 30;
如果寫成if else,就是
if(p){
a = 20;
}else{
a = 30;
}
用if else勉強說得過去
那么是一個需要傳參的地方,為true,為false,情況不一樣,如果你在多出來5行,來寫這段代碼,個人認為,算是多余的了!
完全可以采用:fun(p ? 20 : 30);
如果說看不懂這樣的代碼,那么繼續往下看,會教大家一種理解 ?: 的辦法

2、邏輯比較復雜,但是都是屬于單向判斷的地方,咱就可以使用 ?: 了
比如我寫的類中,有句這樣的代碼:
num = isMaster ? (p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) : (p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2));
有興趣的朋友把他翻成if else,然后在對比一下這兩個代碼,你覺得那個看起來更累?
當然比較之前,還是繼續看下面,讓我來教大家如何快速理解 ?:

理解的辦法:
先看一個簡單的例子:
a = num == 1 ? 2 : 3;
用通俗的語句說,就是:如果num等于1,則a=2,否則a=3,這個很好理解,那么上面那個類似火星文的代碼
套用這種說法就比較難了,因此我們要改變思維想法,要直觀的看著理解
a是準備接收得值的物體,跟后面的計算無關,那么我們可以直接理解后面
即:num == 1這個物體問2,所以為3,擴充一下語句就是:num == 1問2你等于我嗎?2回答不,所以為3
在直觀理解的時候,先判斷num == 1是否為真值,為真?號后面的,為假:號后面的
不用把?:想象成if else,什么if num == 1 那么就等于2,否則等于3,這樣理解當然慢
就非常直觀的理解,為真,?號,否則:號

我們再來看那個類似火星文的東西:
num = isMaster ? (p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) : (p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2));
isMaster為true,就是(p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) ,否則就是(p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2))
p1為true,就是(p2 ? 2 : 3),否則就是(p2 ? 1 : 4)
…………
依次擴散,其實你會發現一個規律,沒發現也沒關系,我來幫你總結
我一眼就可以看出:
isMaster為true,p1為true,p2為true的時候,num等于2
isMaster為true,p1為true,p2為false的時候,num等于3
isMaster為true,p1為false,p2為true的時候,num等于1
isMaster為true,p1為false,p2為false的時候,num等于4
isMaster為false,p1為true,p2為true的時候,num等于4
isMaster為false,p1為true,p2為false的時候,num等于1
isMaster為false,p1為false,p2為true的時候,num等于3
isMaster為false,p1為false,p2為false的時候,num等于2

就這么簡單,或許你還能發現更多的規律,其實理解?:的時候,不要把他當作if else,記住為true,前面的,否則后面的
涉及太復雜的類型,判斷也不要用?:,但是是一些數字,邏輯值等,用用 ?: ,效果還是很不錯的!
歡迎轉載:http://www.kanwencang.com/bangong/20161206/63905.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()