Flash AS3教程:运算符“?:”

互联网   发布时间:2008-10-06 01:25:52   作者:佚名   我要评论
前面给大家演示了一个Flash AS3教程:小游戏开发实战尝试,这篇说说运算符的使用。 首先个运算符,我们应不应该推崇多使用,先来做个测验: CODE: var sumo:int = 0; var sumj:int = 0; for(var i:int = 0; i < 10000000; i ){ if(i % 2 == 0){ su
前面给大家演示了一个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,前面的,否则后面的
涉及太复杂的类型,判断也不要用?:,但是是一些数字,逻辑值等,用用 ?: ,效果还是很不错的!

相关文章

  • flash cs6鼠标跟随效果实现代码分享

    flash cs6想要实现鼠标跟随效果?该怎么制作呢?今天我们就来看看使用as2.0实现鼠标跟随效果的教程,需要的朋友可以参考下
    2019-05-19
  • Flash cs6怎么使用代码输入中英文文本?

    Flash cs6怎么使用代码输入中英文文本?Flash cs6中可以使用文字工具直接输入文本,也可以使用代码来输入文本,该怎么使用代码输入文本呢?请看下文详细的教程,需要的朋友
    2018-03-11
  • flash as3.0怎么定义抽象类和抽象?

    flash as3.0抽象类怎么定义? as3.0中有很多抽象类,该怎么定义抽象类和抽象方法呢?下面我们就来看看简单的例子,需要的朋友可以参考下http://www.jb51.net/softs/408402.
    2018-02-28
  • flash cs6中怎么使用ActionScript3.0?

    flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,该怎么使用呢?下面我们就来看看详细的教程,需要的朋友可以参考下
    2018-01-25
  • Flash中怎么实现鼠标点击决定图像位置?

    本教程给大家分享一个Flash小教程,教大家在Flash CS6中怎么实现鼠标点击决定图像位置?方法很简单,感兴趣的朋友欢迎前来一起分享学习
    2018-01-12
  • Flash中如何用代码将图片放在自己想要的舞台位置?

    本教程教脚本之家的ActionScript教程学习者在Flash中如何用代码将图片放在自己想要的舞台位置,教程讲解的详细,感兴趣的朋友欢迎前来分享学习
    2017-11-20
  • 在Flash CS6中使用with函数绘制背景图教程

    本教程教脚本之家的ActionScript教程学习者如何在Flash CS6中使用with函数绘制背景图?教程一步步讲解的挺详细,方法也不难,非常适合Flash新手入门学习
    2017-11-18
  • Flash怎么设置元件坐标?flash使用代码设置元件的坐标的教程

    Flash怎么设置元件坐标?flash中导如的元件需要添加坐标,该怎么定位元件坐标呢?下面我们就来看看flash使用代码设置元件的坐标的教程,需要的朋友可以参考下
    2017-10-11
  • Flash怎么制作来回摇摆的花朵的动画?

    Flash怎么制作来回摇摆的花朵的动画?Flash中想要给花朵制作一段摇摆的动画效果,该怎么制作呢?下面我们就来看看详细的教程,很简单,需要的朋友可以参考下
    2017-05-23
  • Flash怎么制作流动七彩色的文字?

    Flash怎么制作流动七彩色的文字?想要让文字动起来,该怎么使用flash给文字制作一个流动七彩色的动画呢?下面我们就来看看详细的教程,需要的朋友可以参考下
    2017-04-23

最新评论