如何干掉我的switch语句,它在每个场景中几乎完全相同?

时间:2017-05-16 23:05:58

标签: jquery

我有一个函数,它在拉丁语中使用单词(object),voice(string)和tense(string)来共轭动词。对于参考主动和被动是声音,然后呈现,不完美等......是时态。

基本上我的嵌套switch语句只是运行具有非常相似的名称和目的的不同函数,我想知道是否有某种方法可以使它更有效,我没有想到,因为它看起来非常冗余和笨重。

我们将不胜感激,以下是我的代码:

function getChart(word, voice, tense) {

//Root word variables
var inf = word.inf;
var pp3 = word.pp3;
var pp4 = word.pp4;
var conj = word.conj;

//If voice is active go to the active charts for the tense
//If voice is passive go to the passive charts for the tense
switch(voice) {
    case "Active":
        switch(tense) {
            case "Present":
                activePresentConj(inf, conj);
                break;
            case "Imperfect":
                activeImperfectConj(inf, conj);
                break;
            case "Future":
                activeFutureConj(inf, conj);
                break;
            case "Perfect":
                activePerfectConj(pp3);
                break;
            case "Plu Perfect":
                activePluPerfectConj(pp3);
                break;
            case "Future Perfect":
                activeFuturePerfectConj(pp3);
                break;
            default:
                return null;
        }
        break;
    case "Passive":
        switch(tense) {
            case "Present":
                passivePresentConj(inf, conj);
                break;
            case "Imperfect":
                passiveImperfectConj(inf, conj);
                break;
            case "Future":
                passiveFutureConj(inf, conj);
                break;
            case "Perfect":
                passivePerfectConj(pp4);
                break;
            case "Plu Perfect":
                passivePluPerfectConj(pp4);
                break;
            case "Future Perfect":
                passiveFuturePerfectConj(pp4);
                break;
            default:
                return null;
        }
        break;
    default:
        return null;
}

}

2 个答案:

答案 0 :(得分:0)

您可以打开时态并将声音传递到更通用的共轭方法,该方法可以处理主动和被动语音。

前:

switch(tense) {
    case "Present":
        presentConj(inf, conj, voice);
        break;
    case "Imperfect":
        imperfectConj(inf, conj, voice);
        break;
    case "Future":
        futureConj(inf, conj, voice);
        break;
    case "Perfect":
        perfectConj(pp3, voice);
        break;
    case "Plu Perfect":
        pluPerfectConj(pp3, voice);
        break;
    case "Future Perfect":
        futurePerfectConj(pp3, voice);
        break;
    default:
        return null;
}

答案 1 :(得分:0)

您可以使用字典来保存对函数的引用,例如

//Add this to your initialization routine
var dict = {};
dict["Present"] = presentConj;
dict["Imperfect"] = imperfectConj;
dict["Future"] = futureConj;

//use this code to process a particular tense
var func = dict[tense];
if (func == undefined) return null;
func(inf, conj, voice);

这只是一个简单的例子。为了使它适用于您的情况,您必须定义所有函数,以便它们采用相同的参数(即使它们不一定使用所有这些参数)。你可能需要两个字典(一个用于被动字典,一个用于活动字典),或者你可以将语音和时态连接成单个字符串以进行字典查找。

相关问题