首先个运算符我们应不应该推崇多使用先来做个测验:
CODE:
var sumo: = 0;
var sumj: = 0;
for(var i: = 0; i < 10000000; i ){
(i % 2 0){
sumo i;
}{
sumj i;
}
}
trace(getTimer);
//输出结果:562
var sumo: = 0;
var sumj: = 0;
for(var i: = 0; i < 10000000; i ){
i % 2 0 ? sumo i : sumj i;
}
trace(getTimer);
//输出结果:572
从上面测试结果不难看出 确比?:快点那么是不是就应该抛弃?:呢?答案是错在计算10000000次情况下他们效率差是那么低才10毫秒
那么我们推荐用?:时候:
1、没必要情况下
比如判断逻辑值如果为true则a=20如果为false则a=30
代码:a = p ? 20 : 30;
如果写成 就是
(p){
a = 20;
}{
a = 30;
}
用 勉强说得过去那么是个需要传参地方为true为false情况不样如果你在多出来5行来写这段代码个人认为算是多余了!
完全可以采用:fun(p ? 20 : 30);
如果说看不懂这样代码那么继续往下看会教大家种理解 ?: 办法
2、逻辑比较复杂但是都是属于单向判断地方咱就可以使用 ?: 了
比如我写类中有句这样代码:
num = isMaster ? (p1 ? (p2 ? 2 : 3) : (p2 ? 1 : 4)) : (p1 ? (p2 ? 4 : 1) : (p2 ? 3 : 2));
有兴趣朋友把他翻成 然后在对比下这两个代码你觉得那个看起来更累?
当然比较的前还是继续看下面让我来教大家如何快速理解 ?:
理解办法:
先看个简单例子:
a = num 1 ? 2 : 3;
用通俗语句说就是:如果num等于1则a=2否则a=3这个很好理解那么上面那个类似火星文代码
套用这种说法就比较难了因此我们要改变思维想法要直观看着理解
a是准备接收得值物体跟后面计算无关那么我们可以直接理解后面
即:num 1这个物体问2所以为3扩充下语句就是:num 1问2你等于我吗?2回答不所以为3
在直观理解时候先判断num 1是否为真值为真?号后面为假:号后面
不用把?:想象成 什么 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为truep1为truep2为true时候num等于2
isMaster为truep1为truep2为false时候num等于3
isMaster为truep1为falsep2为true时候num等于1
isMaster为truep1为falsep2为false时候num等于4
isMaster为falsep1为truep2为true时候num等于4
isMaster为falsep1为truep2为false时候num等于1
isMaster为falsep1为falsep2为true时候num等于3
isMaster为falsep1为falsep2为false时候num等于2
就这么简单或许你还能发现更多规律其实理解?:时候不要把他当作 记住为true前面否则后面
涉及太复杂类型判断也不要用?:但是是些数字逻辑值等用用 ?: 效果还是很不错!
最新评论