如果没有那么退出功能

时间:2012-02-03 07:15:11

标签: actionscript-3 actionscript

我看到一些java代码以更清晰的方式退出,如此代码所示。

if(a!=1) {System.exit();}
//If equal 1, execute the code below

ActionScript是否有类似的关键字来停止某个函数(不退出循环或应用程序)作为break关键字的替代?

private function isInt():void {
  if(a!=1) { /* stop executing the code after these */ }
  b=a;
}

2 个答案:

答案 0 :(得分:2)

您引用的Java代码退出整个过程 - 它停止执行。 Flash在主机进程内运行,例如Web浏览器,不应该被任意关闭 - 如果用户在其他选项卡上有内容怎么办?

如果您特别想要向托管浏览器发送信号,则应使用fscommand或更新的机制,并让浏览器/网页决定如何操作。

如果您只是想阻止执行您的功能,只需使用'return;'离开你所在的功能而不再进行任何处理。

答案 1 :(得分:1)

使用条件返回语句起初可能看起来干净漂亮,但在重构时可能会成为一个问题,因为它没有明确显示其意图。

你想说的是:

if my conditions are met, execute the next statement.

但你所说的是:

if my conditions are not met, get out of here.

示例#1

假设你有一个带有两个或三个嵌套if语句的复杂方法:

function myComplexMethod ( param1 : int, param2 : int, param3 : String ) : String {
    var ret:String = null;
    if (param3 != null) {
        ret = param3;
        if (param2 != 0) {
            ret += param2;
            if (param3 != 0) {
                ret += param1 + param2;
            }
        }
    } 
    return ret;
}

示例#2

当然,使用条件返回语句,相同的方法会更好看:

function myComplexMethod ( param1 : int, param2: int, param3:String ) : String {
    if (!param3) return null;
    var ret : String = null;
    ret += param3;

    if (param2 == 0) return ret;
    ret += param2;

    if (param1 == 0) return ret;
    ret += param1 + param2;

    return ret;
}

但乍一看,你能真正说出这种方法的输出是什么吗?

示例#3

如果您要真正清理代码怎么办?如果重构代码以反映每个块的意图,复杂的方法将成为一个简单的方法:

function mySimpleMethod ( param1 : int, param2: int, param3:String ) : String {
        return param3 != null ? 
            outputOfAllParams (param1, param2, param3 ) : null;
}

function outputOfAllParams ( param1 : int, param2: int, param3:String ) : String {
        return param2 != 0 ? 
            param3 + combinedOutputOfIntParams ( param1, param2 ) : param3;
}

function combinedOutputOfIntParams ( param1 : int, param2: int ) : String {
    return param1 != 0 ? 
        param2 + "" + sumOfIntParams( param1, param2) : "" + param2;
}

function sumOfIntParams( param1 : int, param2: int ) : int {
    return param1 + param2;
}

在最后一个示例中,代码易于阅读,您只需查看它就可以看到应该执行的操作。

问题是:您可以轻松地使用重构从示例#1到示例#3 - 很明显,每个条件块都将被重构为新方法。使用条件返回语句,它更不直观:您必须非常仔细地检查,所需代码块的结束位置以及何时返回。

当然,如果你正在处理这样的简单任务,那么好处并不明显,但如果你有真正的生产代码,你肯定希望 intent 尽可能明显,并且即使您在几个月内回到自己的代码中,如果您使用示例#2,也需要花费更长的时间来理解它应该做什么。