转到与开关对比你自己的方式!这是您可读性的选择

时间:2017-12-08 04:04:13

标签: algorithm implementation goto

you can notice that it may be flowchart or state machine transition

我想知道哪个是实现上述算法流程图的更好选择。

我认为是更好的解决方案。

你怎么看?我想知道你的意见。

[转到版本]

main () {
    if ( condition == a )
        goto A:
    elif ( condition == b )
        B();
    elif ( condition == c )
        C();
    elif (condition == e )
        E();

    A:
    // do something

    B:
    if ( condition == c )
        // do something
        goto C;
    elif ( condition == d )
        // do somthing
        goto D;

    C:
    if ( condition == d )
        // do something
        goto D;

    D:
    if ( condition == a)
        // do something
        goto A;
    elif ( condition == e)
        // do something
        goto E;

    E:
        // do something

    return;
}

[具有切换案例语法的函数调用版本]

main () {
    switch (condition) {
        case a:
            A();
            break;
        case b:
            B();
            break;
        case c:
            C();
            break;
        case e:
            E();
            break;
    }
}

fuction A() {
    // do something

    switch (condition) {
        case b:
            B();
            break;  
    }
}

function B() {
    // do something

    switch (condition) {
        case c:
            C();
            break;
        case d:
            D();
            break;
    }

}

function C() {
    // do something

    switch (condition) {
        case d:
            D();
            break;
        }

}

function D() {
    // do something

    switch (condition) {
        case a:
            A();
            break;
        case e:
            E();
            break;
    }
}

function E() {
    // do something
    return ;
}

[添加实现和处理所有执行路径的方式]

2 个答案:

答案 0 :(得分:0)

我认为这样更好:

main () {
    if ( condition != a ) {
        if ( condition == b )
            B();
        elif ( condition == c )
            C();
        elif (condition == e )
            E();
    }

    for (;;) {
        // do something (A)

        if ( condition == c ) {
            // do something
            if ( condition == d )
                // do something
        }
        elif ( condition == d )
            // do somthing
        if ( condition != a)
            break;
        // do something
    }
    if ( condition == e)
        // do something

    // do something

    return;
}

我很确定这相当于你的第一个版本。我不会验证你的第二个版本是否相同,因为它很难阅读,我不会说它必然会实现你链接到的状态机。

答案 1 :(得分:0)

我写的是比我的goto版更好的版本 我把它称为第二个版本。

我认为可读性更好。

你怎么看待这个?

[使用转到的第二个版本]

main () {
    if ( condition == a )
        goto A:
    elif ( condition == b )
        B();
    elif ( condition == c )
        C();
    elif (condition == e )
        E();

    A:
    // do something

    B:
    if ( condition == d )
        // do somthing
        goto D;

    C:
        // do something

    D:
    if ( condition == a)
        // do something
        goto A;

    E:
        // do something

    return;
}